Changes between Initial Version and Version 1 of AdvancedTopic


Ignore:
Timestamp:
06/10/26 21:17:15 (12 hours ago)
Author:
231018
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedTopic

    v1 v1  
     1= Напредна тема: Пропагација на податоци помеѓу централна и локална база =
     2
     3== Опис на напредната тема ==
     4
     5Како напредна тема во рамки на проектот '''SCS - Smart City Security''' е имплементирана локална симулација на пропагација на податоци помеѓу централна и локална база на податоци.
     6
     7Идејата на оваа имплементација е да се симулира реален Smart City систем во кој постои една централна база, на ниво на град или институција, и една локална база, која може да припаѓа на полициска станица, локална зона или друг организациски дел од системот.
     8
     9Поради ограничување да не се прават дополнителни измени на факултетската база, пропагацијата е имплементирана локално преку две PostgreSQL бази:
     10
     11* '''scs_central''' - централна база
     12* '''scs_local''' - локална база
     13
     14Централната база ги прима новите податоци, додека локалната база ги добива податоците преку механизам за пропагација.
     15
     16== Користени табели ==
     17
     18За демонстрација на напредната тема е направена мини верзија на проектната база со основните табели потребни за Smart City Security сценариото:
     19
     20* '''gragjanin'''
     21* '''vozilo'''
     22* '''kamera'''
     23* '''prekrsok'''
     24* '''kazna'''
     25
     26Во централната база дополнително е креирана табелата:
     27
     28* '''propagation_log'''
     29
     30Табелата '''propagation_log''' служи за евиденција на сите промени што треба да се префрлат од централната во локалната база.
     31
     32== Улога на propagation_log табелата ==
     33
     34Табелата '''propagation_log''' претставува меѓутабела во која се запишуваат сите нови записи што треба да се пропагираат.
     35
     36Секој запис во оваа табела содржи информации за:
     37
     38* табелата во која е направена промената
     39* типот на операција
     40* идентификаторот на записот
     41* payload со вредностите на записот
     42* статус на обработка
     43
     44Статусот може да биде:
     45
     46* '''PENDING''' - записот чека да биде префрлен во локалната база
     47* '''DONE''' - записот е успешно префрлен
     48* '''FAILED''' - настанала грешка при префрлањето
     49
     50== Trigger-и ==
     51
     52Во централната база се креирани trigger-и за табелите:
     53
     54* '''gragjanin'''
     55* '''vozilo'''
     56* '''kamera'''
     57* '''prekrsok'''
     58* '''kazna'''
     59
     60Trigger-ите се активираат по секој INSERT во соодветната табела. Тие не ги префрлаат директно податоците во локалната база, туку автоматски додаваат запис во '''propagation_log''' со статус '''PENDING'''.
     61
     62Со ова се овозможува асинхрона пропагација, бидејќи податоците прво се евидентираат, а потоа се обработуваат со посебна процедура.
     63
     64== Функција за логирање на промени ==
     65
     66За trigger-ите е креирана функцијата:
     67
     68{{{
     69fn_log_propagation_insert()
     70}}}
     71
     72Оваа функција го зема новиот внесен ред преку '''NEW''', го претвора во JSONB формат и го запишува во '''propagation_log'''.
     73
     74Користењето на JSONB овозможува целиот запис да се зачува како payload, без потреба да се креира посебна log табела за секоја табела од системот.
     75
     76== Процедура за пропагација ==
     77
     78За префрлање на податоците од централната во локалната база е креирана процедурата:
     79
     80{{{
     81sp_propagiraj_vo_lokalna_baza()
     82}}}
     83
     84Процедурата ги зема сите записи од '''propagation_log''' со статус '''PENDING'''. За секој запис проверува од која табела доаѓа, го чита payload-от и го внесува соодветниот запис во локалната база '''scs_local'''.
     85
     86Ако внесувањето е успешно, статусот во '''propagation_log''' се менува во '''DONE'''. Ако настане грешка, статусот се менува во '''FAILED''' и се запишува пораката за грешка.
     87
     88== Користење на dblink ==
     89
     90Бидејќи '''scs_central''' и '''scs_local''' се две различни PostgreSQL бази, за комуникација помеѓу нив е користен PostgreSQL extension:
     91
     92{{{
     93dblink
     94}}}
     95
     96Со '''dblink''' централната база може да извршува INSERT команди во локалната база.
     97
     98== Тек на пропагацијата ==
     99
     100Целиот процес се одвива во следните чекори:
     101
     1021. Се внесува нов запис во некоја од табелите во '''scs_central'''.
     1032. Trigger автоматски се активира по INSERT операцијата.
     1043. Trigger-от ја повикува функцијата '''fn_log_propagation_insert()'''.
     1054. Во '''propagation_log''' се додава запис со статус '''PENDING'''.
     1065. Се повикува процедурата '''sp_propagiraj_vo_lokalna_baza()'''.
     1076. Процедурата ги префрла податоците во '''scs_local'''.
     1087. Статусот во '''propagation_log''' се менува во '''DONE'''.
     109
     110== Заклучок ==
     111
     112Со оваа напредна тема е имплементирана симулација на пропагација на податоци помеѓу централна и локална база. Решението користи trigger-и, log табела, stored procedure и dblink extension.
     113
     114Овој пристап е соодветен за Smart City Security систем бидејќи овозможува централно внесување на податоци и нивна контролирана синхронизација кон локални бази, што е применливо во системи каде различни институции или зони треба да имаат локален пристап до релевантни податоци.