Changes between Initial Version and Version 1 of OtherTopics


Ignore:
Timestamp:
09/19/26 02:23:44 (12 days ago)
Author:
183164
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OtherTopics

    v1 v1  
     1= Други теми =
     2
     3Скрипти: [attachment:other_topics.sql] (индекси, оптимизации и безбедносни мерки) и [attachment:perf_test_data.sql] (тест-податоци за анализа на перформансите). Редослед на извршување: schema_creation.sql, advanced_db.sql, other_topics.sql, data_load.sql.
     4
     5== Перформанси на SQL ==
     6
     7=== Методологија ===
     8
     9Со примерните податоци (72 пријави) секоја табела зафаќа неколку страници, па PostgreSQL секогаш ја чита целата табела и индексите не се користат. Затоа анализата е направена во посебна шема perf, креирана со perf_test_data.sql, со иста структура, примарни клучеви и единствени ограничувања како project, и со синтетички податоци за период 2021-2026:
     10
     11 * 100 000 пријави (околу 4 % отворени), 385 453 записи во историјата на статуси, 99 042 доделувања, 49 513 коментари, 100 000 фотографии, 5 000 граѓани и 40 работници.
     12
     13Секој прашалник е извршен со EXPLAIN (ANALYZE, BUFFERS) три пати, пред и по креирањето на индексите, и е земено најкраткото време. Паралелното извршување е исклучено (max_parallel_workers_per_gather = 0), за плановите да бидат споредливи. Во плановите подолу се прикажани главните чворови; бројките се на PostgreSQL 16.
     14
     15=== Предложени индекси ===
     16
     17{{{#!sql
     18-- историјата на пријава и последниот статус (тригери, UC0004, погледи, извештаи)
     19CREATE INDEX idx_status_logs_report_changed ON status_logs (report_id, changed_at, log_id);
     20
     21-- активните пријави на работник (UC0005) и оптовареност (UC0007)
     22CREATE INDEX idx_assignments_worker ON assignments (worker_id, report_id);
     23
     24-- пријавите на граѓанин (UC0004)
     25CREATE INDEX idx_reports_citizen ON reports (citizen_id, created_at);
     26
     27-- извештаи за даден период
     28CREATE INDEX idx_reports_created ON reports (created_at);
     29
     30-- слични активни пријави во близина; делумен индекс само за отворените пријави
     31CREATE INDEX idx_reports_active_location ON reports (category_id, latitude, longitude)
     32    WHERE status NOT IN ('resolved', 'rejected');
     33
     34-- коментари и фотографии на пријава (UC0004)
     35CREATE INDEX idx_comments_report ON comments (report_id);
     36CREATE INDEX idx_photos_report   ON photos (report_id);
     37}}}
     38
     39Надворешните клучеви во PostgreSQL не креираат индекси автоматски, па колоните report_id и worker_id во табелите-деца немаа индекси. Делумниот