Monitoraggio degli aggiornamenti dello stato dei dispositivi in DynamoDB - Amazon DynamoDB

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.

ERDdegli aggiornamenti sullo stato del dispositivo. Mostra le entità: Dispositivo e Operatore.

Modelli di accesso

Questi sono i modelli di accesso che prenderemo in considerazione per monitorare gli aggiornamenti dello stato dei dispositivi.

  1. createLogEntryForSpecificDevice

  2. getLogsForSpecificDevice

  3. getWarningLogsForSpecificDevice

  4. getLogsForOperatorBetweenTwoDates

  5. getEscalatedLogsForSupervisor

  6. getEscalatedLogsWithSpecificStatusForSupervisor

  7. 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:

Tabella per memorizzare lo stato di più dispositivi. DeviceID è la chiave primaria e la data di aggiornamento dello stato è la chiave di ordinamento.

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.json in cui è stata modificata la chiave di ordinamento. State#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:

Dati di aggiornamento dello stato per il dispositivo, d #12345, recuperati utilizzando la chiave di ordinamento composita State #Date.

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.json D dove l'Operatorattributo è stato aggiunto alla DeviceStateLog tabella con dati di esempio.

DeviceStateLog progettazione di tabelle con l'attributo Operator per ottenere i log di un operatore tra date specifiche.

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:

GSIprogetta con OperatorID e Date come chiave di partizione e chiave di ordinamento per ottenere i log per un operatore specifico.

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

Interrogazione sull'GSIutilizzo di OperatorID e Date per ottenere i log di un operatore tra due date.

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.json dove l'EscalatedToattributo è stato aggiunto alla tabella con dati di esempio. DeviceStateLog Come accennato in precedenza, non tutti i log vengono inoltrati a un supervisore.

GSIprogetta con l' EscalatedTo attributo per ottenere tutti i log escalation per 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.

GSIdesign per ottenere tutti gli elementi con gli attributi EscalatedTo e State #Date.

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 su. GitHub

Tabella di base

Progettazione della tabella di base con metadati sullo stato del dispositivo, come ID dispositivo, stato e data.

GSI-1

GSI-1 design. Mostra la chiave e gli attributi primari: DeviceID, State #Date e State.

GSI-2

GSI-2 design. Mostra la chiave e gli attributi primari: DeviceID, Operator, Date e State.

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:

  1. Scarica No Workbench. SQL Per ulteriori informazioni, consulta Scarica No SQL Workbench per DynamoDB.

  2. Scarica il file di JSON schema sopra elencato, che è già nel formato del modello No SQL Workbench.

  3. Importa il file JSON dello schema in No SQL Workbench. Per ulteriori informazioni, consulta Importazione di un modello di dati esistente.

  4. Dopo averlo importato in NOSQL Workbench, puoi modificare il modello di dati. Per ulteriori informazioni, consulta Modifica di un modello di dati esistente.

  5. 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