Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Monitoraggio degli aggiornamenti dello stato dei dispositivi in DynamoDB
In questo caso d'uso viene descritto l'utilizzo di DynamoDB per monitorare gli aggiornamenti dello stato del dispositivo (o le modifiche allo stato del dispositivo) in DynamoDB.
Caso d'uso
Nei casi d'uso dell'IoT (ad esempio una fabbrica intelligente) molti dispositivi devono essere monitorati dagli operatori e inviano periodicamente il proprio stato o i log a un sistema di monitoraggio. Quando si verifica un problema con un dispositivo, lo stato del dispositivo cambia da normale ad avviso. Esistono diversi livelli o stati di log a seconda della gravità e del tipo di comportamento anomalo nel dispositivo. Il sistema incarica quindi un operatore di controllare il dispositivo e, se necessario, può segnalare il problema al proprio supervisore.
Alcuni modelli di accesso tipici per questo sistema includono:
-
Crea una voce di log per un dispositivo
-
Ottieni tutti i log per uno stato specifico del dispositivo, mostrando per primi i log più recenti
-
Ottieni tutti i log di un determinato operatore tra due date
-
Ottieni tutti i log inoltrati per un determinato supervisore
-
Ottieni tutti i log inoltrati con uno stato specifico del dispositivo per un determinato supervisore
-
Ottieni tutti i log inoltrati con uno stato specifico del dispositivo per un determinato supervisore e per una data specifica
Diagramma delle relazioni tra entità
Questo è il diagramma delle relazioni tra entità (ERD) che useremo per monitorare gli aggiornamenti sullo stato dei dispositivi.
Modelli di accesso
Questi sono i modelli di accesso che prenderemo in considerazione per monitorare gli aggiornamenti dello stato dei dispositivi.
-
createLogEntryForSpecificDevice
-
getLogsForSpecificDevice
-
getWarningLogsForSpecificDevice
-
getLogsForOperatorBetweenTwoDates
-
getEscalatedLogsForSupervisor
-
getEscalatedLogsWithSpecificStatusForSupervisor
-
getEscalatedLogsWithSpecificStatusForSupervisorForDate
Evoluzione della progettazione dello schema
Fase 1: Gestire i modelli di accesso 1 (createLogEntryForSpecificDevice
) e 2 (getLogsForSpecificDevice
)
L'unità di dimensionamento per un sistema di tracciamento dei dispositivi sarebbe costituita dai singoli dispositivi. In questo sistema, deviceID
identifica in modo univoco un dispositivo. Questo rende deviceID
un buon candidato per la chiave di partizione. Ogni dispositivo invia informazioni al sistema di tracciamento periodicamente (ad esempio ogni cinque minuti circa). Questo ordinamento rende la data un criterio di ordinamento logico e quindi la chiave di ordinamento. I dati di esempio in questo caso apparirebbero simili a:
Per recuperare le voci di log per un dispositivo specifico, possiamo eseguire un’operazione di query con la chiave di partizione DeviceID="d#12345"
.
Fase 2: Gestire il modello di accesso 3 (getWarningLogsForSpecificDevice
)
Poiché State
è un attributo non chiave, affrontare il pattern di accesso 3 con lo schema corrente richiederebbe un’espressione di filtro. In DynamoDB, le espressioni di filtro vengono applicate dopo la lettura dei dati utilizzando le espressioni delle condizioni chiave. Ad esempio, se dovessimo recuperare i registri degli avvisi per d#12345
, l'operazione di query con chiave di partizione DeviceID="d#12345"
leggerà quattro elementi dalla tabella precedente e poi filtrerà l'unico elemento con lo stato di avviso. Questo approccio non è efficiente su larga scala. Un'espressione di filtro può essere un buon modo per escludere gli elementi interrogati se il rapporto tra gli elementi esclusi è basso o la query viene eseguita di rado. Tuttavia, nei casi in cui molti elementi vengono recuperati da una tabella e la maggior parte degli elementi viene filtrata, possiamo continuare a sviluppare il design della tabella in modo che funzioni in modo più efficiente.
Cambiamo come gestire questo modello di accesso utilizzando chiavi di ordinamento composte. È possibile importare dati di esempio da DeviceStateLog_3.jsonState#Date
Questa chiave di ordinamento è la composizione degli attributi State
, #
e Date
. In questo caso, #
viene usato come un delimitatore. L'aspetto dei dati è ora il seguente:
Per recuperare solo i log degli avvisi per un dispositivo, la query diventa più mirata con questo schema. La condizione chiave per la query utilizza la chiave di partizione DeviceID="d#12345"
e la chiave di ordinamento State#Date begins_with
“WARNING”
. Questa interrogazione leggerà solo i tre elementi pertinenti con lo stato di avviso.
Fase 3: Gestire il modello di accesso 4 (getLogsForOperatorBetweenTwoDates
)
È possibile importare DeviceStateLog_4.jsonOperator
attributo è stato aggiunto alla DeviceStateLog
tabella con dati di esempio.
Poiché Operator
attualmente non è una chiave di partizione, non è possibile eseguire una ricerca diretta chiave-valore su questa tabella basata su OperatorID
. Dovremo creare una nuova collezione di articoli con un indice secondario globale su OperatorID
. Il modello di accesso richiede una ricerca basata sulle date, quindi Date è l'attributo chiave di ordinamento per l'indice secondario globale () GSI. Ecco come appare GSI ora:
Per il pattern di accesso 4 (getLogsForOperatorBetweenTwoDates
), puoi interrogarlo GSI con la chiave di partizione e la chiave di ordinamento tra OperatorID=Liz
e. Date
2020-04-11T05:58:00
2020-04-24T14:50:00
Fase 4: Gestire i modelli di accesso 5 (getEscalatedLogsForSupervisor
), 6 (getEscalatedLogsWithSpecificStatusForSupervisor
) e 7 (getEscalatedLogsWithSpecificStatusForSupervisorForDate
)
Useremo un indice sparso per affrontare questi modelli di accesso.
Per impostazione predefinita, gli indici secondari globali sono sparsi, quindi solo gli elementi della tabella di base che contengono gli attributi della chiave primaria dell'indice verranno effettivamente visualizzati nell'indice. Questo è un altro modo per escludere gli elementi che non sono rilevanti per il modello di accesso da modellare.
Puoi importare DeviceStateLog_6.jsonEscalatedTo
attributo è stato aggiunto alla tabella con dati di esempio. DeviceStateLog
Come accennato in precedenza, non tutti i log vengono inoltrati a un supervisore.
Ora puoi creare una nuova chiave GSI where è la chiave di partizione e EscalatedTo
State#Date
è la chiave di ordinamento. Nota che solo gli elementi che hanno entrambi gli attributi EscalatedTo
e State#Date
vengono visualizzati nell'indice.
Gli altri modelli di accesso sono riassunti come segue:
Tutti i modelli di accesso e il modo in cui la progettazione dello schema li affronta sono riassunti nella tabella seguente:
Modello di accesso | Tabella base//GSILSI | Operazione | Valore della chiave di partizione | Valore della chiave di ordinamento | Altre condizioni/filtri |
---|---|---|---|---|---|
createLogEntryForSpecificDevice | Tabella di base | PutItem | ID dispositivo = deviceId | State#Date=state#date | |
getLogsForSpecificDevice | Tabella di base | Query | ID dispositivo = deviceId | State#Date begins_with "state1#" | ScanIndexForward = Falso |
getWarningLogsForSpecificDevice | Tabella di base | Query | ID dispositivo = deviceId | Lo stato #Date inizia_con "» WARNING | |
getLogsForOperatorBetweenTwoDates | GSI-1 | Query | Operatore= operatorName | Data compresa tra data1 e data2 | |
getEscalatedLogsForSupervisor | GSI-2 | Query | EscalatedTo=supervisorName | ||
getEscalatedLogsWithSpecificStatusForSupervisor | GSI-2 | Query | EscalatedTo=supervisorName | State#Date begins_with "state1#" | |
getEscalatedLogsWithSpecificStatusForSupervisorForDate | GSI-2 | Query | EscalatedTo=supervisorName | State#Date begins_with "state1#date1" |
Schema finale
Di seguito sono riportate le progettazioni dello schema finale. Per scaricare questo schema come JSON file, consulta Esempi di DynamoDB
Tabella di base
GSI-1
GSI-2
Utilizzo di No SQL Workbench con questo schema
Puoi importare questo schema finale in No SQL Workbench, uno strumento visivo che fornisce funzionalità di modellazione, visualizzazione dei dati e sviluppo di query per DynamoDB, per esplorare e modificare ulteriormente il tuo nuovo progetto. Per iniziare, segui queste fasi:
-
Scarica No Workbench. SQL Per ulteriori informazioni, consulta Scarica No SQL Workbench per DynamoDB.
-
Scarica il file di JSON schema sopra elencato, che è già nel formato del modello No SQL Workbench.
-
Importa il file JSON dello schema in No SQL Workbench. Per ulteriori informazioni, consulta Importazione di un modello di dati esistente.
-
Dopo averlo importato in NOSQL Workbench, puoi modificare il modello di dati. Per ulteriori informazioni, consulta Modifica di un modello di dati esistente.
-
Per visualizzare il modello di dati, aggiungere dati di esempio o importare dati di esempio da un CSV file, utilizza la funzionalità Data Visualizer di No Workbench. SQL