Daten in ThingWorx speichern
ThingWorx stellt Entitäten und Methoden zum Speichern von Daten bereit. Sie können Daten in Datentabellen, Dingeigenschaften, Streams, Wert-Streams und Konfigurationstabellen speichern.
Beim Entwickeln der Lösung müssen Sie berücksichtigen, wie ThingWorx die Daten speichert. Die Wahl des richtigen Datenspeichers ist sehr wichtig, da sie sich auf das Ergebnis des Projekts, Skalierbarkeit und Zuverlässigkeit sowie das Benutzererlebnis auswirkt.
Im folgenden Abschnitt werden die Speicheroptionen im ThingWorx Modell beschrieben:
Datentabelle
Verwenden Sie diese für weniger als 100.000 Datenzeilen.
Verwenden Sie diese für statische Datensätze und statische Suchtabellen. Verwenden Sie für hochdynamische und größere Datensätze eine relationale Datenbank, die über eine Database-Dingvorlage verbunden ist.
* 
Verwenden Sie eine relationale Datenbank für komplexe Abfragen und Joins.
Verwenden Sie sie für schlüsselbasierte Abfragen und schlüsselbasierten Speicher sowie zum einfachen Aktivieren von Aktualisierungen und Löschungen basierend auf dem primären Schlüssel.
Beispiel: Sie können Informationen über das Inventar eines intelligent vernetzten Automaten speichern, wobei jede Position im Inventar ein primärer Schlüssel ist. Sie können Datentabellen auch verwenden, um Daten der Bewässerungsprogramme zu speichern, die für ein Erntemanagement-Gerät verfügbar sind, wobei jedes Bewässerungsprogramm eine Zeile mit einem primären Schlüssel ist.
Um die Daten Zeile für Zeile zu bearbeiten oder abzufragen, verwenden Sie Datentabellen.
Verwenden Sie Indizes, wenn Sie mit Datentabellen arbeiten.
Dingeigenschaft
Verwenden Sie Dingeigenschaften, um Daten zu einem Ding in ThingWorx zu speichern. Eigenschaften haben die folgenden Datenspeicheroptionen:
Schreibgeschützt – Verwenden Sie diese Option für statische Werte, die zur Laufzeit nicht geändert werden sollten. Wenn Sie möchten, können Sie den Standardwert jedoch ändern.
Persistent – Verwenden Sie diese Option, wenn der Wert der Eigenschaft auch nach einem Neustart des ThingWorx Servers gespeichert werden soll und wenn der Wert der Eigenschaft zur Laufzeit geändert werden kann.
Protokolliert – Verwenden Sie diese Option für Eigenschaften, deren Werte kontinuierlich aktualisiert werden. Dies sind Zeitreihendaten, die in Wert-Streams gespeichert werden können.
* 
Verwenden Sie keine expliziten Eigenschaften, um Verlaufsdaten zu speichern. Verwenden Sie stattdessen Streams oder Wert-Streams.
Stream
Verwenden Sie diesen, um zeitgesteuerte Prozessereignisse oder Aktivitäten zu protokollieren, die sich auf Ihre Geräte beziehen.
Erstellen Sie beispielsweise einen Stream, um Probleme bezüglich der Geräteaktivitäten zu protokollieren oder aufzuzeichnen, wenn Ihr Gerät die Verbindung zu ThingWorx Platform trennt und wiederherstellt. Streams sind für Schreibvorgänge in Hochgeschwindigkeit optimiert und verfügen über ein konfigurierbares Cache-System.
Wert-Stream
Verwenden Sie diesen zum Speichern von Zeitreihendaten, die aus den Eigenschaften eines Dings abgerufen werden.
Für Streams werden Datentabellen erstellt. Wenn Sie Wert-Streams verwenden, wird das Erstellen von spärlich gefüllten Datentabellen eliminiert.
Der dingorientierte Zugriff auf Daten in einem Wert-Stream bietet integrierte Unterstützung für Multi-Tenancy.
Wenn Sie ein RDMS (PostgreSQL, MSSQL, H2) verwenden, werden alle Datensätze, auch aus unterschiedlichen Wert-Streams für verschiedene Dinge, in dieselbe Tabelle in der Datenbank geschrieben.
Wenn Sie PostgreSQL verwenden, enthält jede Zeile in der Tabelle für ValueStream in der PostgreSQL-Datenbank nur für eine Eigenschaft den Datensatz. Dies bedeutet, dass der Wert-Stream die Wertänderung jeder Eigenschaft unabhängig verfolgt. Nach der Verwendung des QueryPropertyHistory-Dienstes prüft er den Datenfluss für jede Eigenschaft im Ding und sammelt alle neuesten Aktualisierungen (jeweils mit einer anderen Aktualisierungszeit) in einem Infotable-Ergebnis.
Die folgende Tabelle enthält Informationen zu den Hauptunterschieden zwischen Streams und Wert-Streams. Verwenden Sie diese Informationen, um den Typ der Entität festzulegen, der zum Speichern von Zeitreihendaten in der Lösung verwendet werden soll:
Streams
Wert-Streams
Streams können jeden beliebigen Typ von Zeitreihendaten speichern.
Wert-Streams können Zeitreihendaten aus der Eigenschaft eines Dings speichern.
Wert-Streams sind an die Eigenschaften eines Dings gebunden.
Sie können Daten aus Streams direkt abfragen, indem Sie ihre eigenen Dienste verwenden. Das Ergebnis der Abfrage ist die gesamte Datenzeile.
Sie können Daten aus Wert-Streams nicht direkt abfragen. Verwenden Sie stattdessen Dienste, die für das Ding definiert sind, um Daten aus dem Wert-Stream abzufragen. Beispiel: QueryPropertyHistory
Um eine Datenzeile zu einem Stream hinzuzufügen, verwenden Sie den WritePropertiesToStream-Dienst.
Um Daten zu einem Wert-Stream hinzuzufügen, aktivieren Sie das Kontrollkästchen Protokolliert für eine Eigenschaft.
Streams können Kontextdaten speichern. Wenn beispielsweise ein bestimmtes Ereignis ausgelöst wird, können Sie die Werte der anderen Eigenschaften hinzufügen. Dies hilft bei der Analyse von Daten.
Wert-Streams können keine Kontextdaten speichern.
Wann sollten Sie Streams oder Wert-Streams verwenden?
Verwenden Sie Wert-Streams und Streams, um Zeitreihendaten zu speichern und abzurufen. Wählen Sie abhängig von der Datenmenge, die Sie speichern müssen, die richtige Datenspeicheroption.
Verwenden Sie Streams, wenn Sie Daten nur in kleinen Zeiträumen abfragen möchten.
Teilen Sie Dinge auf mehrere Wert-Streams auf, um die Indexleistung zu verbessern.
Konfigurationstabelle
Verwenden Sie diese, um anpassbare Lösungen zu erstellen, für die ein sicheres Upgrade auf ThingWorx Platform durchgeführt werden kann.
Sie können eine Konfigurationstabelle für eine Mashup-Entität basierend auf einem vordefinierten Data Shape hinzufügen. Dies vereinfacht das Erstellen von Erweiterungs-Mashups, die angepasst werden können, während auch weiterhin Upgrades vor Ort unterstützt werden, da Konfigurationstabellenwerte während Erweiterungsupgrades weitergeleitet werden.
Wiederherstellung nach Datenbankausfall für Datenanbieter
Im Falle eines Datenbankneustarts oder -ausfalls (wenn erfasste Daten nicht bei Datenanbietern persistent gemacht werden) können Sie das System so konfigurieren, dass die Operationen zur Vermeidung von Datenverlust wiederholt werden, indem Sie die folgenden konfigurierbaren Eigenschaften für erforderliche Persistenzanbieter in der Datei platform-settings.json festlegen:
acquireRetryAttempts: Definiert, wie oft ThingWorx versucht, eine neue Verbindung mit der Datenbank herzustellen.
acquireRetryDelay: Zeit (in Millisekunden), die ThingWorx zwischen Verbindungsversuchen wartet.
Dementsprechend wiederholt ThingWorx den Vorgang bis zu acquireRetryAttempts Mal, mit einer Verzögerung von acquireRetryDelay zwischen jedem Versuch (gemäß den konfigurierten Einstellungen). (Beispiel: Wenn ThingWorx 5 Sekunden warten soll, bis die Datenbank wieder online ist, legen Sie acquireRetryAttempts=5 & acquireRetryDelay=1000 fest.)
Wenn alle Wiederholungsversuche fehlschlagen, wird die folgende Fehlermeldung im Anwendungsprotokoll protokolliert, was darauf hinweist, dass Einträge nicht persistent gemacht werden konnten: Failed to connect to persistence provider after retrying 5 times in 10 seconds.
* 
Es wird nicht empfohlen, acquireRetryAttempts auf kleiner als oder gleich 0 festzulegen, da die Anwendung immer wieder versucht, Einträge persistent zu machen, und die Plattform bei einem längeren Datenbankausfall möglicherweise nicht mehr reagiert.
Während Sie InfluxDB als optionalen Persistenzanbieter verwenden, müssen Sie DatabaseWriteRetryAttempts so konfigurieren, dass Datenbankoperationen wie konfiguriert mehrmals wiederholt werden.
* 
Für häufig wechselnde persistente und protokollierte Eigenschaften tritt ein unvermeidbarer, sehr kleiner Datenverlust aufgrund der Batch-basierten Verarbeitung auf. In solchen Szenarios werden die folgenden Meldungen in Anwendungsprotokollen protokolliert:
Für persistente Eigenschaft: BatchUpdateException error occurred executing batch update of persistent properties.
Für protokollierte Eigenschaften oder ValueStream-Erfassung: Error executing batch.
* 
Die Warteschlangengröße sollten entsprechend konfiguriert werden, um die Daten gemäß der Erfassungsrate zu speichern.
Weitere Informationen zur Leistung finden Sie unter Leistungsbericht.
Optimale Vorgehensweisen für die Verarbeitung datenzentrierter Modellierung
Verwenden Sie die folgenden allgemeinen optimalen Vorgehensweisen für die datenzentrierte Modellierung in ThingWorx:
Wenn Sie Daten haben, die sich nicht ändern oder überschrieben werden, wenn sie das nächste Mal geändert/geladen werden, und sie einem Ding zugeordnet sind, erstellen Sie eine Infotable-Eigenschaft für dieses Ding, und weisen Sie den richtigen Data Shape zu. Auf diese Weise können Sie über das Ding auf die Daten zugreifen. Sie können auch Konfigurationstabellen oder für größere Datenmengen eine Datentabelle verwenden.
Verwenden Sie Daten-Caching so oft wie möglich.
Anstatt beispielsweise die Datenbank für jedes DataChange-Ereignis abzufragen, implementieren Sie einen Cache als Infotable, der in festgelegten Intervallen aktualisiert wird.
Archivieren Sie die Daten, die Sie nicht mehr benötigen.
Beim Entwerfen der Lösung müssen Sie entscheiden, welche Daten häufig verwendet werden. Sie können diese Daten in der Lösungsdatenbank speichern. Verschieben Sie die alten Daten so schnell wie möglich auf einen externen Server, z.B. eine ThingWorx Verbundinstanz oder einen Datenbankserver.
Geben Sie Parameter für Start- und Enddatum für die Abfragemethoden an, um die Datenmenge zu begrenzen, die die Abfrage abruft. Dies verkürzt die Verarbeitungszeit und verbessert die Leistung.
Für Datenaufnahmeszenarien mit hohem Volumen (über den im englischen Handbuch ThingWorx Platform Sizing Guide (ThingWorx Platform Dimensionierungshandbuch) beschriebenen Aufnahmeraten) sollten Sie das Erstellen mehrerer Persistenzanbieter in Betracht ziehen, die eine Verbindung zu unabhängigen Datenbankinstanzen herstellen. Dadurch wird sichergestellt, dass Daten in verschiedene Tabellen in der Datenbank eingefügt werden. Wenn Sie mehrere Datenbanken hinzufügen, können die Persistenzanbieter auf bestimmte Datenbanken verweisen. In diesem Fall ist Datenmigration erforderlich.
Stellen Sie sicher, dass Ihre Datentabellen weniger als 100.000 Zeilen aufweisen.
Das Abfragen von Daten aus Datentabellen und Streams sollte nur einige Sekunden dauern. Wenn diese Datentabellen und Streams mehr als 100.000 Zeilen haben, werden die Abfragen langsam durchgeführt.
Planen Sie, wie Sie die alten Daten bereinigen möchten. Das Löschen von Daten ist wichtig, da dadurch die Leistung einer Lösung verbessert werden kann.
War dies hilfreich?