Apstraktni podatkovni sloj

Apstraktni podatkovni sloj, jedinstveni podatkovni model sustava, apstrakcija opreme i normalizacija podataka, koji zajedno odvajaju aplikacije od fizičke pohrane.

Apstraktni podatkovni sloj nalazi se između fizičke pohrane podataka i aplikacija koje ih koriste. Skriva fizičku implementaciju i specifičnosti hardvera, a za rad s podacima pruža jedinstveno sučelje. Sloj osigurava:

  • Neovisnost o hardveru: podaci se pohranjuju na različitim uređajima (na poslužiteljima, u oblaku, na IoT uređajima), ali aplikacija s njima radi putem jedinstvenog sučelja.
  • Jednostavniji razvoj: programeri rade s apstraktnim entitetima i ne moraju se baviti detaljima fizičke pohrane podataka.
  • Fleksibilnost: promjene fizičke strukture podataka (na primjer, migracija u oblak) ne utječu na aplikacije.

Jedinstveni podatkovni model

Sustav koristi jedinstveni podatkovni model koji je prilagođen različitim tipovima opreme i omogućuje rad s podacima na ujednačen način, bez obzira na njihov izvor ili tip opreme. Model obuhvaća zajedničke strukture podataka, ujednačena pravila obrade i semantičku dosljednost podataka u svim sustavima i podsustavima.

Na primjer, jedinstveni podatkovni model sustava sadrži:

  • Entiteti: oprema, kanali, sesije, jedinice mjere i parametri šifrarnika.
  • Veze: oprema ima kanale, kanali su povezani s podacima, a podaci sa sesijama.
  • Atributi: za svaki entitet definirani su atributi (na primjer, equipment.serial_number i channel_data.value).

Struktura jedinstvenog podatkovnog modela sustava

Jedinstveni podatkovni model sustava je struktura za pohranu podataka o opremi, kanalima, sesijama i mjerenjima te za upravljanje tim podacima. Pogledajmo svaku tablicu i njezinu namjenu, kao i veze između tablica.

Tablica channel_data

U ovoj tablici pohranjuju se podaci primljeni s kanala opreme u okviru određenih sesija.

PoljeTipOpis
idbigintJedinstveni identifikator zapisa (primarni ključ).
equipment_idbigintReferenca na opremu (equipment.id).
seance_idbigintReferenca na sesiju (seances.id).
channel_idbigintReferenca na kanal (channels.id).
unit_idbigintReferenca na jedinicu mjere (units.id).
archive_type_idintegerReferenca na tip arhive (referenceparameters.id).
event_timeintegerVrijeme događaja (npr. vremenska oznaka).
valuecharacter varying(100)Vrijednost primljena s kanala.
created_attimestamp(6) without time zoneVrijeme stvaranja zapisa.
updated_attimestamp(6) without time zoneVrijeme posljednjeg ažuriranja zapisa.

Veze:

  • Strani ključ unit_id upućuje na tablicu units.
  • Strani ključ archive_type_id upućuje na tablicu referenceparameters.
  • Strani ključ equipment_id upućuje na tablicu equipment.
  • Strani ključ channel_id upućuje na tablicu channels.
  • Strani ključ seance_id upućuje na tablicu seances.

Tablica units

U ovoj tablici pohranjuju se jedinice mjere koje se koriste za podatke kanala.

PoljeTipOpis
idbigintJedinstveni identifikator zapisa (primarni ključ).
namecharacter varying(30)Naziv jedinice mjere.
varnamecharacter varying(30)Kratko ime varijable za jedinicu mjere.
descriptioncharacter varying(100)Opis jedinice mjere.
conversion_factordouble precisionFaktor pretvorbe za jedinicu mjere.
roundingsmallintBroj decimalnih mjesta za zaokruživanje.
synonymscharacter varying[]Niz sinonima za jedinicu mjere.
created_attimestamp(6) without time zoneVrijeme stvaranja zapisa.
updated_attimestamp(6) without time zoneVrijeme posljednjeg ažuriranja zapisa.

Tablica referenceparameters

U ovoj tablici pohranjuju se parametri šifrarnika, kao što su tipovi arhiva ili drugi kvalifikatori.

