ElectionDB
Recherche & Motivation
Notre réflexion initiale a clairement montré qu’il n’existait pas beaucoup de services stockant et présentant les données électorales au grand public et même aux organes d’information. Avec ce projet, nous voulions combler cette lacune en fournissant des informations telles que les transactions des partis et les données démographiques avancées des électeurs qui ne sont rapportées par aucun média ni stockées dans les bases de données actuelles.
Les bases de données actuelles telles que http://www.indiavotes.com, bien que fournissant des résultats post-électoraux comme le taux de participation électorale et la clôture des élections, ne fournissent aucune information susceptible d'aider à prédire les élections. En plus de cela, il n’y a aucune information sur les travailleurs électoraux ou les EVM. Nous pensons que ces données sont essentielles au bon déroulement des élections et avons veillé à les inclure dans notre projet. Nous espérons que notre projet contribuera à créer des élections bien informées dans les temps à venir et qu'en utilisant notre projet, chacun pourra mieux analyser ses choix.
Aperçu
Nous avons créé un système de base de données électorale indienne qui stocke les informations sur les élections, les électeurs, la commission électorale, les candidats et les partis politiques. Grâce à notre site, un utilisateur peut avoir accès à toutes les données dont il a besoin.
Hypothèse : Nous avons accès à toutes les données sur les partis et les élections.
Nos principales parties prenantes seront les électeurs, les partis politiques, les médias et les chercheurs indépendants.
- Pour les électeurs, vous pourrez voir combien d’argent les partis politiques ont dépensé en publicités à l’aide de graphiques faciles à comprendre. Comparaison de différents candidats politiques en matière d'éducation, d'histoire politique et de casier judiciaire. En outre, la répartition des dépenses des partis aidera à contrôler l’utilisation de l’argent des impôts et à mettre l’argent sous le feu des projecteurs.
- Pour les partis politiques, vous obtiendrez les données démographiques des électeurs de toutes les circonscriptions sur différentes lignes. En outre, ils peuvent accéder à des informations sur les candidats d’autres partis et élaborer des stratégies pour leurs candidats en conséquence.
- Pour les médias et les chercheurs indépendants, vous pouvez combiner les données des électeurs et des partis pour analyser pourquoi un parti politique a pu remporter une circonscription particulière. De plus, en analysant davantage les données, vous pourriez donner un meilleur aperçu des tendances de vote. Les dépenses des partis et les données historiques des candidats peuvent également être utiles à ces agences/individus.
- Pour la Commission électorale, les dossiers de tous les agents impliqués dans le processus électoral permettront une administration plus facile et rationaliseront également le processus d'attribution des agents à chaque district. De plus, les informations EVM seront utiles pour rechercher et remplacer les machines défectueuses.
Conception technique
Back-end
Nous avons décidé d'utiliser le framework Django dans notre application car il s'agit d'un framework Web basé sur Python et qui suit le modèle architectural modèle-modèle-vue, ce qui le rend hautement évolutif.
Les principaux problèmes que nous avons rencontrés/anticipés lors de notre projet dans la partie backend étaient :
- Comment contrôler simultanément les multiples demandes de mise à jour de la base de données - Pour cela, nous avons décidé d'utiliser des verrous sur notre serveur. Une fois qu'un thread a acquis le verrou, toutes les tentatives ultérieures d'acquisition du verrou sont bloquées jusqu'à ce qu'il soit libéré. Et il était nécessaire que les threads acquièrent le verrou avant d'exécuter la requête sur la base de données. Ainsi, les verrous garantissaient qu'un seul client à la fois pouvait mettre à jour la base de données.
- Plusieurs requêtes en même temps - Pour surmonter ce problème, nous avons décidé de traiter la demande de chaque client sur un nouveau thread, ce qui nous a aidé à fournir la réponse plus rapidement car la demande du client ne nécessitait pas d'attendre la fin d'une autre demande. Nous avons remarqué une diminution significative du temps d'utilisation des threads pour chaque requête.
- Situation de perte de connexion à la base de données - Nous avons anticipé qu'il était tout à fait possible que la connexion à la base de données soit perdue et pour cela, nous avons créé une table de journalisation sur notre serveur qui conserve l'entrée de chaque serveur de transactions effectué avec la base de données.
- Créer une mémoire cache sur le serveur - Comme la base de données continue de recevoir des mises à jour, nous devons donner aux clients des valeurs mises à jour à chaque fois que la valeur est mise à jour. Nous avons donc décidé de créer une mémoire cache qui sera mise à jour chaque fois que quelqu'un mettra à jour la base de données. Cela permet également d'économiser le coût d'envoi d'une requête à la base de données pour chaque utilisateur, car ce cache mis à jour est fourni et une seule requête suffit pour tous les utilisateurs.
L'extrémité avant
Nous avons utilisé VanillaJS avec HTML et CSS pour créer le frontend.
Les principaux problèmes que nous avons rencontrés/anticipés lors de notre projet dans la partie backend étaient :
- Mise à jour dynamique des graphiques et des tableaux sur la page Web - Nous prévoyions que la base de données pourrait être mise à jour par un autre utilisateur pendant que quelqu'un navigue sur notre site Web et qu'il ne serait pas possible pour les utilisateurs de continuer à actualiser les pages Web pour obtenir des mises à jour. Donc, pour surmonter ce problème, nous avons décidé d'utiliser la fonction AJAX pour mettre à jour dynamiquement les graphiques et les tableaux pour les utilisateurs en évitant d'avoir à actualiser la page Web. De plus, il est très efficace car il récupère les données de la mémoire cache du serveur et ne nécessite pas d'envoyer la requête à la base de données.
Base de données
Nous avons créé une table pour chaque partie prenante afin de stocker ses coordonnées et quelques tables pour établir des relations entre elles. Pour les tables contenant des données volumineuses comme les électeurs, nous avons créé leur table d'index afin que nous puissions accéder rapidement à ses données. Nous avons également normalisé la base de données afin qu'elle soit facile à comprendre et plus efficace à mettre à jour.
La base de données est publiée sur les serveurs Microsoft Azure et est accessible à l'aide du logiciel de gestion Microsoft SQL Server.
Documentation
L'utilisateur doit procéder comme suit pour exécuter ce projet :
- Puisque ce projet est implémenté dans Django Framework, l'utilisateur doit installer Django sur sa machine puis se rendre dans le répertoire du projet DBMS_PROJECT/django_project
- Après avoir ouvert ce répertoire, l'utilisateur doit exécuter la commande suivante :
python manage . py runserver
- Après cela, l'utilisateur pourrait voir les lignes suivantes :
You have 17 unapplied migration ( s ). Your project may not work properly until you apply the migrations for app ( s ): admin , auth , content types , sessions .
Run 'python manage.py migrate' to apply them .
April 30 , 2020 - 14 : 41 : 47
Django version 3.0 . 5 , using settings 'django_project.settings'
Starting development server at http : // 127.0 . 0.1 : 8000 /
Quit the server with CTRL - BREAK .
- Ouvrez le lien localhost. Le projet s'ouvrirait alors dans le navigateur.
Mise en œuvre des bonus
Nous avons créé une élection virtuelle qui nous permet d'estimer le résultat de l'élection avant le résultat réel. Un utilisateur se connecte à notre site et choisit le candidat, une fois qu'il a terminé, il n'est plus autorisé à voter. De cette façon, nous créons un tableau avec les détails de l'électeur et son vote et après un certain temps, nous déclarons les résultats estimés à nos utilisateurs.
De cette façon, nous fournissons à notre utilisateur le résultat avant que les votes réels ne commencent à compter.
Nous avons créé un service très efficace qui assure le suivi des transactions, maintient une mémoire cache, conserve les verrous de concurrence et fournit des résultats rapides en utilisant le multithreading. Les détails sont mentionnés dans la conception technique.
Nous avons créé des pages Web très efficaces qui permettent à l'utilisateur de continuer à obtenir les données mises à jour sans même actualiser la page Web. Les détails sont mentionnés dans la conception technique.
Diagramme ER
Lien : https://app.creately.com/diagram/knHC7u2yS86/
Co-contributeurs
- Bhavay Aggarwal 2018384
- Diptanshu Mittal 2018232
- Manas 2018244
- Rishabh Chauhan 2018256