Abstraktní datová vrstva
Abstraktní datová vrstva, jednotný datový model systému, abstrakce zařízení a normalizace dat, které oddělují aplikace od fyzického úložiště.
Abstraktní datová vrstva se nachází mezi fyzickým úložištěm dat a aplikacemi, které je využívají. Skrývá fyzickou implementaci a specifika hardwaru a poskytuje jednotné rozhraní pro práci s daty. Nabízí:
- Nezávislost na hardwaru: Data jsou uložena na různých zařízeních (servery, cloud, zařízení IoT), ale aplikace s nimi pracuje prostřednictvím jednotného rozhraní.
- Jednodušší vývoj: Vývojáři pracují s abstraktními entitami, aniž by se museli zabývat podrobnostmi fyzického úložiště.
- Flexibilita: Změny ve fyzické struktuře dat (například migrace do cloudu) nemají na aplikace vliv.
Jednotný datový model
Systém používá jednotný datový model, který je přizpůsoben různým typům zařízení a umožňuje s nimi pracovat jednotným způsobem bez ohledu na jejich zdroj nebo typ zařízení. Zahrnuje společné datové struktury, jednotná pravidla zpracování a sémantickou konzistenci dat napříč všemi systémy a subsystémy.
Jednotný datový model systému například zahrnuje:
- Entity: Zařízení, kanály, relace, jednotky a referenční parametry.
- Vztahy: Zařízení má kanály, kanály souvisejí s daty a data souvisejí s relacemi.
- Atributy: Atributy jsou definovány pro každou entitu (například
equipment.serial_numberachannel_data.value).
Struktura jednotného datového modelu systému
Jednotný datový model systému je struktura pro ukládání a správu dat souvisejících se zařízeními, kanály, relacemi a měřeními. Podívejme se na jednotlivé tabulky a jejich účel a také na vztahy mezi nimi.
Tabulka channel_data
Tato tabulka ukládá data přijatá z kanálů zařízení v rámci konkrétních relací.
| Pole | Typ | Popis |
|---|---|---|
id | bigint | Jedinečný identifikátor záznamu (primární klíč). |
equipment_id | bigint | Odkaz na zařízení (equipment.id). |
seance_id | bigint | Odkaz na relaci (seances.id). |
channel_id | bigint | Odkaz na kanál (channels.id). |
unit_id | bigint | Odkaz na měrnou jednotku (units.id). |
archive_type_id | integer | Odkaz na typ archivu (referenceparameters.id). |
event_time | integer | Čas události (např. časové razítko). |
value | character varying(100) | Hodnota přijatá z kanálu. |
created_at | timestamp(6) without time zone | Čas vytvoření záznamu. |
updated_at | timestamp(6) without time zone | Čas poslední aktualizace záznamu. |
Vztahy:
- Cizí klíč
unit_idodkazuje na tabulkuunits. - Cizí klíč
archive_type_idodkazuje na tabulkureferenceparameters. - Cizí klíč
equipment_idodkazuje na tabulkuequipment. - Cizí klíč
channel_idodkazuje na tabulkuchannels. - Cizí klíč
seance_idodkazuje na tabulkuseances.
Tabulka units
Tato tabulka ukládá měrné jednotky používané pro data kanálů.
| Pole | Typ | Popis |
|---|---|---|
id | bigint | Jedinečný identifikátor záznamu (primární klíč). |
name | character varying(30) | Název měrné jednotky. |
varname | character varying(30) | Krátký název proměnné pro měrnou jednotku. |
description | character varying(100) | Popis měrné jednotky. |
conversion_factor | double precision | Převodní koeficient pro měrnou jednotku. |
rounding | smallint | Počet desetinných míst pro zaokrouhlení. |
synonyms | character varying[] | Pole synonym pro měrnou jednotku. |
created_at | timestamp(6) without time zone | Čas vytvoření záznamu. |
updated_at | timestamp(6) without time zone | Čas poslední aktualizace záznamu. |
Tabulka referenceparameters
Tato tabulka ukládá referenční parametry, jako jsou typy archivů nebo jiné kvalifikátory.
| Pole | Typ | Popis |
|---|---|---|
id | bigint | Jedinečný identifikátor záznamu (primární klíč). |
name | character varying(30) | Název měrné jednotky. |
varname | character varying(30) | Krátký název proměnné pro měrnou jednotku. |
description | character varying(100) | Popis měrné jednotky. |
parent_id | integer | Odkaz na nadřazený parametr (hierarchie). |
referencemodel_id | integer | Odkaz na model číselníku. |
created_at | timestamp(6) without time zone | Čas vytvoření záznamu. |
updated_at | timestamp(6) without time zone | Čas poslední aktualizace záznamu. |
deleted_at | timestamp(6) without time zone | Čas smazání záznamu (měkké smazání). |
Vztahy:
- Cizí klíč
parent_idodkazuje na stejnou tabulku (referenceparameters.id), což umožňuje budovat hierarchie.
Tabulka equipment
| Pole | Typ | Popis |
|---|---|---|
id | bigint | Jedinečný identifikátor záznamu (primární klíč). |
equipment_type_id | bigint | Odkaz na typ zařízení. |
serial_number | character varying(25) | Sériové číslo zařízení. |
manufacture_date | timestamp(6) without time zone | Datum výroby zařízení. |
installation_date | timestamp(6) without time zone | Datum instalace zařízení. |
program_version | character varying(100) | Verze softwaru zařízení. |
created_at | timestamp(6) without time zone | Čas vytvoření záznamu. |
updated_at | timestamp(6) without time zone | Čas poslední aktualizace záznamu. |
Tabulka channels
Tato tabulka ukládá informace o kanálech zařízení.
| Pole | Typ | Popis |
|---|---|---|
id | bigint | Jedinečný identifikátor záznamu (primární klíč). |
equipment_type_id | bigint | Odkaz na typ zařízení (equipment_type.id). |
unit_id | bigint | Odkaz na měrnou jednotku (units.id). |
name | character varying(100) | Název kanálu. |
varname | character varying(20) | Krátký název proměnné pro kanál. |
created_at | timestamp(6) without time zone | Čas vytvoření záznamu. |
updated_at | timestamp(6) without time zone | Čas poslední aktualizace záznamu. |
Vztahy:
- Cizí klíč
equipment_type_idodkazuje na tabulkuequipment_type. - Cizí klíč
unit_idodkazuje na tabulkuunits.
Tabulka seances
Tato tabulka ukládá informace o komunikačních relacích zařízení.
| Pole | Typ | Popis |
|---|---|---|
id | bigint | Jedinečný identifikátor záznamu (primární klíč). |
telemetry_id | bigint | Odkaz na telemetrii (telemetry.id). |
event_time | integer | Čas události. |
evtid | smallint | Identifikátor události. |
trycnt | smallint | Počet pokusů. |
tryfl | character varying(12) | Příznak pokusu. |
state | smallint | Stav relace. |
btm | integer | Nabití baterie. |
rssi | integer | Síla signálu (pokud se používá). |
created_at | timestamp(6) without time zone | Čas vytvoření záznamu. |
updated_at | timestamp(6) without time zone | Čas poslední aktualizace záznamu. |
Obecná struktura a vztahy
Hlavní tabulka — channel_data, která propojuje data kanálů se zařízeními, relacemi a jednotkami.
Vztahové tabulky:
units— měrné jednotky.referenceparameters— typy archivů a jiné kvalifikátory.
Tabulky zařízení:
equipment— informace o zařízeních.channels— kanály zařízení.
Tabulka relací — seances, která ukládá informace o komunikačních relacích.
Příklad použití:
- Data kanálů (
channel_data) přicházejí ze zařízení (equipment) v rámci konkrétních relací (seances). - Každý kanál (
channels) má vlastní měrnou jednotku (units). - Typ archivu (
referenceparameters) určuje, jak mají být data ukládána nebo zpracovávána.
Výhody jednotného modelu
Tento datový model poskytuje flexibilitu a škálovatelnost pro ukládání a analýzu dat z různých zařízení.
Mezi výhody jednotného datového modelu patří:
- Konzistence: Data mají stejnou strukturu a sémantiku napříč všemi systémy.
- Škálovatelnost: Snadno lze přidávat nové zdroje dat nebo typy zařízení.
- Ochrana dat: Jednotné mechanismy autentizace, autorizace a šifrování.
- Jednodušší analýza: Data lze analyzovat jednotnými nástroji.
Abstrakce zařízení
Abstrakce zařízení je klíčový princip návrhu systému, který odděluje logiku práce s daty od fyzických vlastností zařízení. To je obzvláště důležité v systémech, které využívají heterogenní zařízení.
Abstrakce zařízení znamená, že systém zpracovává data na logické úrovni nezávislé na fyzických zařízeních, na nichž jsou data uložena nebo zpracovávána. Toho je dosaženo pomocí:
- Sjednocení rozhraní: Jednotný způsob přístupu k datům bez ohledu na zařízení.
- Skrytí podrobností implementace: Fyzické umístění dat, přenosové protokoly a další technické aspekty jsou před aplikacemi skryty.
- Adaptéry: Převod dat z formátu specifického pro zařízení do jednotného formátu.
Implementace abstrakce zařízení
Následující příklad ukazuje, jak je tento přístup implementován v našem systému. Sleduje data ze zařízení IoT přes adaptér do jednotného datového modelu a ven prostřednictvím API.
Uvažujme zařízení IoT, které odesílá data o spotřebě plynu. Implementované algoritmy nám umožňují:
- Přijmout data ze zařízení prostřednictvím adaptéru.
- Převést je do struktury
channel_data. - Uložit je do databáze.
- Poskytnout přístup k datům prostřednictvím API.
Pro každý typ zařízení jsou vytvořeny adaptéry, které zpracovávají protokoly specifické pro dané zařízení a převádějí data do jednotného formátu.
Příklad: transformace dat
U zařízení IoT mohou data přicházet ve formátu JSON:
{
"device_id": "sensor-123",
"timestamp": 1739950861,
"value": 42.5
}Adaptér převede data do struktury 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);Požadavek na data:
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3Odpověď:
[
{
"id": 123,
"equipment_id": 1,
"seance_id": 2,
"channel_id": 3,
"archive_type_id": 4,
"value": 42.5,
"event_time": 1739950861
}
]Výhody abstrakce zařízení
- Nezávislost na hardwaru: Aplikace pracují s daty, aniž by věděly, kde jsou fyzicky uložena.
- Flexibilita: Snadné přidávání nových zařízení nebo úprava stávajících.
- Jednodušší vývoj: Vývojáři pracují s abstraktními entitami, aniž by se museli zabývat podrobnostmi hardwaru.
- Škálovatelnost: Data lze ukládat na různých zařízeních, ale systém i nadále funguje jednotným způsobem.
Normalizace dat
Normalizace dat je proces uspořádání dat v databázi takovým způsobem, který minimalizuje redundanci a zlepšuje integritu dat. V kontextu abstraktní datové vrstvy hraje normalizace klíčovou roli při vytváření jednotného a efektivního datového modelu, který lze použít pro práci s různými typy zařízení a zdroji dat.
Normalizace dat rozděluje data do logických tabulek a vytváří mezi nimi vztahy s cílem:
- Odstranit duplicitní data.
- Zjednodušit údržbu a aktualizaci dat.
- Zajistit integritu dat.
- Zlepšit výkon dotazů.
Jednotný datový model systému je převeden do (třetí) Boyceovy–Coddovy normální formy z hlediska atomických (skalárních) hodnot. Některé entity datového modelu používají složené struktury pro optimalizaci práce se vzácnými, nestandardními atributy.
Výhody normalizace
- Odstraňuje redundanci: Data jsou uložena na jednom místě, což snižuje redundanci.
- Konzistence dat: Udržování konzistence dat je zjednodušeno.
- Flexibilita: Změny ve struktuře dat lze provádět snadno.
- Výkon: Výkon dotazů je zlepšen (ve většině případů).
Normalizace v kontextu abstraktní datové vrstvy
Normalizace dat je důležitým krokem při návrhu abstraktní datové vrstvy.
Umožňuje:
- Vytvořit jednotný datový model, který lze použít pro práci s různými typy zařízení.
- Odstranit redundanci a duplicitu dat.
- Zajistit integritu a konzistenci dat bez ohledu na jejich zdroj.
- Zjednodušit integraci nových zařízení a systémů.
Související témata
Byla tato stránka užitečná?
Děkujeme za vaši zpětnou vazbu!