26. August 2024: Großes Gladys-Update!

Hallo zusammen!

Für diejenigen, die diesem Thema nicht gefolgt sind, arbeite ich seit Ende Juni an einem großen Update für Gladys.

Dieses Update wird die Art und Weise ändern, wie der Speicher der historischen Sensorwerte in Gladys funktioniert, indem es von einem Speicher in einer OLTP-Datenbank (SQLite) zu einer OLAP-Datenbank (DuckDB) wechselt.

Wir behalten SQLite für alle relationalen Daten (Benutzer, Haus, Szenen, usw.), es sind nur die Sensorwerte, die in DuckDB gespeichert werden.

Konkreter gesagt, wird dieses Update allen Benutzern Folgendes bieten:

  • Viel kleinere Datenbanken. @GBoulvin ist von einer Datenbank von 11 GB auf 65 MB mit DuckDB übergegangen, für 11 Millionen gespeicherte Zustände. Dies ist möglich, weil diese beiden Datenbanksysteme überhaupt nicht auf die gleiche Weise funktionieren und DuckDB Time-Series-Daten aggressiv komprimiert.
  • Präzise und ultra-schnelle Grafiken, selbst über lange Zeiträume. Schluss mit den ungenauen aggregierten Daten von Gladys, es ist jetzt möglich, Grafiken über lange Zeiträume zu erstellen, die alte Daten und Live-Werte eines Sensors mischen, was bisher nicht möglich war!
  • Eine bessere allgemeine Performance von Gladys: Schluss mit den Datenaggregationsprozessen alle Stunden, die die Festplattenbandbreite auf kleinen Maschinen belegt haben.

Warum hat man bis jetzt auf dieses revolutionäre System gewartet?

DuckDB ist die einzige Datei-OLAP-Datenbank auf dem Markt.

Bisher war DuckDB in der Alpha/Beta-Phase, und jede Version brachte noch immer breaking changes mit sich, was nicht mit unserem Stabilitätsbedarf in Gladys kompatibel war.

Im Juni 2024 wurde DuckDB 1.0 (stabil) veröffentlicht, und ich habe sofort mit den Arbeiten begonnen, um auf dieses System umzustellen.

Was als Nächstes kommt

Ich habe diese Version bereits seit Anfang der Woche auf meiner Instanz zu Hause installiert, um sicherzustellen, dass alles in Ordnung ist, und bisher läuft alles perfekt.

Wenn alles so weitergeht, werde ich diese Version am Montag, den 26. August veröffentlichen :rocket:

Sofort migrieren?

Wenn du dich mit der Kommandozeile auskennst und auch sofort auf diese Version migrieren möchtest, kannst du das tun! (Und mir Feedback geben).

Das Docker-Image ist unter folgender Adresse verfügbar:

gladysassistant/gladys:duckdb

Du kannst diese Version pullen:

docker pull gladysassistant/gladys:duckdb

Dann deinen bestehenden Gladys-Container stoppen:

docker stop gladys && docker rm gladys

Dann einen Gladys-Container mit dem DuckDB-Image neu starten:

docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--cgroupns=host \
--restart=always \
--privileged \
--network=host \
--name gladys \
-e NODE_ENV=production \
-e SERVER_PORT=80 \
-e TZ=Europe/Paris \
-e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production.db \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/gladysassistant:/var/lib/gladysassistant \
-v /dev:/dev \
-v /run/udev:/run/udev:ro \
gladysassistant/gladys:duckdb

(Vergiß nicht, diesen Befehl für deinen persönlichen Fall anzupassen)

Danach kannst du den Migrationsstatus auf deinem Dashboard sehen.

Und sobald die Migration abgeschlossen ist, kannst du die alten SQLite-Zustände in den Einstellungen → « System » von Gladys löschen:

Hinweis: Natürlich musst du nach dem Update wieder zum Image gladysassistant/gladys:v4 zurückkehren!

Wenn du ein wenig warten möchtest

Wenn du am 26. August nicht zu Hause bist und vermeiden möchtest, dass das Update automatisch durchgeführt wird, wenn du nicht da bist, kannst du Watchtower bis dahin pausieren und Watchtower bei deiner Rückkehr neu starten, was dir mögliche Probleme erspart, die du nicht remote beheben könntest.

Ich setze SQLite und DuckDB nicht gegeneinander

SQLite ist ein fantastisches Werkzeug, das wir weiterhin in Gladys verwenden.

Allerdings ist für einen bestimmten Anwendungsfall, den wir haben (Speicherung von Time-Series-Daten), DuckDB viel besser geeignet.

Für den Rest der Tabellen bleibt SQLite die beste Lösung auf dem Markt für unsere Nutzung, und ich bleibe ein überzeugter SQLite-Nutzer!

Ich setze diese beiden Datenbanken also überhaupt nicht gegeneinander, es sind zwei radikal unterschiedliche Produkte :slight_smile:

