Live Coding: Entdeckung von DuckDB am Donnerstag, den 20. Juni um 10 Uhr!

Hallo zusammen!

Ich werde in den nächsten Tagen diese Version auf meiner PROD zu Hause testen.

Falls die Tests erfolgreich sind, möchte ich gerne wissen, ob ein Deployment in der letzten Augustwoche möglich ist oder ob viele von euch noch im Urlaub sein werden?

Da es sich bei diesem Update um ein Major-Update handelt, möchte ich auf Nummer sicher gehen und keine Probleme bei Nutzern verursachen, die im Urlaub sind und nicht zu Hause sind, um das Update zu überwachen. :slight_smile:

Kleine Umfrage:

  • Ab dem 26. August okay
  • Ab dem 29. August okay
  • Ab dem 2. September okay
0 votant

Vielen Dank für eure Antworten!

Ich habe gerade das DuckDB-Testimage auf meiner Produktion installiert :partying_face:

Meine Produktion läuft seit Februar mit mehr als drei Dutzend Zigbee-Geräten + einer Kamera.

Aktuell habe ich 996.000 Sensorwerte in der Datenbank:

Die Migration dauerte bei mir 1 Minute und 20 Sekunden:

2024-08-06T21:10:19 DuckDB: Daten werden von SQLite migriert
...
2024-08-06T21:11:47 DuckDB: Migration zu DuckDB abgeschlossen.

(Hinweis: Die Migration ist nicht blockierend, daher lief meine Instanz währenddessen problemlos weiter)

Vorher nachher:

SQLite-Datenbank: 905 MB
DuckDB-Datenbank: 18 MB

Das ist beeindruckend!

Noch beeindruckender ist die Reaktivität der Diagramme.

Ich kann problemlos Monate von Temperaturverläufen anzeigen, es ist sehr flüssig und die Werte sind viel sauberer, da zwei Probleme durch diese Technologie nun gelöst sind:

  • Keine seltsame Rundung außerhalb von 24h in den Diagrammen
  • Es gibt nur noch „Live“-Daten, und daher sind die Daten der letzten Stunde auf allen Diagrammen sichtbar!

Löschen alter Werte

Ich habe auf „SQLite-Zustände bereinigen“ geklickt:

Die Bereinigung dauerte bei mir 12 Minuten.

Datenbank bereinigen

Ich habe eine Bereinigung der Datenbank gestartet, was bei mir fast sofort erledigt war.

Danach habe ich Gladys neu gestartet.

Das Ergebnis

1008K Aug  6 19:34 gladys-production.db
32K Aug  6 19:34 gladys-production.db-shm
278K Aug  6 19:34 gladys-production.db-wal
3.1M Aug  6 19:11 gladys-production.duckdb
15M Aug  6 19:34 gladys-production.duckdb.wal

Gesamt = 19 MB

Bei einer vorherigen Größe von 905 MB sind das -97,9% :star_struck:

Ich werde meine Instanz in den nächsten Tagen weiter beobachten und sehen, wie es läuft :slight_smile:

Toll, alles! Herzlichen Glückwunsch für die ganze Arbeit!!

Äh…
Ist das möglich?! :innocent:

Migrationsstart: 9:53
Ende: 11:47

Bearbeitung: Aber ich bin mir nicht sicher, ob das hier besonders effektiv ist:


Ich weiß nicht, wie das möglich ist. Ich glaube, ich habe die Seite neu geladen und die Anfrage wurde erneut gesendet…
Ansonsten geht es voran. Langsam, aber es geht voran (4% nach einer Stunde)!

Unglaublich! :smiley:

Das ist absichtlich langsam, um Gladys etwas „Bandbreitenzeit“ zu geben, damit Gladys einigermaßen normal weiterläuft.

Je leistungsfähiger deine Festplatte ist, desto schneller geht es.

Ich sprach von zwei parallelen Prozessen…
Nach 10 Stunden bin ich bei 20% :zany_face:
12 Stunden – 57%.
Ich werde am Ende der Operationen einen vollständigen Nachbericht machen :wink:

Wenn ich den Unterschied der Gladys Plus-Sicherungen vor/nach dem Update sehe :sweat_smile:

(die Sicherungen sind komprimiert)

Damit wird auf deinem Server genug Platz für die Backups der neuen Gladys Plus-Benutzer sein :ok_hand:

