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_numberichannel_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.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
equipment_id | bigint | Referenca na opremu (equipment.id). |
seance_id | bigint | Referenca na sesiju (seances.id). |
channel_id | bigint | Referenca na kanal (channels.id). |
unit_id | bigint | Referenca na jedinicu mjere (units.id). |
archive_type_id | integer | Referenca na tip arhive (referenceparameters.id). |
event_time | integer | Vrijeme događaja (npr. vremenska oznaka). |
value | character varying(100) | Vrijednost primljena s kanala. |
created_at | timestamp(6) without time zone | Vrijeme stvaranja zapisa. |
updated_at | timestamp(6) without time zone | Vrijeme posljednjeg ažuriranja zapisa. |
Veze:
- Strani ključ
unit_idupućuje na tablicuunits. - Strani ključ
archive_type_idupućuje na tablicureferenceparameters. - Strani ključ
equipment_idupućuje na tablicuequipment. - Strani ključ
channel_idupućuje na tablicuchannels. - Strani ključ
seance_idupućuje na tablicuseances.
Tablica units
U ovoj tablici pohranjuju se jedinice mjere koje se koriste za podatke kanala.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
name | character varying(30) | Naziv jedinice mjere. |
varname | character varying(30) | Kratko ime varijable za jedinicu mjere. |
description | character varying(100) | Opis jedinice mjere. |
conversion_factor | double precision | Faktor pretvorbe za jedinicu mjere. |
rounding | smallint | Broj decimalnih mjesta za zaokruživanje. |
synonyms | character varying[] | Niz sinonima za jedinicu mjere. |
created_at | timestamp(6) without time zone | Vrijeme stvaranja zapisa. |
updated_at | timestamp(6) without time zone | Vrijeme posljednjeg ažuriranja zapisa. |
Tablica referenceparameters
U ovoj tablici pohranjuju se parametri šifrarnika, kao što su tipovi arhiva ili drugi kvalifikatori.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
name | character varying(30) | Naziv jedinice mjere. |
varname | character varying(30) | Kratko ime varijable za jedinicu mjere. |
description | character varying(100) | Opis jedinice mjere. |
parent_id | integer | Referenca na nadređeni parametar (hijerarhija). |
referencemodel_id | integer | Referenca na model šifrarnika. |
created_at | timestamp(6) without time zone | Vrijeme stvaranja zapisa. |
updated_at | timestamp(6) without time zone | Vrijeme posljednjeg ažuriranja zapisa. |
deleted_at | timestamp(6) without time zone | Vrijeme logičkog brisanja zapisa (soft delete). |
Veze:
- Strani ključ
parent_idupućuje na istu tablicu (referenceparameters.id), što omogućuje izgradnju hijerarhija.
Tablica equipment
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
equipment_type_id | bigint | Referenca na tip opreme. |
serial_number | character varying(25) | Serijski broj opreme. |
manufacture_date | timestamp(6) without time zone | Datum proizvodnje opreme. |
installation_date | timestamp(6) without time zone | Datum ugradnje opreme. |
program_version | character varying(100) | Verzija softvera opreme. |
created_at | timestamp(6) without time zone | Vrijeme stvaranja zapisa. |
updated_at | timestamp(6) without time zone | Vrijeme posljednjeg ažuriranja zapisa. |
Tablica channels
U ovoj tablici pohranjuju se podaci o kanalima opreme.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
equipment_type_id | bigint | Referenca na tip opreme (equipment_type.id). |
unit_id | bigint | Referenca na jedinicu mjere (units.id). |
name | character varying(100) | Naziv kanala. |
varname | character varying(20) | Kratko ime varijable za kanal. |
created_at | timestamp(6) without time zone | Vrijeme stvaranja zapisa. |
updated_at | timestamp(6) without time zone | Vrijeme posljednjeg ažuriranja zapisa. |
Veze:
- Strani ključ
equipment_type_idupućuje na tablicuequipment_type. - Strani ključ
unit_idupućuje na tablicuunits.
Tablica seances
U ovoj tablici pohranjuju se podaci o komunikacijskim sesijama opreme.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
telemetry_id | bigint | Referenca na telemetriju (telemetry.id). |
event_time | integer | Vrijeme događaja. |
evtid | smallint | Identifikator događaja. |
trycnt | smallint | Broj pokušaja. |
tryfl | character varying(12) | Indikator pokušaja. |
state | smallint | Status sesije. |
btm | integer | Napunjenost baterije. |
rssi | integer | Jakost signala (ako se koristi). |
created_at | timestamp(6) without time zone | Vrijeme stvaranja zapisa. |
updated_at | timestamp(6) without time zone | Vrijeme 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:
{
"device_id": "sensor-123",
"timestamp": 1739950861,
"value": 42.5
}Adapter pretvara podatke u strukturu channel_data:
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:
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3Odgovor:
[
{
"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
Je li vam ova stranica bila korisna?
Hvala vam na povratnoj informaciji!