mongodb, influxdb mariadb,kti.tugraz.at/staff/rkern/courses/dbase2/2018/team_1.pdf ·...
TRANSCRIPT
MariaDB, MongoDB, InfluxDB
Alexander Brunner, Bernd Lechner
Modellierung der Daten - MariaDB● Jeder Sensor als eigene Tabelle?
ODER
● eine Tabelle für alle Messwerte?
Befüllen der Datenbanken - erste ErfahrungenMariaDB
● Erste (naive) Idee: LOAD DATA LOCAL INFILE values.csv ... mit AUTO_INCREMENT value_id, PRIMARY KEY (value_id)
○ Befüllen: ca. 2 Std. 20 Min.
● Bessere Idee: PRIMARY KEY (point_uid, time_stamp)○ Befüllen: ca. 1 Std. 36 Min.○ nicht vorhandene Werte mit NULL gefüllt
Befüllen der DatenbankenMongoDB
● Import-Tool für CSV-Dateien - mongoimport (Schalter -- headerline?, tail
-n +2 values.csv > values_new.csv)
○ Befüllen mit Daten aus values.csv ca. 50 Min.
● Beobachtung: timestamps in DB + 2 Std.
○ Adaptiertes Python-Skript (Bibliothek pymongo), aber 16 Min. für Testdatensatz (ca. 1
Mio. Messwerte)
Modellierung der Daten - MongoDB● Philosophie von MongoDB/Dokumentendatenbanken
○ möglichst eingebettete Daten, nicht viele Collections (“Tabellen”)
● Versuch: Mergen mit points.csv
○ mongoimport gibt ohne Fehlermeldung nach ein paar Datensätzen auf
○ Möglichkeit: mit Python-Skript zuerst CSV-Dateien mergen (eigene Big Data - Bibliotheken:
pandas, pyspark)
MongoDB Laufzeit
Befüllen der DatenbankenInfluxDB
● Versucht mit diversen Python-Skripts● Versucht mit telegraf● Ergebnis:
○ beide Python-Skripts gescheitert○ telegraf startete nicht, weder in der VM noch in der ”Bash on Ubuntu on Windows”
AbfragenMariaDB
● Wie richtige Spalte auslesen? ○ COALESCE (boolean_value, integer_value, float_value, string_value)
● probehalber mit “naiver” DB (AUTO_INCREMENT) ○ z.B. Durchschnitt Messpunkt 21: 0.04 Sek. | 37.49 Sek.
-> (automatisch) Index über PRIMARY KEY (point_uid, timestamp)
Lineare Interpolation (letzter/nächster Wert)
Softsensor “Raumklima”Temperatur + Luftfeuchtigkeit in Raum pz206026 (Inffeldg. 13/6. St.)
Mittelwert aus beiden Werten (fill-forward)
AbfragenMongoDB
● z.B. Maximum/Minimum für einen Sensor innerhalb eines Zeitrahmens
Tool: MongoDB NoSQLBooster● https://nosqlbooster.com/● Tool womit man “einfache” SQLStatements in MongoDB laufen lassen
kann
Ein Laufzeiten MariaDB vs. MongoDBLaufzeiten MariaDB MongoDB MongoDB
(ohne Index über point_uid)
Letzter Wert (fill-forward) (Nr. 31) vor 2018-01-01, 0:00
0.00 Sek 9.4 Sek > 3 Min
Max.wert (Nr. 31), 2017-05-06(Anz. Messwerte: 3920)
0.03 Sek 13. 2 Sek > 3 Min
Durchn. (Nr. 31), 2017-05-06
0.03 Sek 9.5 Sek > 3 Min.
Hypothesen1. Un/zuverlässigkeit der Sensoren des Tinkerforge-Sets 03/pz206026 im Vergleich?
● Sensoren Nr. Nr. 21-24, 26-32
● Beobachtung: alle Sensoren liefern im Normalbetrieb 1 Messwert pro 5 Sekunden
● Idee: Maß für missing values:
○ (Letzter Timestamp eines Sensors - erster Timestamp/5) -> erwartete Anzahl an
Messpunkten
○ Prozentzahl: tatsächliche Werte/erwartete Werte
Sensor Nr.
Messwerte Uptime in % vom ersten bis letzten Messwert
21 Beschl.(?) 89,6
22 Höhe(?) 86,6
23 Beschl.(?) 89,6
24 Lautstärke 49,5
26 Beschl.(?) 89,6
27 Luftdruck 86,2
28 Helligkeit 59,9
29 Chip-Temperatur 40,8
30 Luftfeuchtigkeit 51,4
31 Temperatur 21,6
32 CO2 22,1
Hypothesen2. Korrelation zwischen zwischen Innentemperatur und Außentemperatur
● Sensor Nr. 40 Temperatur in Graz: halbstündlich Werte
● Sensor Nr. 38 Innentemperatur in Raum pz206026: alle 5 Sekunden Werte
zu halbstündlichen Außentemperaturwerten mittels forward-fill Innentemperaturwert
-> 2 Messreihen, damit Pearson-Korrelationskoeffizient
Problem: SQL-Abfrage noch sehr ineffizient (für 10 Werte ca. 10 Sekunden)
Rückschläge● NoSQL Abfrage der Interpolation● NoSQL Abfrage des Softsensors● InfluxDB laden
Lessons learned (1)● Besonderheiten im Umgang mit “big data” (u.a. “Datenblindheit”,Geschw.)
● MongoDB-Abfragen schnell unübersichtlich
● Langsamer als SQL-Abfragen in MariaDB
● InfluxDB mühsam zum Laufen zu bringen: kein praktischer Import von
CSV-Dateien - MongoDB: Tool “mongoimport”
● InfluxDB wahrscheinlich besser geeignet für unsere Aufgabe
○ Für Zeitreihen optimiert
Lessons learned (2)● MariaDB sehr kompliziert bei statistischen Auswertungen
○ InfluxDB besser geeignet?
● Gut gewählte Indizes haben große Auswirkung auf Laufzeit