Hier ist eine detaillierte Beschreibung, wie die Migration ablief.
Allgemein gab es keine Probleme.
Zuerst war ich überrascht, dass die Migration sofort nach dem Start des Containers begann. An sich ist das kein Problem.

Allerdings begann die Migration sofort bei 23 %.
In den Aufgaben sieht man den Fortschritt gut.


Es ist langsam, aber es geht voran.
In der Zwischenzeit ist Gladys verlangsamt, aber nicht unbrauchbar.

1 GB RAM verwendet.


Das Ergebnis, unglaublich, eine DB von 65 MB statt 11,4 GB!


Allerdings war der nächste Schritt, das Löschen, sehr mühsam!
Mehrere sehr lange Stunden, in denen Gladys bei mir fast gelähmt war…
Dieses Morgen sehe ich, dass

Und es bewegt sich nicht mehr.
Dann erhalte ich eine Benachrichtigung zum Neustart von Gladys (vielleicht watchtower?). Und in den Aufgaben:

(Es gibt einen Tippfehler: ‹ a échoué › wäre genauer)
Trotzdem:

Ich starte also eine Datenbankbereinigung, die, wie erwartet, Gladys etwa eine Stunde blockiert.
Aber nach Überprüfung stelle ich fest, dass die alte DB nicht leer ist:

Ich habe also die Schritte zum Löschen und zur Bereinigung der DB neu gestartet und hop (ja, und ein manuelles Neustarten des Containers, um die db-wal zu leeren).

Und da wir von Backups sprachen, ein Screenshot meines:

Offensichtlich ist es sehr wenig oder gar nicht komprimiert (ist es also noch notwendig?)
Gesamtzeit… Fast 30 Stunden…
Wir sind uns einig, dass die Schritte zum Löschen und zur Bereinigung nicht zwingend notwendig sind, aber sie haben mein Speicherproblem behoben :innocent:

Ja, die Migration ist zwingend erforderlich, der alte Code für SQLite ist nicht mehr vorhanden, und solange die Migration nicht abgeschlossen ist, hast du eine nicht vollständige Gladys-Funktionalität (die Diagramme wären sonst leer).

Die Migration ist nicht linear, die Prozentangabe gibt den Prozentsatz der migrierten Funktionen an. Manche Funktionen haben viele Zustände, andere weniger.

Eine noch genauere Fortschrittsanzeige zu erstellen, wäre kontraproduktiv, es würde Zeit in Anspruch nehmen, die Anzahl der Zustände für jede Funktion zu berechnen, und die Migration würde verlangsamt werden.

Ja, das zweimalige Starten der Aufgabe hat die Last wahrscheinlich verdoppelt :sweat_smile: Ich weiß nicht, wie du das gemacht hast ^^ Gleiches gilt für den Prozentsatz, der stecken bleibt, beide Aufgaben haben jeweils die Arbeit erledigt, und auf halbem Weg war der Job wahrscheinlich fertig, und sie konnten nicht mehr vorankommen. An sich ist das nicht so schlimm ^^ Du hast gut daran getan, die Aufgabe nach dem Neustart neu zu starten, das hat den Job beendet.

Ja, ich habe zwei Updates des DuckDB-Images am Mittwochabend und Donnerstagabend bereitgestellt, um verschiedene Probleme zu beheben, die ich in meiner Produktion bemerkt hatte. Watchtower muss danach durchgelaufen sein.

Das ist eine alte Übersetzung, nicht neu in dieser Version, aber ich werde es korrigieren ^^

Jetzt ist die von DuckDB exportierte Backup-Datei im .parquet-Format, und dieses Format ist größer als das stark komprimierte Speicherformat von DuckDB. Es wird also weniger Unterschied zwischen dem Gladys Plus-Backup und den lokalen Dateien geben, oder die Datei auf Gladys Plus wird etwas größer sein. Aber wenn man die Dateigrößen sieht… :smiley:

Vielen Dank für dein sehr umfassendes Feedback!

Trotz des kleinen Problems mit dem doppelten Starten der Löschaufgabe ist die Migration bei dir eindeutig ein Erfolg.

Mit 13 Millionen Zuständen, 11 GB SQLite-Datenbank und allem auf einem nicht gerade leistungsstärksten Setup (Rpi 4 + SSD per USB, glaube ich), ist das wirklich sauber!

