Grundlagen der ThingWorx Transaktionen
Mit ThingWorx 9.3.2. wurden die folgenden Änderungen für die Diensterstellung eingeführt.
Kategorien von Datenbankoperationen
In ThingWorx Platform sind Datenbankoperationen in drei Kategorien unterteilt:
Datenschreibvorgänge, z.B. Eigenschaftsschreibvorgänge, die immer als Batch-Datei ausgeführt werden
Datenlesevorgänge, die in ThingWorx 9.3.2 aktualisiert wurden, für eine direkte Freigabe (eager) der Transaktionen
Modelloperationen, die eine Transaktion abrufen und dann halten, bis der Dienst der obersten Ebene abgeschlossen ist
Es werden Modelloperationen anstelle von Datenbankoperationen referenziert, da nicht alle Aktionen im Zusammenhang mit der Datenbank synchron ausgeführt werden und daher sofort eine Verbindung verwenden.
Modelloperationen sind Operationen mit Auswirkungen auf Systementitäten: Beispiel:
Änderungen der Eigenschaftendefinition: Hinzufügen, Entfernen, Ändern des Basistyps usw.
Konfigurationsänderungen
Datenoperationen sind asynchron ausgeführte Datenbankoperationen, die möglicherweise aus Effizienzgründen als Batch verarbeitet werden. Beispiel:
Aktualisieren eines Eigenschaftswerts (auch wenn persistent)
Hinzufügen eines Eintrags zu einer Datentabelle, einem Stream oder Wert-Stream
Plattformdienste, die direkte Transaktionen (eager) verwenden
Dieser Abschnitt listet ThingWorx Platform Dienste mit direkten (eager) Transaktionen auf.
DataTableThing
GetDataTableEntries
GetDataTableEntryByKey
GetDataTableEntryCount
FindDataTableEntries
QueryDataTableEntries
SearchDataTableEntries
Dinge, welche die Dingvorlage "Stream" verwenden
GetStreamEntryCount
QueryStreamData
QueryStreamEntries
QueryStreamEntriesWithData
GetStreamEntry
Dinge, welche die Dingvorlagen "ValueStream" oder "RemoteValueStream" verwenden
Get<Type>StreamEntry
Integer, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
Query<Type>StreamEntries
Integer, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
QueryMultiPropertyStreamEntries
Dinge, die ihre Eigenschaften in einem ValueStream protokollieren, können die Streams daher mit diesen APIs abfragen.
Optimale Vorgehensweisen für die Diensterstellung
In diesem Abschnitt werden die optimalen Vorgehensweisen empfohlen, damit die Datenbankverbindungen unter bestimmten Umständen verfügbar bleiben, jedoch nur, wenn die Dienste einige allgemeine Richtlinien befolgen. Zu diesen optimalen Vorgehensweisen gehören:
Abfrageoperationen vor Modelländerungen durchführen
Lange andauernde Arbeiten nach Modelländerungen minimieren
Lange andauernde Arbeiten durchführen, wenn keine Verbindung verwendet wird
Sobald eine Verbindung für die Durchführung von Modelloperationen abgerufen wurde, kann sie erst nach Beenden des Dienstes freigegeben werden. Das Durchführen von Abfrageoperationen vor Modelloperationen ermöglicht das Abrufen einer Verbindung für Abfragen. Diese wird später freigegeben, während andere Arbeiten abgeschlossen werden. Wenn es lang andauernde Arbeiten gibt, die sich auf das Modell auswirken, versuchen Sie, diese zuerst durchzuführen, bevor die Verbindung verwendet wird.
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);
Asynchrone Dienste verwenden
Wenn es nicht möglich ist, eine lange andauernde Aufgabe auszuführen, nachdem das Modell geändert wurde, kann die Verwendung asynchroner Dienste den "Konkurrenzkampf" um die Verbindung verringern, da hierbei nicht auf eine Antwort gewartet wird, bevor mit dem nächsten Befehl fortgefahren wird. Es werden zwar nicht weniger Verarbeitungsressourcen verwendet, aber der Dienst wird dadurch reaktionsfähiger. Asynchrone Dienste sind in einigen Fällen möglicherweise nicht möglich, da sie nicht direkt einen Wert zurückgeben. Sie können jedoch für eine effiziente Ressourcenverwendung hilfreich sein.
varthing = Things["SomeThing"];
thing.AddPropertyDefinition();// connection acquired
asyncDoHttpRequestAndUpdateProperty(property);// request handled in another thread
// connection released (before async call completes)
Was sind Modelloperationen?
Die Dokumentation bezieht sich auf Modelloperationen anstelle von Datenbankoperationen, da nicht alle Aktionen, die mit der Datenbank zu tun haben, synchron ausgeführt werden und daher unmittelbar eine Verbindung verwenden.
Modelloperationen wirken sich auf die Systementitäten statt deren Daten aus. Beispiele sind:
Änderungen der Eigenschaftendefinition: Hinzufügen, Entfernen, Ändern des Basistyps usw.
Konfigurationsänderungen
Einige Datenbankoperationen werden asynchron ausgeführt und sind aus Effizienzgründen möglicherweise in Gruppen angeordnet. Dazu gehören in der Regel Datenoperationen:
Aktualisieren eines Eigenschaftswerts (auch wenn persistent)
Hinzufügen eines Eintrags zu einer Datentabelle, einem Stream oder Wert-Stream
War dies hilfreich?