Indexierung von Laufzeitdaten in ThingWorx
Alle relationalen Datenbanksysteme, wie z.B. PostgreSQL, MSSQL und H2, bieten die Möglichkeit, ein beliebiges Feld oder eine Kombination von Feldern in einer Tabelle zu indizieren. Die Indexierung wird bei Verwendung des FindDataTableEntries-Dienstes genutzt. Mithilfe von Indexierung können Daten über Abfragen und Suchen schneller abgerufen werden. Die Indexierung erfordert jedoch zusätzlichen Speicherplatz sowie zusätzliche Schreibvorgänge bei der Datenerfassung, da die DB-Engine zusätzliche Datenstrukturen für jede erfasste Datenzeile verwalten muss. ThingWorx verwendet Data Shapes und Basistypen innerhalb der Anwendungsebene. Aus diesem Grund basiert das zum Speichern von Daten verwendete Format auf Data Shapes und Basistypen und nicht auf dem Datentyp der relationalen Tabellen. Dies ermöglicht es ThingWorx, die Datentypen dynamisch zu ändern, ohne das Datenbankschema zu ändern, und führt dazu, dass die Daten als JSON- oder Text-BLOBs gespeichert werden. Das in ThingWorx verwendete Standard-Indexierungsschema ist das Ergebnis des Versuchs, die Leistung beim Schreiben/Lesen unter Berücksichtigung der vorstehenden Faktoren auszubalancieren.
Persistente Ding-Eigenschaftendaten
Die Daten werden in der Tabelle property_vtq in der Datenbank gespeichert. Jede Eigenschaft wird in einer eigenen Zeile in der Tabelle gespeichert. Sprich, die Dingeigenschaften werden Tabellenzeilen anstatt Tabellenspalten zugeordnet. Diese Struktur macht diese Tabelle ungeeignet für das Speichern von Verlaufsdaten. Die indizierten Felder sind:
id – ThingName, Ding
name – Name der Eigenschaft
Protokollierte Ding-Eigenschaftendaten in Wert-Streams
Die Daten werden in der Tabelle value_stream in der Datenbank gespeichert. Jede Eigenschaft wird in einer eigenen Zeile in der Tabelle gespeichert, um die Ding-Eigenschaften Tabellenzeilen anstatt Tabellenspalten zuzuordnen.
Die indizierten Felder sind:
entity_id – Wert-Stream-Name
source_id – Dingname
property_name – Eigenschaftsname
time – Zeitstempel des Eintrags
Datentabellen-Daten
Die Daten werden in der Tabelle data_table in der Datenbank gespeichert. Alle Feldwerte werden in einer einzigen Zeile in der Tabelle gespeichert, was zur Folge hat, dass die im zugeordneten Data Shape definierten Felder einer einzigen Spalte für jeden Eintrag als JSON-Zeichenfolge zugeordnet werden.
{"DataShape_Field1": "aaa", "DataShape_Field2": 2}
Es sind mehrere Indizes vorhanden:
entity_key – Primärer Schlüssel, der in dem der Datentabelle zugeordneten Data Shape definiert ist.
entity_key, entity_id – Data Shape-Schlüssel, Datentabellen-Name.
field_values – Indiziert die JSON-Zeichenfolge.
Stream-Daten
Die Daten werden in der Tabelle stream in der Datenbank gespeichert. Alle Feldwerte werden in einer einzigen Zeile in der Tabelle gespeichert. Die Felder, die im zugeordneten Data Shape definiert sind, werden einer einzigen Spalte für jeden Eintrag als JSON-Zeichenfolge zugeordnet. Die indizierten Felder sind:
entity_id – Stream-Name
source_id – Dingname
source_type – Entitätstyp der Quelle (Benutzer, Ding usw.)
time – Zeitstempel des Eintrags
War dies hilfreich?