ThingWorx Modelldefinition in Composer > Datenspeicher > Persistenzanbieter > InfluxDB als Persistenzanbieter verwenden
InfluxDB als Persistenzanbieter verwenden
Übersicht
Wenn Sie in Ihrem System intensiv mit Zeitreihendaten arbeiten und sich Ihre Implementierung für Persistenz/Datenabrufe stark auf Wert-Streams oder Streams stützt, empfehlen wir die Verwendung von InfluxDB als Persistenzanbieter in ThingWorx. InfluxDB ist ein hochleistungsfähiger Datenspeicher, der speziell für Zeitreihendaten entwickelt wurde. Er ermöglicht Datenaufnahme mit hohem Durchsatz sowie Komprimierung und Echtzeitabfragen der erfassten Daten. InfluxDB kommt in allen Anwendungsfällen als Datenspeicher zum Einsatz, bei denen große Mengen von Daten mit Zeitstempel verarbeitet werden, beispielsweise DevOps-Überwachungsdaten, Protokolldaten, Anwendungsmetriken, Daten von IoT-Sensoren oder Echtzeitanalysedaten. Der Datenspeicher stellt auch andere Funktionen bereit, unter anderem Datenaufbewahrungsrichtlinien. InfluxDB Enterprise bietet Hochverfügbarkeit sowie eine hochgradig skalierbare Clustering-Lösung für Anwendungsfälle mit Zeitreihendaten.
* 
Für InfluxDB ist ThingWorx 8.4.0 oder höher erforderlich.
Das InfluxPersistenceProviderPackage ist als Teil der Standardinstallation für PostgreSQL oder MSSQL verfügbar.
* 
Der InfluxDB-Datenanbieter unterstützt derzeit ausschließlich Wert-Streams und Streams. Unterstützung für Datentabellen, Wikis und Blogs ist nicht verfügbar.
* 
Der InfluxDB-Datenanbieter unterstützt derzeit keine Exportfunktionen.
* 
InfluxDB wird nicht als Eigenschaftsanbieter unterstützt.
* 
Derzeit unterstützt der InfluxDB Datenanbieter nur eine Aufbewahrungsrichtlinie mit dem Namen "autogen". Beim Erstellen der Datenbank, die mit dem Datenanbieter verwendet werden soll, können Sie den Namen der Richtlinie und andere Richtlinien angeben, etwa Replikationsfaktor usw.
Ausgangsarchitektur mit InfluxDB Enterprise und ThingWorx
* 
Im Diagramm oben wird InfluxDB Enterprise verwendet. Bei Verwendung von InfluxDB Open Source würde das Architekturdiagramm identisch aussehen, jedoch mit nur einem Knoten arbeiten.
Die folgenden Begriffe werden in dieser Dokumentation verwendet, wenn auf die Konfiguration für InfluxDB Enterprise Bezug genommen wird:
Lastenausgleich: InfluxDB Enterprise lässt sich nicht zum Lastenausgleich verwenden. Dieser muss von einem Administrator konfiguriert werden.
Cluster: Ein InfluxDB Enterprise-Cluster besteht aus zwei Typen von Knoten – Metaknoten und Datenknoten.
Datenknoten: Hier liegen sämtliche Roh-Zeitreihendaten. Für Hochverfügbarkeit ist mindestens ein Replikationsfaktor von 2 erforderlich.
Metaknoten: Die Aufgabe dieser Knoten ist einfach – sie müssen den Status konsistent halten. Sie enthalten lediglich grundlegende Statusinformationen wie Aufbewahrungsrichtlinien, Benutzer und Datenbanken. In Umgebungen mit Hochverfügbarkeit sind mindestens drei Metaknoten erforderlich.
Weitere Informationen zum Thema Hochverfügbarkeit finden Sie unter https://www.influxdata.com/blog/understanding-influxenterprise-what-is-a-cluster/.
Vorteile der Verwendung von InfluxDB Enterprise
Wenn Sie einen Datenspeicher für höhere Datenvolumen und Durchsatzgeschwindigkeiten suchen, als sie derzeit mit anderen Datenbanken möglich sind, kann InfluxDB Enterprise Ihnen folgende Vorteile bieten:
Höhere Datenaufnahmerate
Sie können mehr als ein Daten-Repository für Laufzeitdaten nutzen. Beispielsweise können Sie relationale Daten in PostgreSQL hinterlegen und InfluxDB für Stream- und Wert-Stream-Daten verwenden, die in großen Mengen anfallen. Wenn Sie einen Stream oder Wert-Stream definieren, verwendet ThingWorx den standardmäßigen Laufzeitdatenspeicher-Anbieter. Sie können die Konfiguration aber auch so anpassen, dass ein beliebiger angegebener Persistenzanbieter verwendet wird.
* 
Sie können weiterhin Daten von anderen Datenanbietern exportieren und in InfluxDB importieren. ThingWorx kümmert sich um die Datenabstrahierung.
Cloud-fähige Architektur (horizontal skalierbar, jedoch nur mit InfluxDB Enterprise)
InfluxDB installieren und konfigurieren
* 
Es liegt in der Verantwortung desjenigen, der die Influx-Datenbank installiert, die gesamte sicherheitsbezogene Dokumentation, die für InfluxDB bereitgestellt wird, zu lesen und zu verstehen. PTC empfiehlt dringend, InfluxDB mit sicheren Konfigurationen zu installieren und zu konfigurieren, einschließlich Verwendung von Benutzername und starkem Passwort.
* 
Dieser Prozess setzt voraus, dass ThingWorx installiert ist. Weitere Informationen finden Sie unter ThingWorx installieren.
1. Laden Sie InfluxDB herunter, und installieren Sie es.
* 
InfluxDB wird unter Windows nicht unterstützt. In der Anleitung unten wird das Betriebssystem UNIX verwendet.
InfluxDB Open Source (einzelner Knoten): Siehe https://docs.influxdata.com/influxdb/v1.7/introduction/installation/.
Download-Link:
Download-Links – Datenknoten:
Download-Links – Meta-Knoten:
2. Erstellen Sie eine Datenbank in InfluxDB. Laden Sie das Skript thingworxInfluxDBSetup.sh herunter, und führen Sie es aus, um die Datenbank in InfluxDB zu erstellen.
* 
Das Skript thingworxInfluxDBSetup.sh steht im PTC Support-Portal im Ordner install des Software-Download-Pakets zur Verfügung.
Der folgende Beispielbefehl erstellt eine Datenbank mit den standardmäßigen Aufbewahrungsrichtlinien:
CREATE DATABASE thingworx with DURATION 365d REPLICATION 1 SHARD DURATION 30d NAME autogen
3. Erstellen Sie einen InfluxDB-Benutzer. Der folgende Beispielbefehl erstellt einen Benutzer:
CREATE USER twadmin WITH PASSWORD 'password' WITH ALL PRIVILEGES
4. Erstellen Sie in ThingWorx Composer einen neuen Persistenzanbieter.
5. Wählen Sie im Feld Persistenzanbieter-Paket die Option InfluxPersistenceProviderPackage aus.
6. Klicken Sie auf Speichern.
7. Klicken Sie auf die Registerkarte Konfiguration, konfigurieren Sie die Verbindungsinformationen nach Bedarf, und speichern Sie. Die Konfigurationsoptionen finden Sie in den Tabellen unten.
Wenn Sie eine (mit dem InfluxDB Persistenzanbieter-Paket erstellte) Persistenzanbieter-Instanz als standardmäßigen Persistenzanbieter verwenden, können Sie die nachfolgend aufgeführten Konfigurationseinstellungen für Stream- und Wert-Stream-Warteschlangen bearbeiten. Diese Bearbeitungen werden auf alle Streams und Wert-Streams angewendet. Sie können diese Einstellungen für einen bestimmten Stream oder Wert-Stream nicht ändern.
* 
Wenn Sie den Persistenzanbieter eines Wert-Streams wechseln (beispielsweise von ThingworxPersistenceProvider zu InfluxPersistenceProviderPackage), muss jedes Ding, das einen Wert-Stream implementiert, den Dienst RestartThing aufrufen, um in den neuen Persistenzanbieter geschriebene Einträge abrufen zu können. Wenn die Dinge nicht neu gestartet werden, werden die Einträge zwar eventuell in die Datenbank geschrieben; sie werden jedoch erst abgerufen, wenn das Ding neu gestartet wurde.
Verbindungsinformationen
Name
Beschreibung
Standardwert
Verbindungs-URL
URL der Datenbank, von der Sie Verbindungen abrufen sollen.
http://localhost:8086
Datenbankschema
Schema für Verbindungen
thingworx
Benutzername
Benutzername zum Abrufen einer Datenbankverbindung.
thingworx
Passwort
Passwort zum Abrufen einer Datenbankverbindung.
N/A
Einstellungen für die Stream-Verarbeitung
Name
Beschreibung
Basistyp
Standardwert
Maximale Warteschlangengröße
Maximale Anzahl der Stream-Einträge in der Warteschlange. Sobald der angegebene Wert erreicht ist, werden die nachfolgenden Einträge zurückgewiesen.
Number
250000
Maximale Wartezeit vor der Leerung des Stream-Puffers (Millisek.)
Anzahl der Millisekunden, die das System wartet, bevor der Stream-Puffer geleert wird.
Number
2000
Anzahl der Verarbeitungs-Threads
Anzahl der Verarbeitungs-Threads, die dem Stream zugeordnet sind
* 
Die Leistung von InfluxDB ist bei einer kleineren Anzahl Threads besser. Der Datenspeicher ist hochgradig für die Verarbeitung von Daten aus einer kleineren Anzahl von Kanälen optimiert.
Number
5
Maximale Anzahl der Elemente vor der Leerung des Stream-Puffers
Maximale Anzahl von Elementen, die erfasst werden, bevor der Stream-Puffer geleert wird.
Number
1000
Maximale Anzahl der Stream-Schreibvorgänge im Verarbeitungsblock
Maximale Anzahl der Stream-Schreibvorgänge zum Verarbeiten in einem Block
Number
2500
Pufferstatus-Scanrate (Millisek.)
Der Pufferstatus wird in der angegebenen Rate in Millisekunden geprüft.
Number
5
Einstellungen für die Wert-Stream-Verarbeitung
Name
Beschreibung
Basistyp
Standardwert
Maximale Warteschlangengröße
Maximale Anzahl der Wert-Stream-Einträge in der Warteschlange. Sobald der angegebene Wert erreicht ist, werden die folgenden Einträge zurückgewiesen.
Number
250000
Maximale Wartezeit vor der Leerung des Wert-Stream-Puffers (Millisek.)
Anzahl der Millisekunden, die das System wartet, bevor der Wert-Stream-Puffer geleert wird.
Number
2000
Anzahl der Verarbeitungs-Threads
Anzahl der Verarbeitungs-Threads, die dem Wert-Stream zugeordnet sind
* 
Die Leistung von InfluxDB ist bei einer kleineren Anzahl Threads besser. Der Datenspeicher ist hochgradig für die Verarbeitung von Daten aus einer kleineren Anzahl von Kanälen optimiert.
Number
5
Maximale Anzahl der Elemente vor der Leerung des Wert-Puffers
Maximale Anzahl von Elementen, die erfasst werden, bevor der Wert-Stream-Puffer geleert wird.
Number
500
Maximale Anzahl der Wert-Stream-Schreibvorgänge im Verarbeitungsblock
Maximale Anzahl von Elementen zum Verarbeiten in einem Block
Number
2500
Pufferstatus-Scanrate (Millisek.)
Der Pufferstatus wird in der angegebenen Rate in Millisekunden geprüft.
Number
5
8. Klicken Sie auf die Registerkarte Allgemeine Informationen, und aktivieren Sie das Kontrollkästchen Aktiv.
9. Klicken Sie auf Speichern.
Optimale Vorgehensweisen
Reihengrenzwert
Eine Reihe ist die Gesamtzahl eindeutiger Kombinationen von Dingen und zugeordneter Wert-Streams, die in InfluxDB protokolliert sind. InfluxDB bietet ein gutes Leistungsniveau bei hohen Datenvolumen, die an eine kleine Anzahl von Dingen und Dingeigenschaften gesendet werden (beispielsweise mehrere Zehntausend oder mehrere Hunderttausend). Die Gesamtzahl an Reihen ist in InfluxDB standardmäßig auf 1 Million begrenzt. Dieser Grenzwert kann heraufgesetzt werden. Die Leistung von InfluxDB sinkt jedoch kontinuierlich, je höher die Reihenanzahl über diesem Grenzwert liegt.
Wenn Sie mit einer großen Anzahl von Dingen und Eigenschaften arbeiten, können Sie diejenigen mit dem höchsten Datenvolumen wählen und nur diese mit InfluxDB verknüpfen. Das entlastet PostgreSQL bzw. MSSQL.
Wenn Sie die Reihen auf mehrere Server aufteilen möchten, können Sie alternativ mehrere Instanzen des InfluxDB-Datenanbieters verwenden, die jeweils auf unterschiedliche InfluxDB-Serverinstanzen verweisen.
Grenzwert für Schreibvorgänge
Der Grenzwert beträgt 100.000 Schreibvorgänge pro Sekunde bei einer VM mit 60 GB Arbeitsspeicher und 32 Kernen. Eine Überschreitung dieses Grenzwerts kann Probleme in ThingWorx verursachen: Es können dann Ressourcen für die Verarbeitung jeglicher Anforderungen oder Jobs fehlen, beispielsweise für Schreibvorgänge in die Datenbank. Passiert das, stürzt ThingWorx ab, während InfluxDB weiterhin in die Datenbank schreibt. Dieses Problem tritt bei PostgreSQL nicht auf, weil PostgreSQL zum Engpass wird und ThingWorx zu keinem Zeitpunkt die nötigen Ressourcen fehlen, um interne Aufgaben zu bearbeiten.
SSL/sichere Verbindung
InfluxDB unterstützt SSL- und HTTPS-Verbindungen. Sie können SSL- und HTTPS-Verbindungen aktivieren, um die Sicherheit zu erhöhen, wenn das Netzwerk zwischen ThingWorx und InfluxDB nicht unterstützt wird. Ein selbstsigniertes Zertifikat ist ausreichend, sofern der signierende private Schlüssel sicher aufbewahrt wird.
Bekannte Einschränkungen in InfluxDB bezüglich Eigenschaften-Basistypen
Sie können den Basistyp einer Eigenschaft nicht ändern, nachdem die Eigenschaft in einem Wert-Stream protokolliert wurde. Weitere Informationen finden Sie unter https://github.com/influxdata/influxdb/issues/3460.
Eigenschaften bereinigen
Die Dienste PurgeAllPropertyHistory, PurgeSelectedPropertyHistory und PurgePropertyHistory können verwendet werden, um Eigenschaften endgültig aus InfluxDB zu löschen (bereinigen). Verwenden Sie die Parameter startDate und endDate, um einen Bereich anzugeben.