Indexation des données d'exécution dans ThingWorx
Tous les systèmes de base de données relationnelle, comme PostgreSQL, MSSQL et H2, permettent d'indexer n'importe quel champ ou une combinaison de champs dans une table. L'indexation est utile avec le service FindDataTableEntries. Elle améliore la vitesse de récupération des données avec des requêtes et des recherches. Toutefois, l'indexation nécessite un espace de stockage et des opérations d'écriture supplémentaires lors de l'ingestion de données, le moteur de base de données devant gérer des structures de données additionnelles pour chaque ligne de données ingérée. ThingWorx utilise des formes de données et des types de base dans la couche d'application. Par conséquent, le format utilisé pour stocker les données est basé sur des formes de données et des types de base plutôt que sur le type de données des tables relationnelles. Cela permet à ThingWorx de modifier les types de données de manière dynamique sans changer le schéma de base de données et d'enregistrer les données au format JSON ou sous la forme d'objets BLOB textuels. Le schéma d'indexation par défaut utilisé dans ThingWorx est le résultat de la tentative d'équilibrage des performances d'écriture/de lecture lors de la prise en compte des facteurs ci-dessus.
Données de propriétés d'objet persistantes
Les données sont stockées dans la table property_vtq de la base de données. Chaque propriété est stockée dans une ligne spécifique de la table. En d'autres termes, les propriétés d'objet sont mappées à des lignes de table et non à des colonnes. Avec cette structure, cette table ne permet pas de stocker des données historiques. Les champs indexés sont les suivants :
id : nom de l'objet, objet.
name : nom de la propriété.
Données de propriétés d'objet consignées dans des flux de valeurs
Les données sont stockées dans la table value_stream de la base de données. Chaque propriété est stockée dans une ligne spécifique de la table afin de mapper les propriétés d'objet à des lignes de table et non à des colonnes.
Les champs indexés sont les suivants :
entity_id  : nom du flux de valeurs.
source_id : nom de l'objet.
property_name : nom de la propriété.
time : horodatage de l'entrée.
Données de la table de données
Les données sont stockées dans la table data_table de la base de données. Toutes les valeurs de champ sont stockées dans une seule ligne de la table. Les champs définis dans la forme de données associée sont ainsi mappés à une seule colonne pour chaque entrée sous la forme d'une chaîne JSON.
{"DataShape_Field1": "aaa", "DataShape_Field2": 2}
Il existe plusieurs index :
entity_key  : clé primaire définie dans la forme de données associée à la table de données.
entity_key, entity_id : clé de la forme de données, nom de la table de données.
field_values : indexation de la chaîne JSON.
Données de flux
Les données sont stockées dans la table stream de la base de données. Toutes les valeurs de champ sont stockées dans une seule ligne de la table. Les champs définis dans la forme de données associée sont ainsi mappés à une seule colonne pour chaque entrée sous la forme d'une chaîne JSON. Les champs indexés sont les suivants :
entity_id : nom du flux.
source_id  : nom de l'objet.
source_type  : type d'entité de la source (utilisateur, objet, etc.).
time : horodatage de l'entrée.