Falls du dieses Setup als PROD beibehalten möchtest (um die Migration nicht ein zweites Mal durchführen zu müssen), kannst du das tun. Du musst nur auf das mit v4 getaggte Image umschalten, sobald ich es in PROD veröffentliche (Ende des Monats).

Ein großes Dankeschön, dass du es getestet hast :pray:

Ich auch nicht, aber nachdem ich die Aufgabe nach dem Neustart von Gladys erneut gestartet habe, hat sie es erneut verdoppelt und in beiden Fällen mit etwa 15 Minuten Abstand. Beim zweiten Mal bin ich mir sicher, nicht noch einmal geklickt oder die Seite neu geladen zu haben…

Okay, ich werde Code hinzufügen, um ein doppeltes Starten zu verhindern.

Hallo !!

Nach dem Urlaub mache ich mich auch an die Arbeit:


Beim Start des Bildes: 10:35 Uhr - Deutliche Verzögerung, aber Gladys ist immer noch verfügbar (wie bei @GBoulvin)

Vorschau des Fortschritts nicht verfügbar auf der Systemseite während der ersten 5 Minuten:


Dann:

EDIT1: 9% nach 10 Minuten, nicht schlecht ^^

So cool! Kann es kaum erwarten, zu sehen, wie es bei dir aussieht :grin:

Nach 1 Stunde sieht es so aus, als ob er in Schwierigkeiten steckt, die Seitenaktualisierungen werden immer langsamer (ca. 1 Minute) und der Prozentsatz steigt nicht mehr (steckt seit 15 Minuten bei 31% ^^) aber die Statusmeldungen kommen gut durch ^^ Also kein Problem ^^


Bei den Ressourcen tut sich nicht viel:

EDIT: Nach 2 Stunden 10 Minuten:


Migration in 3h30 abgeschlossen (ungefähr ^^):


Ergebnis:

Wie bereits oben erwähnt und in Absprache mit allen: Beeindruckend ^^

Okay … jetzt der Teil, vor dem ich schon seit einiger Zeit Angst habe, die Bereinigung!^^

Meines Wissens ist Gladys seit 5 Minuten nicht verfügbar (Start der Bereinigung)

EDIT: 400.000 Zustände in 15 Minuten bereinigt … wir lassen sie weiterarbeiten ^^ denn wenn man es flach betrachtet: 26.700 Zustände pro Minute => 3.000 Minuten => 50h ^^

Gladys ist wieder verfügbar.
1% nach 20 Minuten

Für 80 Millionen Zustände ist das echt sauber! :smiley:

Ich kann es kaum erwarten, das Endergebnis zu sehen, sobald die DB bereinigt ist. Du wirst von 47 GB auf nur 400 MB kommen, das ist wirklich super sauber ^^

Wir sollten nicht weit davon entfernt sein, was die Löschung angeht:


Sagen wir mal 35/40h ^^

EDIT (07:00 Uhr):


EDIT (12:00 Uhr):

Das wundert mich nicht, die Bereinigung wird sehr langsam durchgeführt, damit die Instanz weiterleben kann (weiter Sensorwerte empfangen, Szenen ausführen)

Alles, was die SQLite-Datenbank betrifft, bleibt natürlich verlangsamt, aber auch nicht vollständig blockiert!

Halte uns auf dem Laufenden

Kleine Frage @pierre-gilles,
Ist es normal, dass nach der Migration und während der Löschung keine Grafiken / kein Verlauf mehr angezeigt werden? Denn bei mir sind im Moment keine Daten mehr vorhanden, außer dem letzten Wert.

Muss die Löschung also vor der Verwendung der DuckDB-Datenbank durchgeführt werden oder sollte sie nach der Migration übernehmen?

Da die Meldung oben auf der Seite nach Abschluss der Migration nicht mehr erscheint und kein Neustart angezeigt wird, bin ich mir unsicher ^^

EDIT: Na gut, ich habe meine Antwort :sweat_smile: Sobald die SQLite-Zustände auf 0 gefallen sind, ist alles wieder da ^^ Also ist die Löschung vor der Verwendung von DuckDB zwingend erforderlich. Allerdings läuft die Löschung in den Aufgaben immer noch (69%):


Ich rühre im Moment nichts an (keine Datenbankbereinigung)?

Ergebnis der Löschung der SQLite-Zustände: 23 Stunden für 80 Millionen Zustände (2024-08-15 12:55:28.297 +00:00 => 2024-08-16 11:56:34.779 +00:00) … Warten auf Abschluss der endgültigen Löschung.