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_number e channel_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.

CampoTipoDescrizione
idbigintIdentificatore univoco del record (chiave primaria).
equipment_idbigintRiferimento all’apparecchiatura (equipment.id).
seance_idbigintRiferimento alla sessione (seances.id).
channel_idbigintRiferimento al canale (channels.id).
unit_idbigintRiferimento all’unità di misura (units.id).
archive_type_idintegerRiferimento al tipo di archivio (referenceparameters.id).
event_timeintegerL’ora dell’evento (per esempio, un timestamp).
valuecharacter varying(100)Il valore ricevuto dal canale.
created_attimestamp(6) without time zoneOra di creazione del record.
updated_attimestamp(6) without time zoneOra dell’ultimo aggiornamento del record.

Relazioni:

  • La chiave esterna unit_id fa riferimento alla tabella units.
  • La chiave esterna archive_type_id fa riferimento alla tabella referenceparameters.
  • La chiave esterna equipment_id fa riferimento alla tabella equipment.
  • La chiave esterna channel_id fa riferimento alla tabella channels.
  • La chiave esterna seance_id fa riferimento alla tabella seances.

Tabella units

Questa tabella memorizza le unità di misura utilizzate per i dati dei canali.

CampoTipoDescrizione
idbigintIdentificatore univoco del record (chiave primaria).
namecharacter varying(30)Nome dell’unità di misura.
varnamecharacter varying(30)Nome breve di variabile per l’unità di misura.
descriptioncharacter varying(100)Descrizione dell’unità di misura.
conversion_factordouble precisionFattore di conversione per un’unità di misura.
roundingsmallintNumero di cifre decimali a cui arrotondare.
synonymscharacter varying[]Array di sinonimi per l’unità di misura.
created_attimestamp(6) without time zoneOra di creazione del record.
updated_attimestamp(6) without time zoneOra dell’ultimo aggiornamento del record.

Tabella referenceparameters

Questa tabella memorizza parametri di riferimento quali i tipi di archivio o altri qualificatori.

CampoTipoDescrizione
idbigintIdentificatore univoco del record (chiave primaria).
namecharacter varying(30)Il nome dell’unità di misura.
varnamecharacter varying(30)Nome breve di variabile per l’unità di misura.
descriptioncharacter varying(100)Descrizione dell’unità di misura.
parent_idintegerUn riferimento al parametro padre (gerarchia).
referencemodel_idintegerRiferimento al modello di directory.
created_attimestamp(6) without time zoneOra di creazione del record.
updated_attimestamp(6) without time zoneOra dell’ultimo aggiornamento del record.
deleted_attimestamp(6) without time zoneOra di eliminazione del record (eliminazione logica).

Relazioni:

  • La chiave esterna parent_id fa riferimento alla stessa tabella (referenceparameters.id), consentendo di costruire gerarchie.

Tabella equipment

CampoTipoDescrizione
idbigintIdentificatore univoco del record (chiave primaria).
equipment_type_idbigintRiferimento al tipo di apparecchiatura.
serial_numbercharacter varying(25)Numero di serie dell’apparecchiatura.
manufacture_datetimestamp(6) without time zoneLa data di fabbricazione dell’apparecchiatura.
installation_datetimestamp(6) without time zoneData di installazione dell’apparecchiatura.
program_versioncharacter varying(100)Versione del software dell’apparecchiatura.
created_attimestamp(6) without time zoneOra di creazione del record.
updated_attimestamp(6) without time zoneOra dell’ultimo aggiornamento del record.

Tabella channels

Questa tabella memorizza le informazioni sui canali delle apparecchiature.

CampoTipoDescrizione
idbigintIdentificatore univoco del record (chiave primaria).
equipment_type_idbigintRiferimento al tipo di apparecchiatura (equipment_type.id).
unit_idbigintRiferimento all’unità di misura (units.id).
namecharacter varying(100)Nome del canale.
varnamecharacter varying(20)Nome breve di variabile per il canale.
created_attimestamp(6) without time zoneOra di creazione del record.
updated_attimestamp(6) without time zoneOra dell’ultimo aggiornamento del record.

Relazioni:

  • La chiave esterna equipment_type_id fa riferimento alla tabella equipment_type.
  • La chiave esterna unit_id fa riferimento alla tabella units.

Tabella seances

Questa tabella memorizza le informazioni sulle sessioni di comunicazione dell’apparecchiatura.

CampoTipoDescrizione
idbigintIdentificatore univoco del record (chiave primaria).
telemetry_idbigintRiferimento alla telemetria (telemetry.id).
event_timeintegerL’ora dell’evento.
evtidsmallintL’identificatore dell’evento.
trycntsmallintIl numero di tentativi.
tryflcharacter varying(12)Il flag del tentativo.
statesmallintStato della sessione.
btmintegerCarica della batteria.
rssiintegerIntensità del segnale (se utilizzata).
created_attimestamp(6) without time zoneOra di creazione del record.
updated_attimestamp(6) without time zoneOra dell’ultimo aggiornamento del record.

Struttura generale e relazioni

Tabella principalechannel_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 sessioniseances, 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:

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

L’adattatore converte i dati in una struttura 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);

Richiesta dei dati:

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

Risposta:

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

Ultimo aggiornamento il

Questa pagina è stata utile?