EleccionesDB
Investigación y motivación
Nuestra lluvia de ideas inicial dejó claro que no había muchos servicios presentes que almacenaran y presentaran datos electorales al público en general e incluso a los medios de comunicación. Con este proyecto, queríamos cerrar esa brecha proporcionando información como transacciones partidistas y datos demográficos avanzados de los votantes que no se informan en ningún medio de comunicación ni se almacenan en las bases de datos actuales.
Las bases de datos actuales como http://www.indiavotes.com, aunque proporcionan resultados postelectorales, como participación de votantes y contiendas reñidas, no proporcionan ninguna información que pueda ayudar a predecir las elecciones. Además, no hay información sobre los trabajadores electorales o los EVM. Creemos que estos datos son fundamentales para el buen funcionamiento de las elecciones y nos hemos asegurado de incluirlos en nuestro proyecto. Esperamos que nuestro proyecto ayude a crear elecciones bien informadas en los tiempos venideros y que, al utilizarlo, todos puedan analizar mejor sus elecciones.
Descripción general
Hemos creado un sistema de base de datos electoral indio que almacena información sobre las elecciones, los votantes, la comisión electoral, los candidatos y los partidos políticos. A través de nuestro sitio, un usuario puede tener acceso a todos los datos que necesita.
Supuesto: Tenemos acceso a todos los datos sobre los partidos y las elecciones.
Nuestras principales partes interesadas serán los votantes, los partidos políticos, los medios de comunicación y los investigadores independientes.
- Los votantes podrán ver cuánto dinero gastaron los partidos políticos en publicidad mediante gráficos fáciles de entender. Comparación de diferentes candidatos políticos en educación, historia política y antecedentes penales. Además, el desglose del gasto de los partidos ayudará a monitorear el uso del dinero de los impuestos y pondrá el mal uso del dinero en el foco de atención pública.
- Para los partidos políticos, obtendrá la demografía de los votantes en todos los distritos en varias líneas. Además, pueden acceder a información sobre candidatos de otros partidos y diseñar estrategias para sus candidatos en consecuencia.
- Para los medios de comunicación y los investigadores independientes, puede combinar los datos de los votantes y del partido para analizar por qué un partido político pudo ganar un distrito en particular. Además, al analizar más a fondo los datos, se podría obtener una mejor visión de las tendencias de votación. Los datos sobre los gastos de los partidos y el historial de los candidatos también pueden ser útiles para estas agencias/individuos.
- Para la Comisión Electoral, los registros de todos los funcionarios involucrados en el proceso electoral permitirán una administración más fácil y también agilizarán el proceso de asignación de funcionarios a cada distrito. Además, la información de EVM será útil para encontrar y reemplazar máquinas defectuosas.
Diseño Técnico
backend
Decidimos utilizar Django Framework en nuestra aplicación, ya que es un marco web basado en Python y sigue el patrón arquitectónico modelo-plantilla-vista que lo hace altamente escalable.
Los principales problemas que encontramos/anticipamos durante nuestro proyecto en la parte backend fueron:
- Cómo controlar las múltiples solicitudes de actualización de la base de datos simultáneamente: para ello decidimos utilizar bloqueos en nuestro servidor. Una vez que un subproceso ha adquirido el bloqueo, todos los intentos posteriores de adquirirlo se bloquean hasta que se libera. Y era necesario que los hilos adquirieran el bloqueo antes de ejecutar la consulta a la base de datos. Por lo tanto, los bloqueos aseguraron que solo un cliente pueda actualizar la base de datos a la vez.
- Múltiples consultas al mismo tiempo: para superar este problema, decidimos procesar la solicitud de cada cliente en un nuevo hilo, lo que nos ayudó a entregar la respuesta más rápido, ya que la solicitud del cliente no requería esperar a que finalizara otra solicitud. Notamos una disminución significativa en el tiempo de uso de los hilos para cada solicitud.
- Situación de pérdida de conexión a la base de datos: anticipamos que es muy posible que se pierda la conexión a la base de datos y para esto creamos una tabla de registro en nuestro servidor que mantiene la entrada de cada transacción que el servidor realiza con la base de datos.
- Crear una memoria caché en el servidor: a medida que la base de datos sigue recibiendo actualizaciones, debemos proporcionar a los clientes valores actualizados cada vez que se actualiza el valor. Entonces, para esto decidimos crear una memoria caché que se actualizará cada vez que alguien actualice la base de datos. También ayuda a ahorrar el costo de enviar una consulta a la base de datos para cada usuario, ya que se entrega este caché actualizado y solo una solicitud es suficiente para todos los usuarios.
Interfaz
Usamos VanillaJS con HTML y CSS para hacer la interfaz.
Los principales problemas que encontramos/anticipamos durante nuestro proyecto en la parte backend fueron:
- Actualización dinámica de gráficos y tablas en la página web: anticipamos que otro usuario podría actualizar la base de datos mientras alguien navega por nuestro sitio web y que no será posible que los usuarios sigan actualizando las páginas web para obtener actualizaciones. Entonces, para superar este problema, decidimos utilizar la función AJAX para actualizar dinámicamente los gráficos y tablas para los usuarios sin necesidad de actualizar la página web. Además, es muy eficiente ya que toma los datos de la memoria caché del servidor y no requiere enviar la consulta a la base de datos.
Base de datos
Hemos creado una Tabla para cada interesado para almacenar sus datos y unas tablas para establecer relaciones entre ellos. Para tablas que tienen gran cantidad de datos, como votantes, hemos creado su tabla de índice para que podamos acceder a sus datos rápidamente. También hemos normalizado la base de datos para que sea fácil de entender y más eficiente de actualizar.
La base de datos se publica en los servidores de Microsoft Azure y se puede acceder a ella mediante el software de administración de Microsoft SQL Server.
Documentación
El usuario debe hacer lo siguiente para ejecutar este proyecto:
- Dado que este proyecto está implementado en Django Framework, el usuario debe instalar Django en su máquina y luego ir al directorio del proyecto DBMS_PROJECT/django_project.
- Después de abrir este directorio, el usuario debe ejecutar el siguiente comando:
python manage . py runserver
- Después de esto, el usuario podría ver las siguientes líneas:
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 .
- Abra el enlace del host local. Luego, el proyecto se abriría en el navegador.
Implementación de bonificación
Hemos creado una elección virtual que nos permite estimar el resultado electoral antes del resultado real. Un usuario inicia sesión en nuestro sitio y elige al candidato, una vez que haya terminado no podrá volver a votar. De esta manera creamos una tabla con los datos del elector y su voto y luego de un tiempo específico, declaramos los resultados estimados a nuestros usuarios.
De esta manera proporcionamos a nuestro usuario el resultado antes de que los votos reales comiencen a contar.
Creamos un servicio altamente eficiente que realiza un seguimiento de las transacciones, mantiene una memoria caché, mantiene los bloqueos de concurrencia y ofrece resultados rápidos utilizando subprocesos múltiples. Los detalles se mencionan en el diseño técnico.
Creamos páginas web altamente eficientes que permiten al usuario seguir obteniendo datos actualizados sin siquiera actualizar la página web. Los detalles se mencionan en el diseño técnico.
diagrama ER
Enlace: https://app.creately.com/diagram/knHC7u2yS86/
Co-contribuyentes
- Bhavay Aggarwal 2018384
- Diptanshu Mittal 2018232
- Manás 2018244
- Rishabh Chauhan 2018256