Apstraktni sloj podataka
Apstraktni sloj podataka, jedinstveni model podataka sistema, apstrakcija opreme i normalizacija podataka, koji zajedno odvajaju aplikacije od fizičkog skladišta.
Apstraktni sloj podataka nalazi se između fizičkog skladišta podataka i aplikacija koje ih koriste. Skriva fizičku implementaciju i specifičnosti hardvera, a za rad sa podacima pruža jedinstven interfejs. Sloj obezbeđuje:
- Nezavisnost od hardvera: podaci se čuvaju na različitim uređajima (na serverima, u oblaku, na IoT uređajima), ali aplikacija sa njima radi preko jedinstvenog interfejsa.
- Jednostavniji razvoj: programeri rade sa apstraktnim entitetima i ne moraju da se bave detaljima fizičkog skladištenja podataka.
- Fleksibilnost: promene fizičke strukture podataka (na primer, migracija u oblak) ne utiču na aplikacije.
Jedinstveni model podataka
Sistem koristi jedinstveni model podataka koji je prilagođen različitim tipovima opreme i omogućava da se sa podacima radi na ujednačen način, bez obzira na njihov izvor ili tip opreme. Model obuhvata zajedničke strukture podataka, ujednačena pravila obrade i semantičku doslednost podataka u svim sistemima i podsistemima.
Na primer, jedinstveni model podataka sistema sadrži:
- Entiteti: oprema, kanali, sesije, jedinice mere i parametri šifarnika.
- Veze: oprema ima kanale, kanali su povezani sa podacima, a podaci sa sesijama.
- Atributi: za svaki entitet definisani su atributi (na primer,
equipment.serial_numberichannel_data.value).
Struktura jedinstvenog modela podataka sistema
Jedinstveni model podataka sistema je struktura za čuvanje podataka o opremi, kanalima, sesijama i merenjima i za upravljanje tim podacima. Pogledajmo svaku tabelu i njenu namenu, kao i veze između tabela.
Tabela channel_data
U ovoj tabeli čuvaju se podaci primljeni sa 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 mere (units.id). |
archive_type_id | integer | Referenca na tip arhive (referenceparameters.id). |
event_time | integer | Vreme događaja (npr. vremenska oznaka). |
value | character varying(100) | Vrednost primljena sa kanala. |
created_at | timestamp(6) without time zone | Vreme kreiranja zapisa. |
updated_at | timestamp(6) without time zone | Vreme poslednjeg ažuriranja zapisa. |
Veze:
- Strani ključ
unit_idupućuje na tabeluunits. - Strani ključ
archive_type_idupućuje na tabelureferenceparameters. - Strani ključ
equipment_idupućuje na tabeluequipment. - Strani ključ
channel_idupućuje na tabeluchannels. - Strani ključ
seance_idupućuje na tabeluseances.
Tabela units
U ovoj tabeli čuvaju se jedinice mere koje se koriste za podatke kanala.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
name | character varying(30) | Naziv jedinice mere. |
varname | character varying(30) | Kratko ime promenljive za jedinicu mere. |
description | character varying(100) | Opis jedinice mere. |
conversion_factor | double precision | Faktor konverzije za jedinicu mere. |
rounding | smallint | Broj decimalnih mesta za zaokruživanje. |
synonyms | character varying[] | Niz sinonima za jedinicu mere. |
created_at | timestamp(6) without time zone | Vreme kreiranja zapisa. |
updated_at | timestamp(6) without time zone | Vreme poslednjeg ažuriranja zapisa. |
Tabela referenceparameters
U ovoj tabeli čuvaju se parametri šifarnika, kao što su tipovi arhiva ili drugi kvalifikatori.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
name | character varying(30) | Naziv jedinice mere. |
varname | character varying(30) | Kratko ime promenljive za jedinicu mere. |
description | character varying(100) | Opis jedinice mere. |
parent_id | integer | Referenca na nadređeni parametar (hijerarhija). |
referencemodel_id | integer | Referenca na model šifarnika. |
created_at | timestamp(6) without time zone | Vreme kreiranja zapisa. |
updated_at | timestamp(6) without time zone | Vreme poslednjeg ažuriranja zapisa. |
deleted_at | timestamp(6) without time zone | Vreme logičkog brisanja zapisa (soft delete). |
Veze:
- Strani ključ
parent_idupućuje na istu tabelu (referenceparameters.id), što omogućava izgradnju hijerarhija.
Tabela 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 | Vreme kreiranja zapisa. |
updated_at | timestamp(6) without time zone | Vreme poslednjeg ažuriranja zapisa. |
Tabela channels
U ovoj tabeli čuvaju 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 mere (units.id). |
name | character varying(100) | Naziv kanala. |
varname | character varying(20) | Kratko ime promenljive za kanal. |
created_at | timestamp(6) without time zone | Vreme kreiranja zapisa. |
updated_at | timestamp(6) without time zone | Vreme poslednjeg ažuriranja zapisa. |
Veze:
- Strani ključ
equipment_type_idupućuje na tabeluequipment_type. - Strani ključ
unit_idupućuje na tabeluunits.
Tabela seances
U ovoj tabeli čuvaju se podaci o komunikacionim sesijama opreme.
| Polje | Tip | Opis |
|---|---|---|
id | bigint | Jedinstveni identifikator zapisa (primarni ključ). |
telemetry_id | bigint | Referenca na telemetriju (telemetry.id). |
event_time | integer | Vreme 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 | Jačina signala (ako se koristi). |
created_at | timestamp(6) without time zone | Vreme kreiranja zapisa. |
updated_at | timestamp(6) without time zone | Vreme poslednjeg ažuriranja zapisa. |
Opšta struktura i veze
Glavna tabela – channel_data, koja povezuje podatke kanala sa opremom, sesijama i jedinicama mere.
Povezane tabele:
units– jedinice mere.referenceparameters– tipovi arhiva i drugi kvalifikatori.
Tabele opreme:
equipment– podaci o opremi.channels– kanali opreme.
Tabela sesija – seances, u kojoj se čuvaju podaci o komunikacionim sesijama.
Primer korišćenja:
- Podaci kanala (
channel_data) stižu sa opreme (equipment) u okviru određenih sesija (seances). - Svaki kanal (
channels) ima sopstvenu jedinicu mere (units). - Tip arhive (
referenceparameters) određuje kako podatke treba čuvati ili obrađivati.
Prednosti jedinstvenog modela
Ovaj model podataka obezbeđuje fleksibilnost i skalabilnost pri čuvanju i analizi podataka sa različite opreme.
Neke od prednosti jedinstvenog modela podataka su:
- Doslednost: podaci imaju istu strukturu i semantiku u svim sistemima.
- Skalabilnost: lako je dodati nove izvore podataka ili tipove opreme.
- Zaštita podataka: jedinstveni mehanizmi autentifikacije, autorizacije i šifrovanja.
- Jednostavnija analiza: podaci mogu da se analiziraju jedinstvenim alatima.
Apstrakcija opreme
Apstrakcija opreme je ključni princip projektovanja sistema po kojem se logika rada sa podacima odvaja od fizičkih karakteristika opreme. To je posebno važno u sistemima koji koriste raznorodne uređaje.
Apstrakcija opreme znači da sistem radi sa podacima na logičkom nivou koji ne zavisi od fizičkih uređaja na kojima se podaci čuvaju ili obrađuju. To se postiže na sledeći način:
- Unifikacija interfejsa: jedinstven način pristupa podacima, bez obzira na opremu.
- Skrivanje detalja implementacije: fizička lokacija podataka, protokoli prenosa i drugi tehnički aspekti skriveni su od aplikacija.
- Adapteri: konverzija podataka iz formata specifičnog za opremu u jedinstveni format.
Implementacija apstrakcije opreme
Sledeći primer pokazuje kako je ovaj pristup implementiran u našem sistemu. U njemu se prati put podataka od IoT uređaja preko adaptera u jedinstveni model podataka, a odatle dalje preko interfejsa API.
Uzmimo IoT uređaj koji šalje podatke o potrošnji gasa. Implementirani algoritmi nam omogućavaju da:
- primimo podatke sa uređaja preko adaptera;
- konvertujemo ih u strukturu
channel_data; - sačuvamo ih u bazi podataka;
- obezbedimo pristup podacima preko interfejsa API.
Za svaki tip opreme izrađuju se adapteri koji podržavaju protokole specifične za uređaj i konvertuju podatke u jedinstveni format.
Primer: transformacija podataka
Podaci sa IoT uređaja mogu da stignu u formatu JSON:
{
"device_id": "sensor-123",
"timestamp": 1739950861,
"value": 42.5
}Adapter konvertuje 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);Zahtev 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
- Nezavisnost od hardvera: aplikacije rade sa podacima, a da ne znaju gde se oni fizički nalaze.
- Fleksibilnost: lako je dodati nove uređaje ili izmeniti postojeće.
- Jednostavniji razvoj: programeri rade sa apstraktnim entitetima i ne moraju da se bave detaljima hardvera.
- Skalabilnost: podaci mogu da se čuvaju na različitim uređajima, ali sistem i dalje radi na ujednačen način.
Normalizacija podataka
Normalizacija podataka je postupak kojim se podaci u bazi organizuju tako da se redundantnost svede na minimum, a integritet podataka poboljša. U kontekstu apstraktnog sloja podataka normalizacija ima ključnu ulogu u stvaranju jedinstvenog, efikasnog modela podataka koji može da se koristi za rad sa različitim tipovima opreme i izvorima podataka.
Normalizacija podataka deli podatke na logičke tabele i uspostavlja veze između njih kako bi se:
- uklonili duplirani podaci;
- pojednostavilo održavanje i ažuriranje podataka;
- obezbedio integritet podataka;
- poboljšale performanse upita.
Jedinstveni model podataka sistema doveden je u (treću) Bojs-Kodovu normalnu formu u pogledu atomičnih (skalarnih) vrednosti. Pojedini entiteti modela podataka koriste složene strukture kako bi se optimizovala obrada retkih, nestandardnih atributa.
Prednosti normalizacije
- Uklanja redundantnost: podaci se čuvaju na jednom mestu, čime se smanjuje redundantnost.
- Doslednost podataka: lakše je održavati doslednost podataka.
- Fleksibilnost: strukturu podataka je lako menjati.
- Performanse: performanse upita se poboljšavaju (u većini slučajeva).
Normalizacija u kontekstu apstraktnog sloja podataka
Normalizacija podataka je važan korak u projektovanju apstraktnog sloja podataka.
Ona omogućava da se:
- izradi jedinstveni model podataka koji može da se koristi za rad sa različitim tipovima opreme;
- uklone redundantnost i dupliranje podataka;
- obezbede integritet i doslednost podataka, bez obzira na njihov izvor;
- pojednostavi integracija novih uređaja i sistema.
Povezane teme
Da li vam je ova stranica bila korisna?
Hvala vam na povratnoj informaciji!