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_number a channel_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í.

PoleTypPopis
idbigintJedinečný identifikátor záznamu (primární klíč).
equipment_idbigintOdkaz na zařízení (equipment.id).
seance_idbigintOdkaz na relaci (seances.id).
channel_idbigintOdkaz na kanál (channels.id).
unit_idbigintOdkaz na měrnou jednotku (units.id).
archive_type_idintegerOdkaz na typ archivu (referenceparameters.id).
event_timeintegerČas události (např. časové razítko).
valuecharacter varying(100)Hodnota přijatá z kanálu.
created_attimestamp(6) without time zoneČas vytvoření záznamu.
updated_attimestamp(6) without time zoneČas poslední aktualizace záznamu.

Vztahy:

  • Cizí klíč unit_id odkazuje na tabulku units.
  • Cizí klíč archive_type_id odkazuje na tabulku referenceparameters.
  • Cizí klíč equipment_id odkazuje na tabulku equipment.
  • Cizí klíč channel_id odkazuje na tabulku channels.
  • Cizí klíč seance_id odkazuje na tabulku seances.

Tabulka units

Tato tabulka ukládá měrné jednotky používané pro data kanálů.

PoleTypPopis
idbigintJedinečný identifikátor záznamu (primární klíč).
namecharacter varying(30)Název měrné jednotky.
varnamecharacter varying(30)Krátký název proměnné pro měrnou jednotku.
descriptioncharacter varying(100)Popis měrné jednotky.
conversion_factordouble precisionPřevodní koeficient pro měrnou jednotku.
roundingsmallintPočet desetinných míst pro zaokrouhlení.
synonymscharacter varying[]Pole synonym pro měrnou jednotku.
created_attimestamp(6) without time zoneČas vytvoření záznamu.
updated_attimestamp(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.

PoleTypPopis
idbigintJedinečný identifikátor záznamu (primární klíč).
namecharacter varying(30)Název měrné jednotky.
varnamecharacter varying(30)Krátký název proměnné pro měrnou jednotku.
descriptioncharacter varying(100)Popis měrné jednotky.
parent_idintegerOdkaz na nadřazený parametr (hierarchie).
referencemodel_idintegerOdkaz na model číselníku.
created_attimestamp(6) without time zoneČas vytvoření záznamu.
updated_attimestamp(6) without time zoneČas poslední aktualizace záznamu.
deleted_attimestamp(6) without time zoneČas smazání záznamu (měkké smazání).

Vztahy:

  • Cizí klíč parent_id odkazuje na stejnou tabulku (referenceparameters.id), což umožňuje budovat hierarchie.

Tabulka equipment

PoleTypPopis
idbigintJedinečný identifikátor záznamu (primární klíč).
equipment_type_idbigintOdkaz na typ zařízení.
serial_numbercharacter varying(25)Sériové číslo zařízení.
manufacture_datetimestamp(6) without time zoneDatum výroby zařízení.
installation_datetimestamp(6) without time zoneDatum instalace zařízení.
program_versioncharacter varying(100)Verze softwaru zařízení.
created_attimestamp(6) without time zoneČas vytvoření záznamu.
updated_attimestamp(6) without time zoneČas poslední aktualizace záznamu.

Tabulka channels

Tato tabulka ukládá informace o kanálech zařízení.

PoleTypPopis
idbigintJedinečný identifikátor záznamu (primární klíč).
equipment_type_idbigintOdkaz na typ zařízení (equipment_type.id).
unit_idbigintOdkaz na měrnou jednotku (units.id).
namecharacter varying(100)Název kanálu.
varnamecharacter varying(20)Krátký název proměnné pro kanál.
created_attimestamp(6) without time zoneČas vytvoření záznamu.
updated_attimestamp(6) without time zoneČas poslední aktualizace záznamu.

Vztahy:

  • Cizí klíč equipment_type_id odkazuje na tabulku equipment_type.
  • Cizí klíč unit_id odkazuje na tabulku units.

Tabulka seances

Tato tabulka ukládá informace o komunikačních relacích zařízení.

PoleTypPopis
idbigintJedinečný identifikátor záznamu (primární klíč).
telemetry_idbigintOdkaz na telemetrii (telemetry.id).
event_timeintegerČas události.
evtidsmallintIdentifikátor události.
trycntsmallintPočet pokusů.
tryflcharacter varying(12)Příznak pokusu.
statesmallintStav relace.
btmintegerNabití baterie.
rssiintegerSíla signálu (pokud se používá).
created_attimestamp(6) without time zoneČas vytvoření záznamu.
updated_attimestamp(6) without time zoneČas poslední aktualizace záznamu.

Obecná struktura a vztahy

Hlavní tabulkachannel_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:

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

Adaptér převede data do struktury 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);

Požadavek na data:

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

Odpověď:

Response example
[
  {
    "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

Naposledy aktualizováno

Byla tato stránka užitečná?