| Version 8 (modified by , 7 days ago) ( diff ) |
|---|
Оптимизација на прашалници и погледи
Во оваа фаза ќе ги анализираме погледите дефинирани во Фаза 2 преку прашалници базирани на реални сценарија кои ќе бидат присутни во нашата апликација и истите ќе се обидеме да ги оптимизираме.
View 1. vw_election_results
- Примарен филтер за погледот vw_election_results ќе биде според името на изборот (election_name), а исто така ќе се користи и според типот на избор (election_type) и дали партијата го поминала изборниот праг (passed_threshold).
- Примарен случај на употреба ќе е приказ на финалните изборни резултати за конкретен избор, со процент на гласови за секој политички субјект и информација дали го поминале прагот од 5%. За овој поглед ни се важни перформансите, бидејќи без него не може да се прикажат официјалните резултати по завршување на изборите.
- Иницијалното време за извршување на погледот е _ms/s.
---
View 2. vw_dhondt_seat_allocation
- Примарен филтер за погледот vw_dhondt_seat_allocation ќе биде според election_id (id на избор), а исто така ќе се користи и според region_name (изборен округ) и entity_name (политички субјект).
- Примарен случај на употреба ќе е приказ на распределбата на пратенички мандати по Д'Онт метод за секој изборен округ. За овој поглед ни се важни перформансите, бидејќи ја пресметува комплексната логика за пропорционална распределба на мандати и без него резултатите не можат да се прикажат во реално време.
- Иницијалното време за извршување на погледот е _ms/s.
---
View 3. vw_invalid_ballot_analysis
- Примарен филтер за погледот vw_invalid_ballot_analysis ќе биде според election_id (id на избор), а исто така ќе се користи и според region_name (општина) за географска анализа на неважечките гласачки ливчиња.
- Примарен случај на употреба ќе е анализа на процентот на неважечки гласачки ливчиња по општини и избори, со цел откривање на аномалии во гласањето. За овој поглед ни се важни перформансите, бидејќи се користи од изборните набљудувачи во реално време за време на броењето на гласовите.
- Иницијалното време за извршување на погледот е 149ms. Ова е прифатливо време за апликацијата.
- Нема потреба од правење план на извршување, бидејќи времето е задоволително. Времето на операции insert и update изнесува [INSERT: Xms / UPDATE: Xms].
- Нема потреба да се преуреди прашалникот.
- Времето на извршување на операциите останува исто.
---
View 4. vw_local_election_winners
- Овој поглед овозможува преглед на победниците (кандидати или партии со најмногу гласови) на локално ниво, поделени по изборни единици или општини. Погледот ги сумира гласовите од табелата ballot и ги идентификува субјектите со највисок резултат за секоја локација.
- Примарен филтер: election_id или election_year (за да се видат победниците на конкретни избори). Секундарен филтер: municipality_name или station_id (доколку корисникот сака да види кој победил во точно одредена општина или место).
- Иницијално време на извршување на погледот е 3.5 секунди , што не е прифатливо.
[[File:4.png|thumb|right|Caption text goes here]]
- Планот покажува дека базата троши премногу време на Incremental Sort и WindowAgg операциите за да ги рангира победниците меѓу 180,000 редови. Ова укажува на потреба од индекси за да се избегнат вгнездените циклуси (Nested Loops) и да се забрза пребарувањето низ табелите.
- Проблемот може да се поправи со додавање на соодветни индекси.
- Иако со дополнително индексирање времето се стабилизираше на околу 290 ms, ова се смета за оптимален резултат за овој тип на комплексен аналитички поглед. Ова време е резултат на балансот помеѓу ефикасното пребарување низ индексите и потребата на базата да изврши агрегација и рангирање врз голема количина податоци во реално време.
[[File:6.png]] [[File:7.png]]
---
View 5. vw_parliamentary_municipality_winners
- Овој поглед служи за детална анализа на изборните резултати од парламентарните избори на ниво на општина. Тој ги агрегира гласовите за секој политички субјект во секоја општина и го идентификува победникот (партијата со најголем број гласови) за таа територијална единица.
- Примарен филтер: election_name (на пр. 'Parliamentary Elections 2014'). Секундарен филтер: municipality_name (доколку сакаме да видиме кој победил во одредена општина на државно ниво).
- Иницијално време на извршување на погледот е скоро 17 секунди , што воопшто не е прифатливо.
[[File:8.png]]
- Според приложениот извршен план, кверито трае 17.9 секунди главно поради користењето на дискот за сортирање податоци и големиот број на меѓу-резултати (скоро 1 милион редови) кои се префрлаат помеѓу паралелните процеси. Без соодветни индекси, базата не може да ги избегне овие скапи операции.
[[File:9.png]]
- По извршената финална оптимизација и консолидација на индексите, времето на извршување на комплексниот поглед за парламентарни победи е драстично намалено од 17.9 секунди на 1.5 секунди.
[[File:10.png]]
[[File:11.png]]
---
View 6. vw_party_demographic_performance
- Овој поглед овозможува длабинска декомпозиција на изборните резултати преку призмата на демографските карактеристики на гласачкото тело. Наместо едноставен линеарен приказ на победниците, погледот ја открива структурата и профилот на гласачите кои ја генерираат поддршката за секој политички субјект. Преку статистичко поврзување на кастираните гласови со старосната структура на чекираните гласачи, се генерира прецизен увид во електоралната поддршка поделена по генерации (Gen Z, Миленијалци и Сениори).
- За максимална оптимизација на перформансите при пребарувањето, погледот е дизајниран да се филтрира според две основни колони: election_name (за избор на конкретен изборен циклус) и party_name (за селекција на одреден политички ентитет).
- Мерење на време пред оптимизација
[[File:1.png]] Иницијално време: 3415.820 ms (~3.4 секунди). Времето на извршување е неприфатливо, особено при истовремена работа на повеќе корисници.
Parallel Seq Scan над ballot Hash Join и Nested Loop операции Ова укажува дека PostgreSQL чита голем број редови поради недостаток на соодветни индекси.
- Проблемот со време на извршување може да се подобри со индекси.
- Со стратешка имплементација на соодветни индекси врз клучните колони во базата, времето на извршување на оваа комплексна демографска агрегација беше успешно оптимизирано на само 619 милисекунди.
[[File:2.png]] [[File:3.png]]
---
View 7. vw_party_performance_over_time
- Примарен филтер за погледот vw_party_performance_over_time ќе биде според entity_name (име на политички субјект), а исто така ќе се користи и според election_date за приказ на тренд во одреден временски период.
- Примарен случај на употреба ќе е следење на трендот на изборна поддршка за одредена партија или коалиција низ повеќе изборни циклуси. Овој поглед е важен за аналитичкиот дел на апликацијата, бидејќи без него не може да се прикаже историскиот развој на политичката поддршка.
- Иницијалното време за извршување на погледот е _ms/s
---
View 8. vw_polling_station_stats
- Примарен филтер за погледот vw_polling_station_stats ќе биде според election_id (id на избор), а исто така ќе се користи и според station_id за преглед на статистики за конкретно гласачко место.
- Примарен случај на употреба ќе е приказ на детални статистики по гласачко место — вкупен број регистрирани гласачи, број на гласани, важечки и неважечки ливчиња и процент на излезност. За овој поглед ни се важни перформансите, бидејќи се користи за мониторинг на излезноста во реално време за време на изборниот ден.
- Иницијалното време за извршување на погледот е _ms/s.
---
View 9. vw_polling_station_voter_count
- Погледот служи за пресметување на вкупниот број на регистрирани гласачи за секое поединечно гласачко место. Наместо да се чуваат статични податоци во табелата polling_station (што би довело до редундантност и потенцијални аномалии), овој поглед врши агрегација во реално време врз основа на поврзаноста помеѓу гласачите и нивните доделени избирачки места.
- Ќе се користи за проверка дали одредено гласачко место има преголем број гласачи (надминување на капацитетот). Најчесто ќе се користи со филтер по station_id или municipality_name за да се види густината на гласачкото тело во одредена општина. Обезбедува секогаш точни и ажурни податоци, бидејќи бројот на гласачи се пресметува директно од изворната табела voter.
- При тестирање на погледот со филтер за општина Куманово, постигнато е време на извршување од 3.5 секунди. Оптимизаторот успешно користи Index Scan врз колоната за име на регион, со што веднаш го изолира бараниот ентитет. Главниот товар на кверито доаѓа од агрегацијата на 83,500 записи за гласачи поврзани со избирачките места во таа општина. Иако времето е во секунди, HashAggregate операцијата работи со минимален мемориски зафат, што укажува на тоа дека погледот е стабилен и точно ги пресметува капацитетите на гласачките места во реално време без користење на статични (кеширани) колони.
[[File:14.png]]
[[File:15.png]]
- Со додавање на соодветен индекс , извршниот план за погледот покажа значителна структурна промена. Сега постигнато е време на извршување од 53 ms.
[[File:16.png]]
[[File:17.png]]
---
View 10. vw_presidential_by_municipality
- Погледот овозможува детален приказ на гласовите освоени од претседателските кандидати, групирани по општина. Тој ги агрегира податоците од табелата Vote Result и ги поврзува со податоците за кандидатите и општините за да генерира извештај за поддршката на кандидатите на локално ниво.
- Овој извештај ќе се користи за визуелизација на географската распределба на гласовите, каде преку филтрирање по election_name и municipality_name корисникот може моментално да ги добие финалните резултати за специфичен регион.
- При извршување на погледот за претседателски избори по општини, постигнати се врвни перформанси со време на одговор од само 15 милисекунди. Овој резултат е директна последица на претходно имплементираната стратегија за индексирање.
- Ова време е прифатливо па затоа нема да имаме потреба од индексирање.
[[File:12.png]]
[[File:13.png]]
---
View 11. vw_regional_voting_patterns
- Примарен филтер за погледот vw_regional_voting_patterns ќе биде според election_name (име на избор), а исто така ќе се користи и според region_name за преглед на доминантниот субјект во одреден регион.
- Примарен случај на употреба ќе е идентификување на доминантната партија или кандидат во секоја општина за даден избор. Овој поглед е клучен за географската визуелизација на изборните резултати, и без него не може да се прикаже политичката карта по завршување на изборите.
- Иницијалното време за извршување на погледот е _ms/s.
---
View 12. vw_voter_turnout
- Примарен филтер за погледот vw_voter_turnout ќе биде според election_id (id на избор), а исто така ќе се користи и според election_type (тип на избор) и region_name (општина) за споредба на излезноста по региони.
- Примарен случај на употреба ќе е следење и споредба на излезноста на гласачите по општини и типови на избори, со приказ на валидни и неважечки гласачки ливчиња и вкупен процент на излезност. За овој поглед ни се важни перформансите, бидејќи претставува еден од најчесто користените погледи — се прикажува јавно во реално време за време на изборниот ден.
- Иницијалното време за извршување на погледот е _ms/s.
Attachments (17)
- 1.png (362.5 KB ) - added by 7 days ago.
- 2.png (478.2 KB ) - added by 7 days ago.
- 3.png (240.7 KB ) - added by 7 days ago.
- 4.png (564.0 KB ) - added by 7 days ago.
- 5.png (234.1 KB ) - added by 7 days ago.
- 6.png (368.8 KB ) - added by 7 days ago.
- 7.png (290.9 KB ) - added by 7 days ago.
- 8.png (505.4 KB ) - added by 7 days ago.
- 9.png (253.4 KB ) - added by 7 days ago.
- 10.png (541.7 KB ) - added by 7 days ago.
- 11.png (245.8 KB ) - added by 7 days ago.
- 12.png (251.7 KB ) - added by 7 days ago.
- 13.png (222.7 KB ) - added by 7 days ago.
- 14.png (253.3 KB ) - added by 7 days ago.
- 15.png (141.7 KB ) - added by 7 days ago.
- 16.png (309.7 KB ) - added by 7 days ago.
- 17.png (145.2 KB ) - added by 7 days ago.
