Présentation des transactions ThingWorx
Catégories d'opérations de base de données
Dans ThingWorx Platform, les opérations de base de données sont classées en trois catégories :
Opérations d'écriture de données, telles que les écritures de propriétés qui sont toujours séquentielles.
Opérations de lecture de données qui ont été mises à jour dans ThingWorx 9.3.2 pour diffuser leurs transactions de manière synchrone.
Opérations de modèle qui acquièrent une transaction et la conservent jusqu'à la fin du service de niveau supérieur.
Les opérations de modèle sont préférées aux opérations de base de données, car les actions relatives à la base de données ne sont pas toutes exécutées de manière synchrone et utilisent donc immédiatement une connexion.
Les opérations de modèle sont celles qui affectent les entités du système. Par exemple :
Modifications de définition de propriété : ajout, suppression, modification du type de base, etc.
Modifications de la configuration.
Les opérations de données sont des opérations de base de données effectuées de manière asynchrone et peuvent être exécutées de façon séquentielle pour plus d'efficacité. Par exemple :
Mise à jour d'une valeur de propriété (même persistante).
Ajout d'une entrée à un élément DataTable, Stream ou ValueStream.
Services de Platform qui utilisent des transactions hâtives
Cette section répertorie les services de ThingWorx Platform qui publient leurs transactions de façon hâtives.
DataTableThing
GetDataTableEntries
GetDataTableEntryByKey
GetDataTableEntryCount
FindDataTableEntries
QueryDataTableEntries
SearchDataTableEntries
Objets utilisant le modèle d'objet "Stream"
GetStreamEntryCount
QueryStreamData
QueryStreamEntries
QueryStreamEntriesWithData
GetStreamEntry
Objets utilisant les modèles d'objet ValueStream ou RemoteValueStream
Get<Type>StreamEntry
Entier, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
Query<Type>StreamEntries
Entier, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
QueryMultiPropertyStreamEntries
Par extension, les objets qui consignent leurs propriétés dans un ValueStream peuvent interroger les flux à l'aide de ces API.
Bonnes pratiques en matière de création de services
Cette section recommande les bonnes pratiques pour que les connexions de base de données restent disponibles dans certaines circonstances, mais uniquement si les services suivent certaines consignes générales. Ces bonnes pratiques sont les suivantes :
effectuer les opérations de requête avant les modifications du modèle ;
minimiser les tâches à exécution longue après les modifications apportées au modèle ;
effectuer les tâches à exécution longue lorsqu'aucune connexion n'est en cours d'utilisation.
Une fois qu'une connexion est récupérée pour effectuer les opérations de modèle, elle ne peut pas être libérée tant que le service n'est pas arrêté. L'exécution des opérations de requête avant les opérations de modèle permet de récupérer une connexion à des fins d'interrogation pour ensuite la libérer lorsqu'une autre tâche se termine. Si une tâche à exécution longue influe sur le modèle, essayez d'effectuer cette tâche en premier lorsqu'il n'y a pas de connexion en cours d'utilisation.
varthing = Things["SomeThing"];
// Instead of
thing.AddPropertyDefinition();// connection acquired
varhistory = thing.QueryPropertyHistory();
vardata = makeSomeExternalCalls(history);// connection held here
varvalue = calculateValue(data);// and here
thing.SetPropertyValue(value);
// Do this
varhistory = thing.QueryPropertyHistory();// connection acquired & released
vardata = makeSomeExternalCalls(history);// no connection
varvalue = calculateValue(data);// nor here
thing.AddPropertyDefinition();// connection acquired
thing.SetPropertyValue(value);
Utilisation de services asynchrones
S'il est impossible d'exécuter une tâche à exécution longue après la modification du modèle, l'utilisation de services asynchrones peut atténuer la concurrence des connexions, car ils n'attendent pas de réponse avant de passer à la commande suivante. Bien que cette opération utilise autant de ressources de production, elle permet au service d'être plus réactif. Notez que les services asynchrones peuvent ne pas être viables dans certains cas, car ils ne peuvent pas renvoyer une valeur directement, mais ils peuvent être utiles pour une utilisation efficace des ressources.
varthing = Things["SomeThing"];
thing.AddPropertyDefinition();// connection acquired
asyncDoHttpRequestAndUpdateProperty(property);// request handled in another thread
// connection released (before async call completes)
Qu'est-ce qu'une opération de modèle ?
Dans la documentation, nous parlons d'opérations de modèle plutôt que d'opérations de base de données, car toutes les actions impliquant la base de données sont exécutées de manière synchrone et utilisent immédiatement une connexion.
Les opérations de modèles affectent les entités système elles-mêmes, et non leurs données. Exemples :
Modifications de définition de propriété : ajout, suppression, modification du type de base, etc.
Modifications de la configuration
Certaines opérations de base de données sont effectuées de manière asynchrone et sont potentiellement organisées dans des groupes à des fins d'efficacité. Il s'agit généralement d'opérations de données :
Mise à jour d'une valeur de propriété (même persistante).
Ajout d'une entrée à un élément DataTable, Stream ou ValueStream.
Est-ce que cela a été utile ?