WahlDB
Forschung & Motivation
Unser erstes Brainstorming machte deutlich, dass es nicht viele Dienste gab, die Wahldaten speichern und der breiten Öffentlichkeit und sogar Nachrichtenagenturen präsentieren. Mit diesem Projekt wollten wir diese Lücke schließen, indem wir Informationen wie Parteitransaktionen und fortgeschrittene Wählerdemografien bereitstellen, über die weder in einer Nachrichtenagentur berichtet wird noch in aktuellen Datenbanken gespeichert wird.
Aktuelle Datenbanken wie http://www.indiavotes.com liefern zwar Nachwahlergebnisse wie Wahlbeteiligung und ausgetragene Wahlen, liefern jedoch keine Informationen, die zur Vorhersage von Wahlen beitragen könnten. Darüber hinaus gibt es keine Informationen über Wahlhelfer oder EVMs. Wir glauben, dass diese Daten für den reibungslosen Ablauf von Wahlen von entscheidender Bedeutung sind und haben darauf geachtet, sie in unser Projekt einzubeziehen. Wir hoffen, dass unser Projekt in Zukunft dazu beitragen wird, gut informierte Wahlen zu ermöglichen, und dass durch die Nutzung unseres Projekts jeder seine Entscheidungen besser analysieren kann.
Überblick
Wir haben ein indisches Wahldatenbanksystem erstellt, das Informationen über die Wahlen, Wähler, Wahlkommissionen, Kandidaten und politische Parteien speichert. Über unsere Website kann ein Benutzer auf alle benötigten Daten zugreifen.
Annahme: Wir haben Zugriff auf alle Daten über die Parteien und die Wahl.
Unsere wichtigsten Stakeholder werden Wähler, politische Parteien, Medien und unabhängige Forscher sein.
- Für Wähler können Sie anhand leicht verständlicher Grafiken sehen, wie viel Geld politische Parteien für Werbung ausgegeben haben. Vergleich verschiedener politischer Kandidaten in Bezug auf Bildung, politische Geschichte und Strafregister. Darüber hinaus wird die Aufschlüsselung der Parteiausgaben dazu beitragen, die Verwendung von Steuergeldern zu überwachen und den Missbrauch von Geldern ins Rampenlicht der Öffentlichkeit zu rücken.
- Für politische Parteien erhalten Sie die Bevölkerungszahl der Wähler in allen Bezirken auf verschiedenen Ebenen. Außerdem können sie auf Informationen über Kandidaten anderer Parteien zugreifen und ihre Kandidaten entsprechend strategisieren.
- Für Medienunternehmen und unabhängige Forscher können Sie die Wähler- und Parteidaten kombinieren, um zu analysieren, warum eine politische Partei einen bestimmten Bezirk gewinnen konnte. Durch eine weitere Analyse der Daten könnten Sie außerdem einen besseren Einblick in die Abstimmungstrends gewinnen. Auch Daten zu Parteiausgaben und Kandidatenverlauf können für diese Agenturen/Einzelpersonen nützlich sein.
- Für die Wahlkommission werden Aufzeichnungen aller am Wahlprozess beteiligten Amtsträger eine einfachere Verwaltung ermöglichen und auch den Zuteilungsprozess von Amtsträgern für jeden Bezirk rationalisieren. Außerdem sind EVM-Informationen nützlich, um defekte Maschinen zu finden und zu ersetzen
Technisches Design
Backend
Wir haben uns für die Verwendung des Django-Frameworks in unserer App entschieden, da es sich um ein Python-basiertes Web-Framework handelt und dem Architekturmuster „Modell-Vorlage-Ansicht“ folgt, was es hoch skalierbar macht.
Die Hauptprobleme, auf die wir während unseres Projekts im Backend-Teil gestoßen sind/erwartet haben, waren:
- So steuern Sie mehrere Aktualisierungsanfragen an die Datenbank gleichzeitig – Aus diesem Grund haben wir uns für die Verwendung von Sperren auf unserem Server entschieden. Sobald ein Thread die Sperre erworben hat, werden alle nachfolgenden Versuche, die Sperre zu erlangen, blockiert, bis sie aufgehoben wird. Und es war notwendig, dass die Threads die Sperre erlangten, bevor sie die Abfrage an die Datenbank ausführen konnten. Somit stellten die Sperren sicher, dass jeweils nur ein Client die Datenbank aktualisieren kann.
- Mehrere Anfragen gleichzeitig – Um dieses Problem zu lösen, haben wir beschlossen, die Anfrage jedes Kunden in einem neuen Thread zu verarbeiten, was uns dabei half, die Antwort schneller zu liefern, da die Anfrage des Kunden nicht auf den Abschluss einer anderen Anfrage warten musste. Wir haben bei der Verwendung der Threads für jede Anfrage eine deutliche Verkürzung der Zeit festgestellt.
- Situation, in der die Verbindung zur Datenbank verloren geht – Wir haben damit gerechnet, dass es durchaus möglich ist, dass die Verbindung zur Datenbank verloren geht, und haben zu diesem Zweck eine Protokolltabelle auf unserem Server erstellt, die den Eintrag jeder Transaktion speichert, die der Server mit der Datenbank durchführt.
- Erstellen eines Cache-Speichers im Server – Da die Datenbank ständig aktualisiert wird, müssen wir den Clients jedes Mal aktualisierte Werte bereitstellen, wenn der Wert aktualisiert wird. Deshalb haben wir uns entschieden, einen Cache-Speicher zu erstellen, der jedes Mal aktualisiert wird, wenn jemand die Datenbank aktualisiert. Es hilft auch, die Kosten für das Senden einer Abfrage an die Datenbank für jeden Benutzer zu sparen, da dieser aktualisierte Cache übermittelt wird und nur eine Anfrage für alle Benutzer ausreicht.
Frontend
Für die Erstellung des Frontends haben wir VanillaJS mit HTML und CSS verwendet.
Die Hauptprobleme, auf die wir während unseres Projekts im Backend-Teil gestoßen sind/erwartet haben, waren:
- Dynamische Aktualisierung der Grafiken und Tabellen auf der Webseite – Wir haben damit gerechnet, dass die Datenbank möglicherweise von einem anderen Benutzer aktualisiert wird, während jemand auf unserer Website surft, und es den Benutzern nicht möglich sein wird, die Webseiten ständig zu aktualisieren, um Updates zu erhalten. Um dieses Problem zu lösen, haben wir uns für die AJAX-Funktion entschieden, um die Diagramme und Tabellen für die Benutzer dynamisch zu aktualisieren und so die Notwendigkeit zu umgehen, die Webseite zu aktualisieren. Darüber hinaus ist es äußerst effizient, da es die Daten aus dem Cache-Speicher des Servers übernimmt und keine Abfrage an die Datenbank senden muss.
Datenbank
Wir haben für jeden Stakeholder eine Tabelle erstellt, um seine Details zu speichern, und einige Tabellen, um Beziehungen zwischen ihnen herzustellen. Für Tabellen mit großen Datenmengen wie Wählern haben wir eine Indextabelle erstellt, damit wir schnell auf die Daten zugreifen können. Wir haben auch die Datenbank normalisiert, damit sie leichter zu verstehen und effizienter zu aktualisieren ist.
Die Datenbank wird auf den Microsoft Azure-Servern veröffentlicht und kann mit der Microsoft SQL Server-Verwaltungssoftware aufgerufen werden.
Dokumentation
Der Benutzer muss Folgendes tun, um dieses Projekt auszuführen:
- Da dieses Projekt im Django Framework implementiert ist, muss der Benutzer Django auf seinem Computer installieren und dann in das Projektverzeichnis DBMS_PROJECT/django_project gehen
- Nach dem Öffnen dieses Verzeichnisses muss der Benutzer den folgenden Befehl ausführen:
python manage . py runserver
- Danach konnte der Benutzer die folgenden Zeilen sehen:
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 .
- Öffnen Sie den Localhost-Link. Das Projekt würde sich dann im Browser öffnen.
Bonus-Implementierung
Wir haben eine virtuelle Wahl erstellt, die es uns ermöglicht, das Wahlergebnis vor dem tatsächlichen Ergebnis abzuschätzen. Ein Benutzer meldet sich auf unserer Website an und wählt den Kandidaten aus. Sobald er fertig ist, darf er nicht mehr abstimmen. Auf diese Weise erstellen wir eine Tabelle mit den Wählerdetails und seiner Stimme und geben nach einer bestimmten Zeit die geschätzten Ergebnisse an unsere Benutzer weiter.
Auf diese Weise stellen wir unseren Nutzern das Ergebnis zur Verfügung, bevor die eigentlichen Stimmen gezählt werden.
Wir haben einen hocheffizienten Dienst entwickelt, der Transaktionen verfolgt, einen Cache-Speicher verwaltet, die Parallelitätssperren aufrechterhält und mithilfe von Multithreading schnelle Ergebnisse liefert. Einzelheiten sind im technischen Entwurf erwähnt.
Wir haben hocheffiziente Webseiten erstellt, die es dem Benutzer ermöglichen, weiterhin die aktualisierten Daten abzurufen, ohne die Webseite überhaupt aktualisieren zu müssen. Einzelheiten sind im technischen Entwurf erwähnt.
ER-Diagramm
Link: https://app.creately.com/diagram/knHC7u2yS86/
Mitwirkende
- Bhavay Aggarwal 2018384
- Diptanshu Mittal 2018232
- Manas 2018244
- Rishabh Chauhan 2018256