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 Anwendung 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.
* 
Datentabellen unterstützen keine Schreibvorgänge in Hochgeschwindigkeit, da sie keinen Warteschlangenmechanismus wie Streams und Wert-Streams aufweisen.
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 zur ThingWorx Plattform 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 Anwendung 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 Anwendungen zu erstellen, die sicher auf der ThingWorx Plattform aktualisiert werden können.
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.
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 verwenden 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 Anwendung müssen Sie entscheiden, welche Daten häufig verwendet werden. Sie können diese Daten in der Anwendungsdatenbank 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 Anwendung verbessert werden kann.