MongoDB, InfluxDB MariaDB,kti.tugraz.at/staff/rkern/courses/dbase2/2018/team_1.pdf ·...

Preview:

Citation preview

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

Recommended