Abstrakte Datenschicht

Abstrakte Datenschicht

Die abstrakte Datenschicht ist eine Schicht zwischen der physischen Datenspeicherung und den Anwendungen, die sie nutzen. Sie ermöglicht die Abstraktion von physischen Implementierungs- und Hardwarespezifika und bietet eine einzige Schnittstelle für die Arbeit mit Daten. Sie bietet:

  • Hardware-Unabhängigkeit: Die Daten werden auf verschiedenen Geräten gespeichert (Server, Cloud, IoT-Geräte), aber die Anwendung interagiert mit ihnen über eine einzige Schnittstelle.
  • Vereinfachung der Entwicklung: Die Entwickler arbeiten mit abstrakten Einheiten, ohne sich um die Details der physischen Speicherung zu kümmern.
  • Flexibilität: Änderungen an der physischen Struktur der Daten (z. B. Migration in die Cloud) haben keine Auswirkungen auf die Anwendungen.

Vereinheitlichtes Datenmodell

Das System verwendet ein einheitliches Datenmodell, das an die verschiedenen Gerätetypen angepasst ist und es Ihnen ermöglicht, mit ihnen auf einheitliche Weise zu arbeiten, unabhängig von ihrer Quelle oder ihrem Gerätetyp. Es umfasst gemeinsame Datenstrukturen, einheitliche Verarbeitungsregeln und semantische Konsistenz der Daten über alle Systeme und Subsysteme hinweg.

Ein einheitliches Systemdatenmodell umfasst zum Beispiel:

  • Einheiten: Geräte, Kanäle, Sitzungen, Einheiten, Referenzparameter.
  • Beziehungen: Geräte haben Kanäle, Kanäle sind mit Daten verbunden, Daten sind mit Sitzungen verbunden.
  • Attribute: Für jede Entität werden Attribute definiert (z. B.equipment.serial_number, channel_data.value).

Struktur des Unified System Datenmodells

Das Unified System Data Model ist eine Struktur zum Speichern und Verwalten von Daten in Bezug auf Hardware, Kanäle, Sitzungen und Messungen. Schauen wir uns die einzelnen Tabellen und ihren Zweck sowie die Beziehungen zwischen ihnen an.

Tabelle channel_data

In dieser Tabelle werden die von den Gerätekanälen innerhalb bestimmter Sitzungen empfangenen Daten gespeichert.

Feld Typ Beschreibung
id bigint Eindeutiger Datensatzbezeichner (Primärschlüssel).
equipment_id bigint Referenz auf Ausrüstung (equipment.id).
seance_id bigint Verweis auf Sitzung (seances.id).
channel_id bigint Verweis auf den Kanal (channels.id).
unit_id bigint Verweis auf die Maßeinheit (units.id).
archive_type_id integer Referenz auf den Archivtyp (referenceparameters.id).
event_time integer Der Zeitpunkt des Ereignisses (z.B. Zeitstempel).
value Character varying(100) Der vom Kanal empfangene Wert.
created_at timestamp(6) without time zone Zeitpunkt, zu dem der Datensatz erstellt wurde.
updated_at timestamp(6) without time zone Zeitpunkt, an dem der Datensatz zuletzt aktualisiert wurde.

Beziehungen:

  • Der Fremdschlüssel unit_id verweist auf die Tabelle units.
  • Der Fremdschlüssel archive_type_id verweist auf die Tabelle referenceparameters.
  • Der Fremdschlüssel equipment_id verweist auf die Tabelle equipment.
  • Der Fremdschlüssel channel_id verweist auf die Tabelle channels.
  • Der Fremdschlüssel seance_id verweist auf die Tabelle seances.

Tabelle units

In dieser Tabelle werden die für die Kanaldaten verwendeten Maßeinheiten gespeichert.

Feld Typ Beschreibung
id bigint Eindeutiger Datensatzbezeichner (Primärschlüssel).
Name Zeichen variierend(30) Name der Maßeinheit.
Varname Zeichen variierend(30) Kurzer Variablenname für die Maßeinheit.
Beschreibung Zeichen variierend(100) Beschreibung der Maßeinheit.
conversion_factor double precision Umrechnungsfaktor für eine Maßeinheit.
rundung smallint Anzahl der Dezimalstellen, auf die gerundet wird.
Synonyme Character varying[] Array von Synonymen für die Maßeinheit.
created_at timestamp(6) without time zone Uhrzeit, zu der der Datensatz erstellt wurde.
updated_at timestamp(6) without time zone Zeitpunkt, an dem der Datensatz zuletzt aktualisiert wurde.

Tabelle referenceparameters

In dieser Tabelle werden Referenzparameter wie Archivtypen oder andere Qualifikatoren gespeichert.

