Livello dati astratto
Il livello dati astratto, il modello dati unificato del sistema, l'astrazione delle apparecchiature e la normalizzazione dei dati che disaccoppiano le applicazioni dall'archiviazione fisica.
Il livello dati astratto si colloca tra l’archiviazione fisica dei dati e le applicazioni che li utilizzano. Astrae l’implementazione fisica e le specificità dell’hardware, fornendo un’unica interfaccia per lavorare con i dati. Offre:
- Indipendenza dall’hardware: i dati sono archiviati su dispositivi diversi (server, cloud, dispositivi IoT), ma l’applicazione interagisce con essi attraverso un’unica interfaccia.
- Sviluppo più semplice: gli sviluppatori lavorano con entità astratte senza preoccuparsi dei dettagli dell’archiviazione fisica.
- Flessibilità: le modifiche alla struttura fisica dei dati (per esempio, la migrazione al cloud) non influiscono sulle applicazioni.
Modello dati unificato
Il sistema utilizza un modello dati unificato adattato a diversi tipi di apparecchiature, che consente di lavorare con esse in modo uniforme, indipendentemente dalla loro origine o dal tipo di apparecchiatura. Comprende strutture dati comuni, regole di elaborazione uniformi e coerenza semantica dei dati su tutti i sistemi e i sottosistemi.
Per esempio, un modello dati unificato del sistema comprende:
- Entità: apparecchiature, canali, sessioni, unità e parametri di riferimento.
- Relazioni: un’apparecchiatura possiede dei canali, i canali sono correlati ai dati e i dati sono correlati alle sessioni.
- Attributi: per ciascuna entità sono definiti degli attributi (per esempio,
equipment.serial_numberechannel_data.value).
Struttura del modello dati unificato del sistema
Il modello dati unificato del sistema è una struttura per l’archiviazione e la gestione dei dati relativi ad apparecchiature, canali, sessioni e misurazioni. Esaminiamo ciascuna tabella e la sua funzione, nonché le relazioni tra di esse.
Tabella channel_data
Questa tabella memorizza i dati ricevuti dai canali delle apparecchiature all’interno di sessioni specifiche.
| Campo | Tipo | Descrizione |
|---|---|---|
id | bigint | Identificatore univoco del record (chiave primaria). |
equipment_id | bigint | Riferimento all’apparecchiatura (equipment.id). |
seance_id | bigint | Riferimento alla sessione (seances.id). |
channel_id | bigint | Riferimento al canale (channels.id). |
unit_id | bigint | Riferimento all’unità di misura (units.id). |
archive_type_id | integer | Riferimento al tipo di archivio (referenceparameters.id). |
event_time | integer | L’ora dell’evento (per esempio, un timestamp). |
value | character varying(100) | Il valore ricevuto dal canale. |
created_at | timestamp(6) without time zone | Ora di creazione del record. |
updated_at | timestamp(6) without time zone | Ora dell’ultimo aggiornamento del record. |
Relazioni:
- La chiave esterna
unit_idfa riferimento alla tabellaunits. - La chiave esterna
archive_type_idfa riferimento alla tabellareferenceparameters. - La chiave esterna
equipment_idfa riferimento alla tabellaequipment. - La chiave esterna
channel_idfa riferimento alla tabellachannels. - La chiave esterna
seance_idfa riferimento alla tabellaseances.
Tabella units
Questa tabella memorizza le unità di misura utilizzate per i dati dei canali.
| Campo | Tipo | Descrizione |
|---|---|---|
id | bigint | Identificatore univoco del record (chiave primaria). |
name | character varying(30) | Nome dell’unità di misura. |
varname | character varying(30) | Nome breve di variabile per l’unità di misura. |
description | character varying(100) | Descrizione dell’unità di misura. |
conversion_factor | double precision | Fattore di conversione per un’unità di misura. |
rounding | smallint | Numero di cifre decimali a cui arrotondare. |
synonyms | character varying[] | Array di sinonimi per l’unità di misura. |
created_at | timestamp(6) without time zone | Ora di creazione del record. |
updated_at | timestamp(6) without time zone | Ora dell’ultimo aggiornamento del record. |
Tabella referenceparameters
Questa tabella memorizza parametri di riferimento quali i tipi di archivio o altri qualificatori.
| Campo | Tipo | Descrizione |
|---|---|---|
id | bigint | Identificatore univoco del record (chiave primaria). |
name | character varying(30) | Il nome dell’unità di misura. |
varname | character varying(30) | Nome breve di variabile per l’unità di misura. |
description | character varying(100) | Descrizione dell’unità di misura. |
parent_id | integer | Un riferimento al parametro padre (gerarchia). |
referencemodel_id | integer | Riferimento al modello di directory. |
created_at | timestamp(6) without time zone | Ora di creazione del record. |
updated_at | timestamp(6) without time zone | Ora dell’ultimo aggiornamento del record. |
deleted_at | timestamp(6) without time zone | Ora di eliminazione del record (eliminazione logica). |
Relazioni:
- La chiave esterna
parent_idfa riferimento alla stessa tabella (referenceparameters.id), consentendo di costruire gerarchie.
Tabella equipment
| Campo | Tipo | Descrizione |
|---|---|---|
id | bigint | Identificatore univoco del record (chiave primaria). |
equipment_type_id | bigint | Riferimento al tipo di apparecchiatura. |
serial_number | character varying(25) | Numero di serie dell’apparecchiatura. |
manufacture_date | timestamp(6) without time zone | La data di fabbricazione dell’apparecchiatura. |
installation_date | timestamp(6) without time zone | Data di installazione dell’apparecchiatura. |
program_version | character varying(100) | Versione del software dell’apparecchiatura. |
created_at | timestamp(6) without time zone | Ora di creazione del record. |
updated_at | timestamp(6) without time zone | Ora dell’ultimo aggiornamento del record. |
Tabella channels
Questa tabella memorizza le informazioni sui canali delle apparecchiature.
| Campo | Tipo | Descrizione |
|---|---|---|
id | bigint | Identificatore univoco del record (chiave primaria). |
equipment_type_id | bigint | Riferimento al tipo di apparecchiatura (equipment_type.id). |
unit_id | bigint | Riferimento all’unità di misura (units.id). |
name | character varying(100) | Nome del canale. |
varname | character varying(20) | Nome breve di variabile per il canale. |
created_at | timestamp(6) without time zone | Ora di creazione del record. |
updated_at | timestamp(6) without time zone | Ora dell’ultimo aggiornamento del record. |
Relazioni:
- La chiave esterna
equipment_type_idfa riferimento alla tabellaequipment_type. - La chiave esterna
unit_idfa riferimento alla tabellaunits.
Tabella seances
Questa tabella memorizza le informazioni sulle sessioni di comunicazione dell’apparecchiatura.
| Campo | Tipo | Descrizione |
|---|---|---|
id | bigint | Identificatore univoco del record (chiave primaria). |
telemetry_id | bigint | Riferimento alla telemetria (telemetry.id). |
event_time | integer | L’ora dell’evento. |
evtid | smallint | L’identificatore dell’evento. |
trycnt | smallint | Il numero di tentativi. |
tryfl | character varying(12) | Il flag del tentativo. |
state | smallint | Stato della sessione. |
btm | integer | Carica della batteria. |
rssi | integer | Intensità del segnale (se utilizzata). |
created_at | timestamp(6) without time zone | Ora di creazione del record. |
updated_at | timestamp(6) without time zone | Ora dell’ultimo aggiornamento del record. |
Struttura generale e relazioni
Tabella principale — channel_data, che collega i dati dei canali alle apparecchiature, alle sessioni e alle unità.
Tabelle di relazione:
units— unità di misura.referenceparameters— tipi di archivio e altri qualificatori.
Tabelle delle apparecchiature:
equipment— informazioni sulle apparecchiature.channels— canali delle apparecchiature.
Tabella delle sessioni — seances, che memorizza le informazioni sulle sessioni di comunicazione.
Esempio di utilizzo:
- I dati dei canali (
channel_data) provengono dalle apparecchiature (equipment) all’interno di sessioni specifiche (seances). - Ogni canale (
channels) ha la propria unità di misura (units). - Il tipo di archivio (
referenceparameters) determina come i dati devono essere archiviati o elaborati.
Vantaggi di un modello unificato
Questo modello dati offre la flessibilità e la scalabilità necessarie per archiviare e analizzare dati provenienti da apparecchiature diverse.
Alcuni dei vantaggi di un modello dati unificato sono:
- Coerenza: i dati hanno la stessa struttura e la stessa semantica in tutti i sistemi.
- Scalabilità: è facile aggiungere nuove fonti di dati o nuovi tipi di apparecchiature.
- Protezione dei dati: meccanismi unificati di autenticazione, autorizzazione e cifratura.
- Analisi più semplice: i dati possono essere analizzati con strumenti unificati.
Astrazione delle apparecchiature
L’astrazione delle apparecchiature è un principio progettuale fondamentale del sistema che separa la logica di gestione dei dati dalle caratteristiche fisiche delle apparecchiature. Questo aspetto è particolarmente importante nei sistemi che utilizzano dispositivi eterogenei.
L’astrazione delle apparecchiature significa che il sistema gestisce i dati a un livello logico indipendente dai dispositivi fisici su cui i dati sono archiviati o elaborati. Ciò si ottiene mediante:
- Unificazione delle interfacce: un’unica modalità di accesso ai dati, indipendentemente dall’apparecchiatura.
- Occultamento dei dettagli implementativi: la collocazione fisica dei dati, i protocolli di trasmissione e altri aspetti tecnici sono nascosti alle applicazioni.
- Adattatori: conversione dei dati da un formato specifico dell’apparecchiatura a un formato unificato.
Implementazione dell’astrazione delle apparecchiature
L’esempio seguente mostra come questo approccio sia implementato nel nostro sistema. Traccia i dati da un dispositivo IoT attraverso un adattatore, all’interno del modello dati unificato, e in uscita tramite l’API.
Si consideri un dispositivo IoT che invia dati sul consumo di gas. Gli algoritmi implementati ci consentono di:
- Ricevere i dati dal dispositivo attraverso un adattatore.
- Convertirli in una struttura
channel_data. - Archiviarli in un database.
- Fornire accesso ai dati tramite un’API.
Per ciascun tipo di apparecchiatura vengono creati degli adattatori che gestiscono i protocolli specifici del dispositivo e convertono i dati in un formato unificato.
Esempio: trasformazione dei dati
Per un dispositivo IoT, i dati possono arrivare in formato JSON:
{
"device_id": "sensor-123",
"timestamp": 1739950861,
"value": 42.5
}L’adattatore converte i dati in una struttura 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);Richiesta dei dati:
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3Risposta:
[
{
"id": 123,
"equipment_id": 1,
"seance_id": 2,
"channel_id": 3,
"archive_type_id": 4,
"value": 42.5,
"event_time": 1739950861
}
]Vantaggi dell’astrazione delle apparecchiature
- Indipendenza dall’hardware: le applicazioni lavorano con i dati senza sapere dove questi risiedano fisicamente.
- Flessibilità: si aggiungono facilmente nuovi dispositivi o si modificano quelli esistenti.
- Sviluppo più semplice: gli sviluppatori lavorano con entità astratte senza preoccuparsi dei dettagli hardware.
- Scalabilità: i dati possono essere archiviati su dispositivi diversi, ma il sistema continua a funzionare in modo uniforme.
Normalizzazione dei dati
La normalizzazione dei dati è il processo di organizzazione dei dati in un database in modo da ridurre al minimo la ridondanza e migliorare l’integrità dei dati. Nel contesto del livello dati astratto, la normalizzazione svolge un ruolo fondamentale nella creazione di un modello dati unificato ed efficiente, utilizzabile per gestire diversi tipi di apparecchiature e fonti di dati.
La normalizzazione dei dati suddivide i dati in tabelle logiche e stabilisce relazioni tra di esse al fine di:
- Eliminare i dati duplicati.
- Semplificare la manutenzione e gli aggiornamenti dei dati.
- Garantire l’integrità dei dati.
- Migliorare le prestazioni delle interrogazioni.
Il modello dati unificato del sistema è ridotto alla (terza) forma normale di Boyce-Codd in termini di valori atomici (scalari). Alcune entità del modello dati utilizzano strutture composite per ottimizzare la gestione di attributi rari e non standard.
Vantaggi della normalizzazione
- Elimina la ridondanza: i dati sono archiviati in un unico luogo, riducendo la ridondanza.
- Coerenza dei dati: il mantenimento della coerenza dei dati è semplificato.
- Flessibilità: è facile apportare modifiche alla struttura dei dati.
- Prestazioni: le prestazioni delle interrogazioni migliorano (nella maggior parte dei casi).
La normalizzazione nel contesto del livello dati astratto
La normalizzazione dei dati è un passaggio importante nella progettazione del livello dati astratto.
Essa consente di:
- Creare un modello dati unificato utilizzabile per gestire diversi tipi di apparecchiature.
- Eliminare la ridondanza e la duplicazione dei dati.
- Garantire l’integrità e la coerenza dei dati, indipendentemente dalla loro origine.
- Semplificare l’integrazione di nuovi dispositivi e sistemi.
Argomenti correlati
Questa pagina è stata utile?
Grazie per il tuo feedback!