wiki:AdvancedTopic

Version 1 (modified by 231018, 10 hours ago) ( diff )

--

Напредна тема: Пропагација на податоци помеѓу централна и локална база

Опис на напредната тема

Како напредна тема во рамки на проектот SCS - Smart City Security е имплементирана локална симулација на пропагација на податоци помеѓу централна и локална база на податоци.

Идејата на оваа имплементација е да се симулира реален Smart City систем во кој постои една централна база, на ниво на град или институција, и една локална база, која може да припаѓа на полициска станица, локална зона или друг организациски дел од системот.

Поради ограничување да не се прават дополнителни измени на факултетската база, пропагацијата е имплементирана локално преку две PostgreSQL бази:

  • scs_central - централна база
  • scs_local - локална база

Централната база ги прима новите податоци, додека локалната база ги добива податоците преку механизам за пропагација.

Користени табели

За демонстрација на напредната тема е направена мини верзија на проектната база со основните табели потребни за Smart City Security сценариото:

  • gragjanin
  • vozilo
  • kamera
  • prekrsok
  • kazna

Во централната база дополнително е креирана табелата:

  • propagation_log

Табелата propagation_log служи за евиденција на сите промени што треба да се префрлат од централната во локалната база.

Улога на propagation_log табелата

Табелата propagation_log претставува меѓутабела во која се запишуваат сите нови записи што треба да се пропагираат.

Секој запис во оваа табела содржи информации за:

  • табелата во која е направена промената
  • типот на операција
  • идентификаторот на записот
  • payload со вредностите на записот
  • статус на обработка

Статусот може да биде:

  • PENDING - записот чека да биде префрлен во локалната база
  • DONE - записот е успешно префрлен
  • FAILED - настанала грешка при префрлањето

Trigger-и

Во централната база се креирани trigger-и за табелите:

  • gragjanin
  • vozilo
  • kamera
  • prekrsok
  • kazna

Trigger-ите се активираат по секој INSERT во соодветната табела. Тие не ги префрлаат директно податоците во локалната база, туку автоматски додаваат запис во propagation_log со статус PENDING.

Со ова се овозможува асинхрона пропагација, бидејќи податоците прво се евидентираат, а потоа се обработуваат со посебна процедура.

Функција за логирање на промени

За trigger-ите е креирана функцијата:

fn_log_propagation_insert()

Оваа функција го зема новиот внесен ред преку NEW, го претвора во JSONB формат и го запишува во propagation_log.

Користењето на JSONB овозможува целиот запис да се зачува како payload, без потреба да се креира посебна log табела за секоја табела од системот.

Процедура за пропагација

За префрлање на податоците од централната во локалната база е креирана процедурата:

sp_propagiraj_vo_lokalna_baza()

Процедурата ги зема сите записи од propagation_log со статус PENDING. За секој запис проверува од која табела доаѓа, го чита payload-от и го внесува соодветниот запис во локалната база scs_local.

Ако внесувањето е успешно, статусот во propagation_log се менува во DONE. Ако настане грешка, статусот се менува во FAILED и се запишува пораката за грешка.

Бидејќи scs_central и scs_local се две различни PostgreSQL бази, за комуникација помеѓу нив е користен PostgreSQL extension:

dblink

Со dblink централната база може да извршува INSERT команди во локалната база.

Тек на пропагацијата

Целиот процес се одвива во следните чекори:

  1. Се внесува нов запис во некоја од табелите во scs_central.
  2. Trigger автоматски се активира по INSERT операцијата.
  3. Trigger-от ја повикува функцијата fn_log_propagation_insert().
  4. Во propagation_log се додава запис со статус PENDING.
  5. Се повикува процедурата sp_propagiraj_vo_lokalna_baza().
  6. Процедурата ги префрла податоците во scs_local.
  7. Статусот во propagation_log се менува во DONE.

Заклучок

Со оваа напредна тема е имплементирана симулација на пропагација на податоци помеѓу централна и локална база. Решението користи trigger-и, log табела, stored procedure и dblink extension.

Овој пристап е соодветен за Smart City Security систем бидејќи овозможува централно внесување на податоци и нивна контролирана синхронизација кон локални бази, што е применливо во системи каде различни институции или зони треба да имаат локален пристап до релевантни податоци.

Note: See TracWiki for help on using the wiki.