Feld Typ Beschreibung
id bigint Eindeutiger Bezeichner des Datensatzes (Primärschlüssel).
Name Character varying(30) Der Name der Maßeinheit.
varname Zeichen variierend(30) Kurzer Variablenname für die Maßeinheit.
Beschreibung Zeichen variierend(100) Beschreibung der Maßeinheit.
parent_id integer Ein Verweis auf den übergeordneten Parameter (Hierarchie).
referencemodel_id integer Verweis auf das Verzeichnismodell.
created_at timestamp(6) without time zone Zeitpunkt, zu dem der Datensatz erstellt wurde.
updated_at timestamp(6) without time zone Zeitpunkt, an dem der Datensatz zuletzt aktualisiert wurde.
deleted_at timestamp(6) without time zone Zeitpunkt, an dem der Datensatz gelöscht wurde (soft delete).

Beziehungen:

  • Der Fremdschlüssel parent_id verweist auf dieselbe Tabelle (referenceparameters.id), so dass Hierarchien gebildet werden können.

Tabelle equipment

Feld Typ Beschreibung
id bigint Eindeutiger Bezeichner des Datensatzes (Primärschlüssel).
equipment_type_id bigint Referenz auf den Gerätetyp.
serial_number Character varying(25) Seriennummer des Geräts.
manufacture_date timestamp(6) without time zone Das Herstellungsdatum des Geräts.
installation_date timestamp(6) without time zone Installationsdatum des Geräts.
program_version Zeichen variierend(100) Softwareversion des Geräts.
created_at timestamp(6) without time zone Uhrzeit, zu der der Datensatz erstellt wurde.
updated_at timestamp(6) without time zone Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.

Tabelle channels

In dieser Tabelle werden Informationen über die Gerätekanäle gespeichert.

Feld Typ Beschreibung
id bigint Eindeutiger Bezeichner des Datensatzes (Primärschlüssel).
equipment_type_id bigint Referenz auf den Gerätetyp (equipment_type.id).
unit_id bigint Verweis auf die Maßeinheit (units.id).
Name Zeichen variierend(100) Kanalname.
Varname Zeichen variierend(20) Kurzer Variablenname für den Kanal.
created_at timestamp(6) without time zone Zeitpunkt, zu dem der Datensatz erstellt wurde.
updated_at timestamp(6) without time zone Zeitpunkt, an dem der Datensatz zuletzt aktualisiert wurde.

Beziehungen:

  • Der Fremdschlüssel equipment_type_id verweist auf die Tabelle equipment_type.
  • Der Fremdschlüssel unit_id verweist auf die Tabelle units.

Tabelle seances

In dieser Tabelle werden Informationen über die Kommunikationssitzungen des Geräts gespeichert.

Feld Typ Beschreibung
id bigint Eindeutiger Bezeichner des Datensatzes (Primärschlüssel).
telemetry_id bigint Referenz zur Telemetrie (telemetry.id).
event_time integer Der Zeitpunkt des Ereignisses.
evtid smallint Der Bezeichner des Ereignisses.
trycnt smallint Die Anzahl der Versuche.
tryfl Zeichen variierend(12) Das Kennzeichen des Versuchs.
state smallint Sitzungsstatus.
btm Ganzzahl Batterieladung.
rssi integer Signalstärke (falls verwendet).
created_at timestamp(6) without time zone Zeitpunkt, an dem der Datensatz erstellt wurde.
updated_at timestamp(6) without time zone Zeitpunkt, an dem der Datensatz zuletzt aktualisiert wurde.

Allgemeine Struktur und Beziehungen

Haupttabelle - channel_data, die Kanaldaten mit Geräten, Sitzungen und Einheiten verknüpft.

Beziehungstabellen:

  • units - Maßeinheiten.
  • referenceparameters - Archivtypen und andere Qualifikatoren.

Ausrüstungstabellen:

  • equipment - Informationen über die Geräte.
  • channels - Ausrüstungskanäle.

Tabelle Sitzungen - seances, in der Informationen über Kommunikationssitzungen gespeichert werden.

Benutzungsbeispiel:

  • Kanaldaten (channel_data) stammen von Geräten (equipment) innerhalb bestimmter Sitzungen (seances).
  • Jeder Kanal (channels) hat seine eigene Maßeinheit (units).
  • Die Art des Archivs (referenceparameters) bestimmt, wie die Daten gespeichert oder verarbeitet werden sollen.

Vorteile eines vereinheitlichten Modells

Dieses Datenmodell bietet Flexibilität und Skalierbarkeit für die Speicherung und Analyse von Daten aus verschiedenen Geräten.

Lassen Sie uns einige der Vorteile eines einheitlichen Datenmodells aufzählen:

  • Konsistenz: Die Daten haben in allen Systemen die gleiche Struktur und Semantik.
  • Skalierbarkeit: Es ist einfach, neue Datenquellen oder Gerätetypen hinzuzufügen.
  • Datenschutz: Einheitliche Authentifizierungs-, Autorisierungs- und Verschlüsselungsmechanismen.
  • Vereinfachung der Analyse: Die Daten können mit einheitlichen Tools analysiert werden.