Vielen Dank an diejenigen, die testen werden, ich habe wirklich große Vorfreude darauf, diese neue Technologie in euren Händen zu sehen!

Migration läuft!

image

Meine Datenbank ist 20 GB groß
image

27 Millionen!! Unglaublich :star_struck:

Kann es kaum erwarten, das zu sehen, haltet uns hier auf dem Laufenden

Migration in etwas weniger als 1 Stunde durchgeführt

Vorher 20 GB
image

Mit duckdb 119 MB. Unglaublich der Unterschied
image

Und die Säuberung?

In Arbeit!
image

Alles super, ich werde wahrscheinlich ab dem 26. starten, vorher muss ich aber noch meine Abmeldungen debuggen lol.

Trotzdem super Beitrag, sehr klar und informativ!! :+1:

Aber die Bereinigung dauert ewig…
Zum Glück ist Gladys immer noch funktionsfähig

Ja, das ist so gewollt! Es werden jeweils 1000 Zeilen gelöscht, sonst würde die Festplatte zu stark blockiert und dein Gladys wäre während des Löschvorgangs nicht verfügbar. :slight_smile:

Hallo,

Ich bin gerade mit einer Migration mit einer Datenbank von 5,2 GB beschäftigt

image

Allerdings habe ich keinen Zugriff auf den Fortschritt im Dashboard und habe dies in den Aufgaben:

Könntest du die Befehle geben @pierre-gilles bitte? Also am 26/08? :
( Es ist mehr, um einen Fehler zu vermeiden als alles andere :slight_smile: )
image

Ich nehme an, dass es das ist:

docker pull gladysassistant/gladys:v4
docker stop gladys && docker rm gladys

Dann einen Gladys-Container mit dem V4-Image neu starten:

docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--cgroupns=host \
--restart=always \
--privileged \
--network=host \
--name gladys \
-e NODE_ENV=production \
-e SERVER_PORT=80 \
-e TZ=Europe/Paris \
-e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production.db \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/gladysassistant:/var/lib/gladysassistant \
-v /dev:/dev \
-v /run/udev:/run/udev:ro \
gladysassistant/gladys:v4

Danke :slight_smile:

Bearbeitung:

Erfolgreich:
image

Ich möchte nur die Bestätigung von @pierre-gilles, bevor ich den Löschschritt starte :slight_smile:

Bearbeitung 2:

Der Trottel :laughing: Man musste lokal gehen und nicht auf Gladys Plus:

Migration in 15 Minuten gemacht :wink:

Ich starte den Löschvorgang

image

Nach einer Stunde ist alles in Ordnung:
image

Ich starte die Reinigung:
image

Die Datenbank ist größer als 38 MB:
image

Und das Gladys Plus-Backup:

Danke, dass du @prohand getestet hast!

Ja, genau das hast du bereitgestellt :slight_smile:

Für den Docker-Befehl ist es derselbe wie auf https://gladysassistant.com/de/docs/installation/docker/#lancer-un-container-gladys-assistant

Yes! Gladys Plus hat noch nicht die DuckDB-Version, das ist noch nicht in Produktion :slight_smile:

Toll :star_struck: Wieder ein Erfolg!

Das ist großartig!
Von meiner Seite aus habe ich es noch nicht getestet, ich bin in ein anderes Land gezogen, ich habe noch nicht alle Kartons ausgepackt. Neues Zuhause, neue Installation und wahrscheinlich eine neue Instanz von Gladys, die bald kommt.
Ich freue mich darauf, es zu testen :hugs:

Viel Erfolg beim Einrichten

@lmilcent Gute Installation :smiley:

nikel bei mir, kein Problem
Das einzige Problem ist, wenn ich wieder auf das Bild gladysassistant/gladys:v4 wie oben angegeben zurückgehe.
Es gibt keine Kommentare mehr

Nickel @Marco85 danke, dass du es getestet hast! Nein, auf das v4-Image solltest du auf keinen Fall gleich zurückwechseln :sweat_smile: Wechsle sofort wieder zum DuckDB-Image!!

Auf das v4-Image solltest du erst zurückwechseln, wenn ich diese Entwicklung am 26. August in Produktion gebracht habe :slight_smile:

ok, c bon, ich bin wieder zu DuckDB zurückgekehrt

Gute Installation @imilcent,
Ich nutze die Gelegenheit, um dich zu fragen, welchen Typ von Sonde du für Kühlschränke und Gefriertruhen verwendest. Ich glaube, mich zu erinnern, dass du mit klassischen Thermometern viele Batterien verbraucht hast.
Danke im Voraus

@pierre-gilles,
Was den Teil betrifft:

Wäre es möglich, Math.abs mit einer zusätzlichen Bedingung für den Feature-Typ zu formatieren, da ich beispielsweise bei schwachem Wind mit hässlichen Kurven konfrontiert werde:

Ich vermute, dass es bei den Abstandssensoren genauso sein wird.

Genau! Das merke ich mir.