PoljeTipOpis
idbigintJedinstveni identifikator zapisa (primarni ključ).
namecharacter varying(30)Naziv jedinice mjere.
varnamecharacter varying(30)Kratko ime varijable za jedinicu mjere.
descriptioncharacter varying(100)Opis jedinice mjere.
parent_idintegerReferenca na nadređeni parametar (hijerarhija).
referencemodel_idintegerReferenca na model šifrarnika.
created_attimestamp(6) without time zoneVrijeme stvaranja zapisa.
updated_attimestamp(6) without time zoneVrijeme posljednjeg ažuriranja zapisa.
deleted_attimestamp(6) without time zoneVrijeme logičkog brisanja zapisa (soft delete).

Veze:

  • Strani ključ parent_id upućuje na istu tablicu (referenceparameters.id), što omogućuje izgradnju hijerarhija.

Tablica equipment

PoljeTipOpis
idbigintJedinstveni identifikator zapisa (primarni ključ).
equipment_type_idbigintReferenca na tip opreme.
serial_numbercharacter varying(25)Serijski broj opreme.
manufacture_datetimestamp(6) without time zoneDatum proizvodnje opreme.
installation_datetimestamp(6) without time zoneDatum ugradnje opreme.
program_versioncharacter varying(100)Verzija softvera opreme.
created_attimestamp(6) without time zoneVrijeme stvaranja zapisa.
updated_attimestamp(6) without time zoneVrijeme posljednjeg ažuriranja zapisa.

Tablica channels

U ovoj tablici pohranjuju se podaci o kanalima opreme.

PoljeTipOpis
idbigintJedinstveni identifikator zapisa (primarni ključ).
equipment_type_idbigintReferenca na tip opreme (equipment_type.id).
unit_idbigintReferenca na jedinicu mjere (units.id).
namecharacter varying(100)Naziv kanala.
varnamecharacter varying(20)Kratko ime varijable za kanal.
created_attimestamp(6) without time zoneVrijeme stvaranja zapisa.
updated_attimestamp(6) without time zoneVrijeme posljednjeg ažuriranja zapisa.

Veze:

  • Strani ključ equipment_type_id upućuje na tablicu equipment_type.
  • Strani ključ unit_id upućuje na tablicu units.

Tablica seances

U ovoj tablici pohranjuju se podaci o komunikacijskim sesijama opreme.

PoljeTipOpis
idbigintJedinstveni identifikator zapisa (primarni ključ).
telemetry_idbigintReferenca na telemetriju (telemetry.id).
event_timeintegerVrijeme događaja.
evtidsmallintIdentifikator događaja.
trycntsmallintBroj pokušaja.
tryflcharacter varying(12)Indikator pokušaja.
statesmallintStatus sesije.
btmintegerNapunjenost baterije.
rssiintegerJakost signala (ako se koristi).
created_attimestamp(6) without time zoneVrijeme stvaranja zapisa.
updated_attimestamp(6) without time zoneVrijeme posljednjeg ažuriranja zapisa.

Opća struktura i veze

Glavna tablica – channel_data, koja povezuje podatke kanala s opremom, sesijama i jedinicama mjere.

Povezane tablice:

  • units – jedinice mjere.
  • referenceparameters – tipovi arhiva i drugi kvalifikatori.

Tablice opreme:

  • equipment – podaci o opremi.
  • channels – kanali opreme.

Tablica sesija – seances, u kojoj se pohranjuju podaci o komunikacijskim sesijama.

Primjer korištenja:

  • Podaci kanala (channel_data) stižu s opreme (equipment) u okviru određenih sesija (seances).
  • Svaki kanal (channels) ima vlastitu jedinicu mjere (units).
  • Tip arhive (referenceparameters) određuje kako podatke treba pohranjivati ili obrađivati.

Prednosti jedinstvenog modela

Ovaj podatkovni model osigurava fleksibilnost i skalabilnost pri pohrani i analizi podataka s različite opreme.

Neke od prednosti jedinstvenog podatkovnog modela su:

  • Dosljednost: podaci imaju istu strukturu i semantiku u svim sustavima.
  • Skalabilnost: lako je dodati nove izvore podataka ili tipove opreme.
  • Zaštita podataka: jedinstveni mehanizmi autentifikacije, autorizacije i šifriranja.
  • Jednostavnija analiza: podaci se mogu analizirati jedinstvenim alatima.

Apstrakcija opreme

Apstrakcija opreme ključno je načelo projektiranja sustava prema kojem se logika rada s podacima odvaja od fizičkih karakteristika opreme. To je posebno važno u sustavima koji koriste raznorodne uređaje.

