Surveillance des mises à jour du statut d’un appareil dans DynamoDB - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Surveillance des mises à jour du statut d’un appareil dans DynamoDB

Ce cas d'utilisation décrit l'utilisation de DynamoDB pour surveiller les mises à jour du statut d’un appareil (ou les changements d'état d’un appareil) dans DynamoDB.

Cas d’utilisation

Dans les cas d'utilisation IoT (une fabrique intelligente, par exemple), de nombreux appareils doivent être surveillés par les opérateurs, qui envoient régulièrement leur statut ou leurs journaux à un système de surveillance. En cas de problème avec un appareil, son statut passe de normal à warning. Il existe différents niveaux ou statuts de journalisation en fonction de la gravité et du type de comportement anormal de l'appareil. Le système désigne ensuite un opérateur chargé de vérifier l'appareil et celui-ci peut faire remonter le problème à son superviseur si nécessaire.

Les modèles d’accès types pour ce système incluent :

  • Créer une entrée de journal pour un appareil

  • Obtenir tous les journaux pour un état d'appareil spécifique en affichant d'abord les journaux les plus récents

  • Obtenir tous les journaux pour un opérateur donné entre deux dates

  • Obtenir tous les journaux qui ont été remontés pour un superviseur donné

  • Obtenir tous les journaux qui ont été remontés avec un état d'appareil spécifique pour un superviseur donné

  • Obtenir tous les journaux qui ont été remontés avec un état d'appareil spécifique pour un superviseur donné à une date spécifique

Diagramme des relations entre entités

Il s'agit du diagramme des relations entre les entités (ERD) que nous utiliserons pour surveiller les mises à jour de l'état des appareils.

ERDdes mises à jour de l'état de l'appareil. Il montre les entités : appareil et opérateur.

Modèles d'accès

Voici les modèles d’accès que nous allons prendre en compte pour surveiller les mises à jour du statut d’un appareil.

  1. createLogEntryForSpecificDevice

  2. getLogsForSpecificDevice

  3. getWarningLogsForSpecificDevice

  4. getLogsForOperatorBetweenTwoDates

  5. getEscalatedLogsForSupervisor

  6. getEscalatedLogsWithSpecificStatusForSupervisor

  7. getEscalatedLogsWithSpecificStatusForSupervisorForDate

Évolution de la conception du schéma

Étape 1 : Traitement des modèles d'accès 1 (createLogEntryForSpecificDevice) et 2 (getLogsForSpecificDevice)

L'unité de mise à l'échelle d'un système de suivi des appareils est constituée d’appareils individuels. Dans ce système, un deviceID identifie un appareil de manière unique. deviceID est donc un bon candidat pour la clé de partition. Chaque appareil envoie régulièrement des informations au système de suivi (toutes les cinq minutes environ). Cet ordre fait de la date un critère de tri logique et, par conséquent, la clé de tri. Dans ce cas, les exemples de données ressembleraient à ce qui suit :

Tableau pour enregistrer l'état de plusieurs appareils. DeviceID est la clé primaire et la date de mise à jour du statut est la clé de tri.

Pour extraire les entrées de journal d’un appareil spécifique, il est possible d’exécuter une opération query avec la clé de partition DeviceID="d#12345".

Étape 2 : Traitement du modèle d'accès 3 (getWarningLogsForSpecificDevice)

Étant donné que State est un attribut non clé, le traitement du modèle d'accès 3 avec le schéma actuel nécessiterait une expression de filtre. Dans DynamoDB, les expressions de filtre sont appliquées après la lecture des données à l'aide d'expressions de condition de clé. Par exemple, si nous devions extraire les journaux d'avertissement pour d#12345, l'opération query avec la clé de partition DeviceID="d#12345" lirait quatre éléments du tableau ci-dessus, puis filtrerait le seul élément avec le statut warning. Cette approche n'est pas efficace à grande échelle. L’expression de filtre peut être un bon moyen d'exclure les éléments interrogés si le ratio des éléments exclus est faible ou si la requête est rarement exécutée. Toutefois, dans les cas où de nombreux éléments sont extraits d'une table et que la majorité d'entre eux sont filtrés, nous pouvons continuer à faire évoluer la conception de notre table afin qu'elle s’exécute plus efficacement.

Nous allons changer la façon de traiter ce modèle d'accès en utilisant des clés de tri composites. Vous pouvez importer des exemples de données depuis DeviceStateLog_3.json où la clé de tri est remplacée par. State#Date Cette clé de tri est la composition des attributs State, # et Date. Dans cet exemple, # est utilisé comme délimiteur. Les données ressemblent désormais à ce qui suit :

Données de mise à jour de l'état du périphérique, d #12345, extraites à l'aide de la clé de tri composite State #Date.

Pour extraire uniquement les journaux d'avertissement d'un appareil, la requête devient plus ciblée avec ce schéma. La condition de clé pour la requête utilise la clé de partition DeviceID="d#12345" et la clé de tri State#Date begins_with “WARNING”. Cette requête ne lira que les trois éléments pertinents avec l’état warning.

Étape 3 : Traitement du modèle d'accès 4 (getLogsForOperatorBetweenTwoDates)

Vous pouvez importer DeviceStateLog_4.json D où l'Operatorattribut a été ajouté à la DeviceStateLog table avec des exemples de données.

DeviceStateLog conception de table avec attribut Operator pour obtenir les journaux d'un opérateur entre des dates spécifiques.

Étant donné que Operator n'est pas une clé de partition actuellement, il n'existe aucun moyen d'effectuer une recherche directe clé-valeur dans cette table en fonction de OperatorID. Nous devrons créer une collection d'éléments avec un index secondaire global sur OperatorID. Le modèle d'accès nécessite une recherche basée sur les dates. La date est donc l'attribut clé de tri pour l'index secondaire global (GSI). Voici à quoi ressemble le GSI présent :

GSIconception avec OperatorID et Date comme clé de partition et clé de tri pour obtenir les journaux d'un opérateur spécifique.

Pour le modèle d'accès 4 (getLogsForOperatorBetweenTwoDates), vous pouvez l'interroger GSI avec la clé de partition OperatorID=Liz et trier la clé Date entre 2020-04-11T05:58:00 et2020-04-24T14:50:00.

Interrogation sur GSI l'utilisation de OperatorID et Date pour obtenir les journaux d'un opérateur entre deux dates.

Étape 4 : Traitement des modèles d'accès 5 (getEscalatedLogsForSupervisor), 6 (getEscalatedLogsWithSpecificStatusForSupervisor) et 7 (getEscalatedLogsWithSpecificStatusForSupervisorForDate)

Nous utiliserons un index fragmenté pour traiter ces modèles d'accès.

Les index secondaires globaux sont fragmentés par défaut, de sorte que seuls les éléments de la table de base contenant les attributs de clé primaire de l'index apparaîtront réellement dans l'index. Il s'agit d'une autre façon d'exclure les éléments qui ne sont pas pertinents pour le modèle d'accès modélisé.

Vous pouvez importer DeviceStateLog_6.json où l'EscalatedToattribut a été ajouté à la DeviceStateLog table avec des exemples de données. Comme mentionné précédemment, tous les journaux ne font pas l’objet d’une remontée à un superviseur.

GSIconception avec l' EscalatedTo attribut permettant d'obtenir tous les journaux escaladés pour un superviseur.

Vous pouvez maintenant créer un nouvel emplacement GSI où EscalatedTo se trouvent la clé de partition et State#Date la clé de tri. Notez que seuls les éléments qui possèdent à la fois les attributs EscalatedTo et State#Date apparaissent dans l'index.

GSIconception pour obtenir tous les objets dotés des attributs EscalatedTo et State #Date.

Les autres modèles d'accès sont résumés comme suit :

Tous les modèles d'accès et la façon dont ils sont traités par la conception du schéma sont résumés dans le tableau ci-dessous :

Modèle d'accès Table de base//GSILSI Opération Valeur de la clé de partition Valeur de clé de tri Autres conditions/filtres
createLogEntryForSpecificDevice Table de base PutItem Identifiant de l'appareil = deviceId State#Date=state#date
getLogsForSpecificDevice Table de base Requête Identifiant de l'appareil = deviceId State#Date begins_with "state1#" ScanIndexForward = Faux
getWarningLogsForSpecificDevice Table de base Requête Identifiant de l'appareil = deviceId État #Date commence_par « » WARNING
getLogsForOperatorBetweenTwoDates GSI-1 Requête Opérateur = operatorName Date between date1 and date2
getEscalatedLogsForSupervisor GSI-2 Requête EscalatedTo=supervisorName
getEscalatedLogsWithSpecificStatusForSupervisor GSI-2 Requête EscalatedTo=supervisorName State#Date begins_with "state1#"
getEscalatedLogsWithSpecificStatusForSupervisorForDate GSI-2 Requête EscalatedTo=supervisorName State#Date begins_with "state1#date1"

Schéma final

Voici les conceptions du schéma final. Pour télécharger cette conception de schéma sous forme de JSON fichier, consultez les exemples DynamoDB sur. GitHub

Table de base

Conception de table de base avec des métadonnées d'état de l'appareil, telles que l'identifiant, l'état et la date de l'appareil.

GSI-1

GSI-1 modèle. Il affiche la clé primaire et les attributs : DeviceID, State #Date et State.

GSI-2

GSI2 modèles. Il indique la clé primaire et les attributs : DeviceID, Operator, Date et State.

Utilisation de No SQL Workbench avec cette conception de schéma

Vous pouvez importer ce schéma final dans No SQL Workbench, un outil visuel qui fournit des fonctionnalités de modélisation, de visualisation des données et de développement de requêtes pour DynamoDB, afin d'explorer et de modifier davantage votre nouveau projet. Pour commencer, procédez comme suit :

  1. Téléchargez No SQL Workbench. Pour de plus amples informations, veuillez consulter Télécharger No SQL Workbench pour DynamoDB.

  2. Téléchargez le fichier de JSON schéma indiqué ci-dessus, qui est déjà au format du modèle No SQL Workbench.

  3. Importez le fichier de JSON schéma dans No SQL Workbench. Pour de plus amples informations, veuillez consulter Importation d'un modèle de données existant.

  4. Une fois que vous avez importé dans NOSQL Workbench, vous pouvez modifier le modèle de données. Pour de plus amples informations, veuillez consulter Modification d'un modèle de données existant.

  5. Pour visualiser votre modèle de données, ajouter des exemples de données ou importer des exemples de données à partir d'un CSV fichier, utilisez la fonction de visualisation de données de No SQL Workbench.