Stockage des données dans ThingWorx
ThingWorx fournit des entités et des méthodes pour le stockage de données. Il est ainsi possible de stocker des données dans des tables de données, des propriétés d'objet, des flux, des flux de valeurs et des tables de configuration.
Lorsque vous développez votre application, vous devez prendre en considération la façon dont ThingWorx gère le stockage des données. Choisir le mode de stockage approprié est essentiel, car il impacte le résultat du projet, son évolutivité, sa fiabilité, ainsi que l'expérience de l'utilisateur.
La section suivante décrit les options de stockage du modèle ThingWorx :
Tables de données
Utilisez une table de données si le nombre de lignes de données est inférieur à 100 000.
Utilisez-la pour les jeux de données et les tables de recherche statiques. Pour les jeux de données hautement dynamiques et volumineux, utilisez une base de données relationnelle connectée via un modèle d'objet Database.
* 
Utilisez une base de données relationnelle pour les requêtes et les jointures complexes.
Utilisez une table de données pour les requêtes et le stockage basés sur des clés, et pour faciliter les mises à jour et suppressions en fonction de la clé primaire.
Par exemple : vous pouvez stocker les informations d'inventaire d'un distributeur automatique connecté intelligent, où chaque élément de l'inventaire est une clé primaire. Vous pouvez également utiliser des tables de données pour stocker des informations concernant les programmes d'irrigation disponibles pour un appareil de gestion des cultures, où chaque programme d'irrigation est une ligne avec une clé primaire.
Pour manipuler ou interroger les données ligne par ligne, utilisez des tables de données.
Utilisez des index lorsque vous vous servez de tables de données.
* 
Les tables de données ne prennent pas en charge l'écriture à grande vitesse, car elles ne disposent pas d'un mécanisme de mise en file d'attente comme les flux et les flux de valeurs.
Propriété d'objet
Utilisez les propriétés d'objet pour stocker les données relatives à un objet dans ThingWorx. Les propriétés offrent les options de stockage de données suivantes :
Lecture seule : utilisez l'option de lecture seule pour les valeurs statiques qui ne doivent pas être modifiées à l'exécution. Toutefois, si vous le souhaitez, vous pouvez modifier la valeur par défaut.
Persistance : utilisez l'option de persistance si vous souhaitez que la valeur de la propriété soit enregistrée même après un redémarrage du serveur ThingWorx, et si la valeur de la propriété peut être modifiée à l'exécution.
Journalisation : utilisez l'option de journalisation pour les propriétés dont les valeurs sont constamment mises à jour. Il s'agit de données de séries temporelles qui peuvent être stockées dans des flux de valeurs.
* 
N'utilisez pas de propriétés explicites pour stocker les données historiques. Utilisez plutôt des flux ou des flux de valeurs.
Flux
Utilisez des flux pour consigner les événements de processus ponctuels ou les activités de vos appareils.
Par exemple, créez un flux pour consigner les problèmes relatifs aux activités de votre appareil, ou pour enregistrer le moment où votre appareil se déconnecte de la plateforme ThingWorx et s'y reconnecte. Les flux sont optimisés pour l'écriture à grande vitesse et ils disposent d'un système de cache configurable.
Flux de valeurs
Utilisez les flux de valeurs pour stocker les données de séries temporelles obtenues auprès des propriétés d'un objet.
Avec les flux, des tables de données sont créées. Les flux de valeurs évitent la création de tables de données contenant peu de données.
Cet accès (centré sur les objets) aux données dans un flux de valeurs fournit une prise en charge intégrée des architectures mutualisées.
Si vous utilisez un système de gestion de base de données relationnelle (PostgreSQL, MSSQL, H2), tous les enregistrements sont écrits dans la même table de la base de données, même s'ils proviennent de flux de valeurs différents pour des objets différents.
Si vous utilisez PostgreSQL, chaque ligne contient l'enregistrement d'une seule propriété dans la table de ValueStream de la base de données PostgreSQL. Cela signifie que le flux de valeurs effectue un suivi du changement de valeur de chaque propriété, de façon indépendante. Après avoir utilisé le service QueryPropertyHistory, il vérifie le flux de données de chaque propriété de l'objet et collecte toutes les mises à jour les plus récentes (chacune avec une heure de mise à jour différente) dans un seul résultat de table d'informations.
La table suivante détaille les principales différences entre les flux et les flux de valeurs. Consultez-les pour déterminer le type d'entité à utiliser pour stocker les données de séries temporelles dans votre application :
Flux
Flux de valeurs
Les flux peuvent stocker n'importe quel type de données de séries temporelles.
Les flux de valeurs peuvent stocker les données de séries temporelles provenant de la propriété d'un objet.
Les flux de valeurs sont liés aux propriétés d'un objet.
Vous pouvez directement interroger les données de flux en utilisant leurs propres services. Le résultat de la requête renvoie la totalité de la ligne de données.
Vous ne pouvez pas directement interroger les données des flux de valeurs. Utilisez à la place les services définis sur l'objet pour interroger les données du flux de valeurs. Par exemple : QueryPropertyHistory
Pour ajouter une ligne de données à un flux, utilisez le service WritePropertiesToStream.
Pour ajouter des données à un flux de valeurs, cochez la case Journalisé pour une propriété.
Les flux peuvent stocker des données contextuelles. Par exemple, chaque fois qu'un événement spécifique est déclenché, vous pouvez ajouter les valeurs des autres propriétés. Cela facilite l'analyse des données.
Les flux de valeurs ne peuvent pas stocker de données contextuelles.
Quand utiliser des flux ou des flux de valeurs ?
Utilisez des flux et des flux de valeurs pour stocker et récupérer des données de séries temporelles. En fonction de la quantité de données à stocker, sélectionnez l'option de stockage de données appropriée.
Utilisez des flux lorsque vous souhaitez interroger des données uniquement sur des courtes périodes.
Divisez les objets entre plusieurs flux de valeurs pour améliorer les performances d'index.
Table de configuration
Utilisez des tables de configuration pour créer des applications personnalisables qui peuvent être mises à niveau en toute sécurité sur la plateforme ThingWorx.
Vous pouvez ajouter une table de configuration sur une entité application composite basée sur une forme de données prédéfinie. Cela simplifie le processus de création d'applications composites d'extension personnalisables, tout en prenant toujours en charge les mises à niveau sur place, les valeurs de la table de configuration étant reportées lors des mises à niveau d'extension.
Bonnes pratiques en matière de gestion de la modélisation centrée sur les données
Utilisez les bonnes pratiques générales suivantes pour gérer la modélisation centrée sur les données dans ThingWorx :
Si vous avez des données qui restent inchangés, ou qui seront remplacées la prochaine fois qu'elles seront modifiées/chargées, et qu'elles sont associées à un objet, créez une propriété de table d'informations pour cet objet et attribuez-lui la forme de données appropriée. Ainsi, vous pouvez accéder aux données par l'intermédiaire de l'objet. Vous pouvez également utiliser des tables de configuration ou, en cas de quantités importantes de données, une table de données.
Utilisez autant que possible la mise en cache des données.
Par exemple, au lieu d'interroger la base de données pour chaque événement DataChange, implémentez un cache, en tant que table d'informations, qui est actualisé à des intervalles définis.
Archivez les données dont vous n'avez plus besoin.
Lors de la conception de votre application, vous devez déterminer les données fréquemment utilisées. Vous pouvez stocker ces données dans la base de données d'application. Déplacez dès que possible les anciennes données vers un serveur externe, tel qu'une instance fédérée ThingWorx ou un serveur de base de données.
Indiquez les dates de début et de fin dans les méthodes de requête afin de limiter la quantité de données récupérées par la requête. Cela permet de réduire le temps de traitement et d'améliorer les performances.
Pour les cas d'ingestion de volumes élevés de données (supérieurs aux taux d'ingestion décrits dans le manuel anglais ThingWorx Platform Sizing Guide [Guide de dimensionnement de ThingWorx Platform]), envisagez de créer plusieurs fournisseurs de persistance qui se connectent à des instances de base de données distinctes. Cela permet de s'assurer que les données sont placées dans différentes tables de la base de données. Si vous ajoutez plusieurs bases de données, les fournisseurs de persistance peuvent pointer vers des bases de données spécifiques. Dans ce cas, une migration des données est nécessaire.
Assurez-vous que vos tables de données comportent moins de 100 000 lignes.
L'interrogation des données de tables de données et de flux ne doit prendre que quelques secondes. Si ces tables de données et ces flux comportent plus de 100 000 lignes, les requêtes prendront du temps.
Assurez-vous de planifier la façon dont vous souhaitez purger vos anciennes données. La purge des données est importante, car elle contribue à améliorer les performances d'une application.