ВыборыБД
Исследования и мотивация
Наш первоначальный мозговой штурм показал, что существует не так много сервисов, которые хранят и предоставляют данные о выборах широкой публике и даже новостным агентствам. С помощью этого проекта мы хотели заполнить этот пробел, предоставляя такую информацию, как партийные транзакции и расширенные демографические данные избирателей, которые не публикуются ни в одном новостном агентстве и не хранятся в текущих базах данных.
Существующие базы данных, такие как http://www.indiavotes.com, хотя и предоставляют результаты после выборов, такие как явка избирателей и завершение выборов, не предоставляют никакой информации, которая могла бы помочь в прогнозировании выборов. Кроме того, нет никакой информации о работниках избирательных комиссий или ЭВМ. Мы считаем, что эти данные имеют решающее значение для бесперебойного проведения выборов, и обязательно включили их в наш проект. Мы надеемся, что наш проект поможет провести хорошо информированные выборы в будущем, и с помощью нашего проекта каждый сможет лучше проанализировать свой выбор.
Обзор
Мы создали индийскую систему баз данных о выборах, в которой хранится информация о выборах, избирателях, избирательных комиссиях, кандидатах и политических партиях. Через наш сайт пользователь может иметь доступ ко всем необходимым ему данным.
Предположение: У нас есть доступ ко всем данным о партиях и выборах.
Нашими основными заинтересованными сторонами будут избиратели, политические партии, средства массовой информации и независимые исследователи.
- Что касается избирателей, вы сможете увидеть, сколько денег политические партии потратили на рекламу, используя простые для понимания графики. Сравнение различных политических кандидатов по образованию, политической истории и судимости. Кроме того, разбивка партийных расходов поможет контролировать использование налоговых денег и привлечь внимание общественности к нецелевому использованию денег.
- Для политических партий вы получите демографические данные избирателей во всех округах по различным направлениям. Кроме того, они могут получить доступ к информации о кандидатах от других партий и разработать соответствующую стратегию в отношении своих кандидатов.
- Для средств массовой информации и независимых исследователей вы можете объединить данные об избирателях и партии, чтобы проанализировать, почему политическая партия смогла победить в определенном округе. Кроме того, путем дальнейшего анализа данных вы сможете лучше понять тенденции голосования. Данные о партийных расходах и истории кандидатов также могут быть полезны для этих агентств/частных лиц.
- Для Избирательной комиссии записи обо всех должностных лицах, участвующих в избирательном процессе, упростят администрирование, а также упростят процесс распределения должностных лиц по каждому округу. Также информация EVM будет полезна для поиска и замены неисправных машин.
Технический проект
Бэкэнд
Мы решили использовать Django Framework в нашем приложении, поскольку это веб-фреймворк на основе Python, который следует архитектурному шаблону модель-шаблон-представление, что обеспечивает высокую масштабируемость.
Основными проблемами, с которыми мы столкнулись/ожидали во время нашего проекта в бэкэнд-части, были:
- Как одновременно контролировать несколько запросов на обновление базы данных. Для этого мы решили использовать блокировки на нашем сервере. Как только поток получил блокировку, все последующие попытки получить блокировку блокируются до тех пор, пока она не будет снята. И потокам было необходимо получить блокировку перед выполнением запроса к базе данных. Таким образом, блокировки гарантировали, что только один клиент может обновлять базу данных одновременно.
- Несколько запросов одновременно. Чтобы решить эту проблему, мы решили обрабатывать запрос каждого клиента в новом потоке, что помогло нам доставить ответ быстрее, поскольку запросу клиента не требовалось ждать завершения другого запроса. Мы заметили значительное сокращение времени использования потоков для каждого запроса.
- Ситуация потери соединения с базой данных. Мы предвидели, что вполне возможно, что соединение с базой данных будет потеряно, и для этого создали таблицу журнала на нашем сервере, в которой хранятся записи каждого сервера транзакций, которые выполняются с базой данных.
- Создание кэш-памяти на сервере. Поскольку база данных продолжает получать обновления, нам необходимо предоставлять клиентам обновленные значения каждый раз, когда значение обновляется. Поэтому мы решили создать кэш-память, которая будет обновляться всякий раз, когда кто-то обновляет базу данных. Это также помогает сэкономить на отправке запроса в базу данных для каждого пользователя, поскольку этот обновленный кэш доставляется, и для всех пользователей достаточно только одного запроса.
Внешний интерфейс
Для создания интерфейса мы использовали VanillaJS с HTML и CSS.
Основными проблемами, с которыми мы столкнулись/ожидали во время нашего проекта в бэкэнд-части, были:
- Динамическое обновление графиков и таблиц на веб-странице. Мы ожидали, что база данных может быть обновлена другим пользователем, пока кто-то просматривает наш веб-сайт, и пользователи не смогут продолжать обновлять веб-страницы для получения обновлений. Поэтому, чтобы решить эту проблему, мы решили использовать функцию AJAX для динамического обновления диаграмм и таблиц для пользователей, минуя необходимость обновления веб-страницы. Кроме того, он очень эффективен, поскольку берет данные из кэш-памяти сервера и не требует отправки запроса в базу данных.
База данных
Мы создали таблицу для каждого заинтересованного лица для хранения его данных и несколько таблиц для установления отношений между ними. Для таблиц с большими данными, таких как избиратели, мы создали индексную таблицу, чтобы иметь возможность быстрого доступа к ее данным. Мы также нормализовали базу данных, чтобы ее было легче понять и более эффективно обновлять.
База данных опубликована на серверах Microsoft Azure, и доступ к ней можно получить с помощью программного обеспечения управления Microsoft SQL Server.
Документация
Для запуска этого проекта пользователю необходимо сделать следующее:
- Поскольку этот проект реализован в Django Framework, пользователю необходимо установить Django на свой компьютер, а затем перейти в каталог проекта DBMS_PROJECT/django_project.
- После открытия этого каталога пользователь должен выполнить следующую команду:
python manage . py runserver
- После этого пользователь мог увидеть следующие строки:
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 .
- Откройте ссылку на локальный хост. Затем проект откроется в браузере.
Бонусная реализация
Мы создали виртуальные выборы, которые позволяют нам оценить результат выборов раньше фактического результата. Пользователь входит на наш сайт и выбирает кандидата; как только он это сделает, ему больше не разрешается голосовать. Таким образом, мы создаем таблицу с данными об избирателе и его голосом и через определенное время объявляем предполагаемые результаты нашим пользователям.
Таким образом, мы предоставляем нашему пользователю результат до того, как начнут подсчитываться фактические голоса.
Мы создали высокоэффективный сервис, который отслеживает транзакции, поддерживает кэш-память, поддерживает блокировки параллелизма и обеспечивает быстрые результаты с использованием многопоточности. Детали указаны в техническом проекте.
Мы создали высокоэффективные веб-страницы, которые позволяют пользователю получать обновленные данные, даже не обновляя веб-страницу. Детали указаны в техническом проекте.
ER-диаграмма
Ссылка: https://app.creately.com/diagram/knHC7u2yS86/
Соавторы
- Бхавай Аггарвал 2018384
- Диптаншу Миттал 2018232
- Манас 2018244
- Ришаб Чаухан 2018256