Harveg-DEVops / Wiki

Informationen zu der Architektur und Hintergrundinformationen der Jättruppe
0 stars 0 forks source link

InfluxdB client dataframe #18

Closed Harveg closed 3 years ago

Harveg commented 3 years ago

Gemäss des letzten Auszugs aus der DB von Hiag (db_gicom) haben wir eine gigantische anzahl an series generiert. Gemäss der Doku von influx ist die Anzahl series ausschlaggebend für die Performance respektive Hardware skalierung der DB. Nach meinem Verständinss wird pro TAG Element eine series generiert, das heisst sobald ein TAG Element zb. .tag("lot_nummer", "2021043002").field("humidity, 40).time(4)) auf eine andere Lot_nr wechselt .tag("lot_nummer", "2021043003").field("humidity, 40).time(4)) wird eine neue series angelegt.

Nun würde dies in unserem Fall für die Filterung im Grafana Sinn machen Tags für Lot-Nr. und Raum-Nr. zu haben um ein GROUB BY() zu ermöglichen, doch unser aktueller dataframe sieht für jeden field value einen Tag vor: https://github.com/Davideee/hiag_watchdog_win/blob/f52a79c0c3b8fbc9c8f8f8af62f6be191d836d08/data_model.py

Hier die wichtigsten design-guides für die influxDB queries:

Fix:

json_body = {
            "measurement": "gicom",
            "tags": {
                "lot_nummer": series["Lot Nummer"],
                "raum_nummer": series["Raum Nummer"]
            },
            "time": utils.convert_gicom_date_to_influxdb_s_date(series['datum/tijd ']),
            "fields": {
                "lufttemp_grad_celsius": series["Lufttemperatur [°C]"],
                "zuluft_temperatur_grad_celsius": series["Zuluft Temperatur [°C]"],
                "co2_ppm": series["CO² [ppm]"],
                "co2_draussen_ppm": series["CO²   draussen [ppm]"], # Why so many spaces?
                "zuluft_temp_unit_grad_celsius": series["Zuluft Temperatur unit [°C]"],
                "luftklappe_prozent": series["Luftklappe [%]"],
                "kuehlung_prozent": series["Kühlung [%]"],
                "heizung_prozent": series["Heizung [%]"],
                "ventilator_prozent": series["Ventilator [%]"],
                "dampf_prozent": series["Dampf [%]"],
                "vorheizung_prozent": series["Vorheizung [%]"],
                "sauerstoff_prozent": series["Sauerstoff [%]"],
                "phase": series["Phase []"]
            }
        }
Davideee commented 3 years ago

Das bedeutet auf dem jetzigen Stand hat jeder neue eingetragene Wert eine neue Series erzeugt? Wie können wir bereits eingetragene Werte "reparieren"?

Harveg commented 3 years ago

Der Test mit folgendem dataframe erzeugt nun einmalig eine series im Vergleich zu vorher: _gicom,air_temp_grad_celsius=38.5,co2_draussen_ppm=245.1,co2_ppm=987.3,dampf_prozent=100.0,heizung_prozent=100.0,kuehlung_prozent=100.0,lot_nummer=2020430101,luftklappe_prozent=0.0,phase=8.1,raum_nummer=1,sauerstoff_prozent=19.6,vorheizung_prozent=1.0,zuluft_temp_unit_grad_celsius=11.8,zuluft_temperatur_gradcelsius=37.4 gicom,lot_nummer=2021030507,raum_nummer=7 gicom,lot_nummer=2021030508,raum_nummer=8 gicom,lot_nummer=2021030509,raum_nummer=9

json_body = {
            "measurement": "gicom",
            "tags": {  
                "lot_nummer": series["Lot Nummer"],
                "raum_nummer": series["Raum Nummer"]
            },
            "time": utils.convert_gicom_date_to_influxdb_s_date(series['datum/tijd ']),
            "fields": {
                "lot_nummer": series["Lot Nummer"],
                "raum_nummer": series["Raum Nummer"],
                "lufttemp_grad_celsius": series["Lufttemperatur [°C]"],
                "zuluft_temperatur_grad_celsius": series["Zuluft Temperatur [°C]"],
                "co2_ppm": series["CO² [ppm]"],
                "co2_draussen_ppm": series["CO²   draussen [ppm]"], # Why so many spaces?
                "zuluft_temp_unit_grad_celsius": series["Zuluft Temperatur unit [°C]"],
                "luftklappe_prozent": series["Luftklappe [%]"],
                "kuehlung_prozent": series["Kühlung [%]"],
                "heizung_prozent": series["Heizung [%]"],
                "ventilator_prozent": series["Ventilator [%]"],
                "dampf_prozent": series["Dampf [%]"],
                "vorheizung_prozent": series["Vorheizung [%]"],
                "sauerstoff_prozent": series["Sauerstoff [%]"],
                "phase": series["Phase []"]
            }
        }
Harveg commented 3 years ago

Hab den fix commited und auch bei HIAG implementiert. Nun werde ich alle DATENPUNKTE von den GICOM logs mittels neuem data frame neu übertragen. Da das Löschen von TAG's nicht unterstützt wird siehe: https://www.neteye-blog.com/2018/11/how-to-drop-a-tag-in-influxdb/. Sind ca. 25 Datasets..