Apstrakcija opreme znači da sustav radi s podacima na logičkoj razini koja ne ovisi o fizičkim uređajima na kojima se podaci pohranjuju ili obrađuju. To se postiže na sljedeći način:

  • Unifikacija sučelja: jedinstven način pristupa podacima, bez obzira na opremu.
  • Skrivanje detalja implementacije: fizička lokacija podataka, protokoli prijenosa i drugi tehnički aspekti skriveni su od aplikacija.
  • Adapteri: pretvorba podataka iz formata specifičnog za opremu u jedinstveni format.

Implementacija apstrakcije opreme

Sljedeći primjer pokazuje kako je ovaj pristup implementiran u našem sustavu. U njemu se prati put podataka od IoT uređaja preko adaptera u jedinstveni podatkovni model, a odatle dalje putem API-ja.

Uzmimo IoT uređaj koji šalje podatke o potrošnji plina. Implementirani algoritmi omogućuju nam da:

  • primimo podatke s uređaja preko adaptera;
  • pretvorimo ih u strukturu channel_data;
  • pohranimo ih u bazu podataka;
  • osiguramo pristup podacima putem API-ja.

Za svaki tip opreme izrađuju se adapteri koji podržavaju protokole specifične za uređaj i pretvaraju podatke u jedinstveni format.

Primjer: transformacija podataka

Podaci s IoT uređaja mogu stići u JSON formatu:

example.json
{
  "device_id": "sensor-123",
  "timestamp": 1739950861,
  "value": 42.5
}

Adapter pretvara podatke u strukturu channel_data:

example.sql
INSERT INTO channel_data (equipment_id, seance_id, channel_id,
 archive_type_id, value, event_time)
VALUES (1, 2, 3, 4, '42.5', 1739950861);

Zahtjev za podacima:

Request example
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3

Odgovor:

Response example
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]

Prednosti apstrakcije opreme

  • Neovisnost o hardveru: aplikacije rade s podacima, a da ne znaju gdje se oni fizički nalaze.
  • Fleksibilnost: lako je dodati nove uređaje ili izmijeniti postojeće.
  • Jednostavniji razvoj: programeri rade s apstraktnim entitetima i ne moraju se baviti detaljima hardvera.
  • Skalabilnost: podaci se mogu pohranjivati na različitim uređajima, ali sustav i dalje radi na ujednačen način.

Normalizacija podataka

Normalizacija podataka postupak je kojim se podaci u bazi organiziraju tako da se redundancija svede na minimum, a cjelovitost podataka poboljša. U kontekstu apstraktnog podatkovnog sloja normalizacija ima ključnu ulogu u stvaranju jedinstvenog, učinkovitog podatkovnog modela koji se može koristiti za rad s različitim tipovima opreme i izvorima podataka.

Normalizacija podataka dijeli podatke na logičke tablice i uspostavlja veze među njima kako bi se:

  • uklonili duplicirani podaci;
  • pojednostavnilo održavanje i ažuriranje podataka;
  • osigurala cjelovitost podataka;
  • poboljšale performanse upita.

Jedinstveni podatkovni model sustava doveden je u (treću) Boyce-Coddovu normalnu formu u pogledu atomarnih (skalarnih) vrijednosti. Pojedini entiteti podatkovnog modela koriste složene strukture kako bi se optimizirala obrada rijetkih, nestandardnih atributa.

Prednosti normalizacije

  • Uklanja redundanciju: podaci se pohranjuju na jednom mjestu, čime se smanjuje redundancija.
  • Dosljednost podataka: lakše je održavati dosljednost podataka.
  • Fleksibilnost: strukturu podataka lako je mijenjati.
  • Performanse: performanse upita se poboljšavaju (u većini slučajeva).

Normalizacija u kontekstu apstraktnog podatkovnog sloja

Normalizacija podataka važan je korak u projektiranju apstraktnog podatkovnog sloja.

Ona omogućuje da se:

  • izradi jedinstveni podatkovni model koji se može koristiti za rad s različitim tipovima opreme;
  • uklone redundancija i dupliciranje podataka;
  • osiguraju cjelovitost i dosljednost podataka, bez obzira na njihov izvor;
  • pojednostavni integracija novih uređaja i sustava.

Povezane teme

Posljednji put ažurirano

Je li vam ova stranica bila korisna?