| Version 2 (modified by , 7 days ago) ( diff ) |
|---|
Оптимизација на прашалници и погледи
Во оваа фаза ќе ги анализираме погледите дефинирани во Фаза 2 преку прашалници базирани на реални сценарија кои ќе бидат присутни во нашата апликација и истите ќе се обидеме да ги оптимизираме.
View 1. vw_election_results
---
View 2. vw_dhondt_seat_allocation
---
View 3. vw_invalid_ballot_analysis
---
View 4. vw_local_election_winners
- Овој поглед овозможува преглед на победниците (кандидати или партии со најмногу гласови) на локално ниво, поделени по изборни единици или општини. Погледот ги сумира гласовите од табелата ballot и ги идентификува субјектите со највисок резултат за секоја локација.
- Примарен филтер: election_id или election_year (за да се видат победниците на конкретни избори). Секундарен филтер: municipality_name или station_id (доколку корисникот сака да види кој победил во точно одредена општина или место).
- Иницијално време на извршување на погледот е 3.5 секунди , што не е прифатливо.
[[File:4.png]]
- Планот покажува дека базата троши премногу време на Incremental Sort и WindowAgg операциите за да ги рангира победниците меѓу 180,000 редови. Ова укажува на потреба од индекси за да се избегнат вгнездените циклуси (Nested Loops) и да се забрза пребарувањето низ табелите.
- Проблемот може да се поправи со додавање на соодветни индекси.
[[File:5.png]]
- Иако со дополнително индексирање времето се стабилизираше на околу 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
---
View 8. vw_polling_station_stats
---
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
---
View 12. vw_voter_turnout
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.