Abstraktion der Ausrüstung

Die Geräteabstraktion ist ein wichtiges Prinzip der Systementwicklung, das es ermöglicht, die Logik der Datenverarbeitung von den physischen Eigenschaften der Geräte zu trennen. Dies ist besonders wichtig bei Systemen, die heterogene Geräte verwenden.

Geräteabstraktion bedeutet, dass das System mit Daten auf einer logischen Ebene arbeitet, die unabhängig von den physischen Geräten ist, auf denen die Daten gespeichert oder verarbeitet werden. Dies wird erreicht durch:

  • Vereinheitlichung der Schnittstellen: Ein einziger Weg, um auf Daten zuzugreifen, unabhängig von der Ausstattung.
  • Verstecken von Implementierungsdetails: Physikalischer Speicherort der Daten, Übertragungsprotokolle und andere technische Aspekte werden vor den Anwendungen verborgen.
  • Adapter: Konvertierung von Daten aus einem gerätespezifischen Format in ein einheitliches Format.

Implementierung der Geräteabstraktion

Betrachten wir nun die Umsetzung dieses Ansatzes in unserem System

Angenommen, wir haben ein IoT-Gerät, das Gasverbrauchsdaten sendet. Die implementierten Algorithmen ermöglichen uns das:

  • Empfangen der Daten vom Gerät über einen Adapter.
  • Konvertiert sie in eine channel_data Struktur.
  • Speichern Sie sie in einer Datenbank.
  • Bereitstellung des Zugriffs auf die Daten über API.

Für jeden Gerätetyp werden Adapter entwickelt, die gerätespezifische Protokolle verarbeiten und die Daten in ein einheitliches Format umwandeln.

Betrachten wir ein Beispiel:

Für ein IoT-Gerät können die Daten im JSON-Format vorliegen:

example.json
1
2
3
4
5
{
  "device_id": "sensor-123",
  "timestamp": 1739950861,
  "value": 42.5
}

Der Adapter konvertiert Daten in eine channel_data Struktur:

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

Datenanforderung:

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

Antwort:

Response example
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time":  1739950861
  }
]

Vorteile der Geräteabstraktion

  • Hardware-Unabhängigkeit: Anwendungen arbeiten mit Daten, ohne zu wissen, wo diese physisch gespeichert sind.
  • Flexibilität: Einfaches Hinzufügen neuer Geräte oder Ändern vorhandener Geräte.
  • Vereinfachung der Entwicklung: Entwickler arbeiten mit abstrakten Einheiten, ohne sich um Hardware-Details kümmern zu müssen.
  • Skalierbarkeit: Daten können auf verschiedenen Geräten gespeichert werden, aber das System arbeitet weiterhin auf einheitliche Weise.

Daten-Normalisierung

Bei der Datennormalisierung werden die Daten in einer Datenbank so organisiert, dass die Redundanz minimiert und die Datenintegrität verbessert wird. Im Zusammenhang mit der abstrakten Datenschicht spielt die Normalisierung eine Schlüsselrolle bei der Schaffung eines einheitlichen und effizienten Datenmodells, das für die Handhabung verschiedener Arten von Hardware und Datenquellen verwendet werden kann.

Bei der Datennormalisierung werden die Daten in logische Tabellen unterteilt und Beziehungen zwischen ihnen hergestellt, um sie zu normalisieren:

  • Eliminierung von doppelten Daten.
  • Vereinfachung der Datenpflege und -aktualisierung.
  • Sicherstellung der Datenintegrität.
  • Verbesserung der Abfrageleistung.
  • Das einheitliche Datenmodell des Systems ist auf die (dritte) normale Boyce-Codd-Form in Form von atomaren (skalaren) Werten reduziert. Einige Datenmodell-Entitäten verwenden zusammengesetzte Strukturen, um den Umgang mit seltenen Nicht-Standard-Attributen zu optimieren.

Vorteile der Normalisierung

  • Entfernt Redundanz: Die Daten werden an einem Ort gespeichert, wodurch die Redundanz verringert wird.
  • Datenkonsistenz: Die Aufrechterhaltung der Datenkonsistenz wird vereinfacht.
  • Flexibilität: Änderungen an der Datenstruktur können leicht vorgenommen werden.
  • Produktivität: Die Abfrageleistung wird (in den meisten Fällen) verbessert.

Normalisierung im Kontext der abstrakten Datenschicht

Die Normalisierung der Daten ist ein wichtiger Schritt bei der Entwicklung der abstrakten Datenschicht.

Es ermöglicht Ihnen:

  • Schaffung eines einheitlichen Datenmodells, das für verschiedene Arten von Hardware verwendet werden kann.
  • Eliminierung von Redundanz und Duplizierung von Daten.
  • Sicherstellung der Integrität und Konsistenz der Daten, unabhängig von ihrer Quelle.
  • Vereinfachung der Integration neuer Geräte und Systeme.
Zuletzt aktualisiert am