NEWS
Test ioBroker Fixer mit JSONL-Compression
-
Hey All,
ich habe heute mal etwas anderes zum testen.
Es gibt aktuell ein Problem das JSONL Files manchmal zu große werden. Ein die Tage kommender js-controller 4.0.24 wird die Ursache beheben, aber wir wissen nicht wie viele User betroffen sind.
Das Problem tritt meistens bei der objects.jsonl Datei auf, wenn JSONL genutzt wird und sich selten Objekte ändern. Dann kann es durchaus zu 1 GB großen Dateien kommen.
Um sicherzustellen das es beim Update des js-controller dann zu keinen Probleme kommt weil Files zu groß geworden sind haben wir entschieden den Fixer zu erweitern das dieser die Datenbank-Files komprimiert. Vielen Dank an @Thomas-Braun für die Unterstützung beim Bash-enDas würde ich gern mit Euch kurz testen bevor wir es offiziell ausrollen, weil es dann aufgrund von npm Versionen ggf doch kleine Unterschiede geben kann.
Was ist zu tun?
Zuerst Bitte ioBroker auf dem Host stoppen
iob stop
.Wer es genau wissen will macht jetzt und später nach der Optimierung ein
ls -la /opt/iobroker/iobroker-data/*.jsonl
um zu sehen wie die Filegrößen waren und ob die Komprimierung funktioniert hat.Dann den Test-Fixer über folgendes Kommando ausführen.
curl -sLf https://raw.githubusercontent.com/ioBroker/ioBroker/dbcompress/fix_installation.sh | bash -
Wenn alles klappt gibt es einen neuen Schritt 3/4 namens "Database maintenance".
Wenn JSONL als Datenbank genutzt wird dann sieht es ungefähr so aus wenn alles durch ist:
Wenn keine JSONL genutzt wird zB so:
Wenn npm 5 oder 6 noch auf dem System ist kann es sein das zusätzlich noch 1-2 Zeilen mehr ausgegeben werden. Aber generell muss es das gleiche sein.
Welches Ergebnis ist interessant
Primär ob es getan hat bzw ob der Fixer ohne komische Zusatz-Fehlermeldungen getan hat was er soll ... und idealerweise, wenn JSONL in Benutzung ist, ob die Kompression getan hat.
Rückmeldungen gern (am besten mit
npm -v
Ausgabe - also NPM Version) hier im Thread.Danke für Eure Unterstützung!
Ingo
-
Hier mein Bleeding-Edge-Frickel-System:
echad@chet:~ $ npm -v 9.1.2 echad@chet:~ $ iob stop echad@chet:~ $ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 28372301 Nov 19 23:13 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 12487942 Nov 19 23:13 /opt/iobroker/iobroker-data/states.jsonl echad@chet:~ $ ls -lah /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 28M Nov 19 23:13 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 12M Nov 19 23:13 /opt/iobroker/iobroker-data/states.jsonl
Behandlung sah dann so aus:
========================================================================== Database maintenance (3/4) ========================================================================== Checking for uncompressed JSONL databases... This might take a while! Compressing /opt/iobroker/iobroker-data/states.jsonl Compressing /opt/iobroker/iobroker-data/objects.jsonl Compressed 2 JSONL files. Done
Resultat:
VORHER: echad@chet:~ $ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 28372301 Nov 19 23:13 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 12487942 Nov 19 23:13 /opt/iobroker/iobroker-data/states.jsonl echad@chet:~ $ ls -lah /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 28M Nov 19 23:13 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 12M Nov 19 23:13 /opt/iobroker/iobroker-data/states.jsonl NACHHER: echad@chet:~ $ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 12096153 Nov 19 23:17 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 2813599 Nov 19 23:17 /opt/iobroker/iobroker-data/states.jsonl echad@chet:~ $ ls -lah /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 12M Nov 19 23:17 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 2.7M Nov 19 23:17 /opt/iobroker/iobroker-data/states.jsonl
-
Bei mir:
haus@ioBroker:~$ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 35794383 Nov 20 00:31 /opt/iobroker/iobroker-data/objects.jsonl
Der Fixer lief normal:
Database maintenance (3/4) ========================================================================== Checking for uncompressed JSONL databases... This might take a while! Compressing /opt/iobroker/iobroker-data/objects.jsonl Compressed 1 JSONL files. Done
Nachher:
haus@ioBroker:~$ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 24611926 Nov 20 00:37 /opt/iobroker/iobroker-data/objects.jsonl
Und der Vollständigkeit halber:
haus@ioBroker:~$ npm -v 8.19.2
-
lief sauber durch!
latzi@ioBroker:~$ npm -v 8.19.2
vorher:
latzi@ioBroker:~$ ls -lah /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 38M 20. Nov 05:03 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 12M 20. Nov 05:03 /opt/iobroker/iobroker-data/states.jsonl
nachher:
latzi@ioBroker:~$ ls -lah /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 25M 20. Nov 05:04 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 7,5M 20. Nov 05:04 /opt/iobroker/iobroker-data/states.jsonl
-
woody@ioBroker:~$ npm -v 8.19.2 woody@ioBroker:~$ iob stop [sudo] Passwort für woody: woody@ioBroker:~$ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 26161720 20. Nov 06:32 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 17136842 20. Nov 06:32 /opt/iobroker/iobroker-data/states.jsonl
========================================================================== Database maintenance (3/4) ========================================================================== Checking for uncompressed JSONL databases... This might take a while! Compressing /opt/iobroker/iobroker-data/states.jsonl Compressing /opt/iobroker/iobroker-data/objects.jsonl Compressed 2 JSONL files. Done
-
@da_woody
und wie war die Größe nach dem Fix? -
@latzi sorry, hab ich vergessen zu kopieren... lauft schon wieder...
-
@da_woody alles gut. Bei euren Größen seidige alle vom „große files“ problem nicht betroffen. Aber log sie ja gut aus. Danke
-
kalle@iobrokerct:~$ npm -v 8.19.2 Vorher kalle@iobrokerct:~$ kalle@iobrokerct:~$ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 20807087 20. Nov 09:17 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 4919960 20. Nov 09:18 /opt/iobroker/iobroker-data/states.jsonl Nacher kalle@iobrokerct:~$ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 18449470 20. Nov 09:19 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 4181835 20. Nov 09:19 /opt/iobroker/iobroker-data/states.jsonl ========================================================================== Database maintenance (3/4) ========================================================================== Checking for uncompressed JSONL databases... This might take a while! Compressing /opt/iobroker/iobroker-data/states.jsonl Compressing /opt/iobroker/iobroker-data/objects.jsonl Compressed 2 JSONL files. Done Gruß Kalle
-
Moin,
Ich hoffe das ist groß genug.pi@iobroker:~$ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rwxr--+ 1 iobroker iobroker 145665583 Nov 20 02:40 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 801992 Nov 20 09:25 /opt/iobroker/iobroker-data/states.jsonl pi@iobroker:~$ ========================================================================== Database maintenance (3/4) ========================================================================== Checking for uncompressed JSONL databases... This might take a while! Compressing /opt/iobroker/iobroker-data/states.jsonl Compressing /opt/iobroker/iobroker-data/objects.jsonl Compressed 2 JSONL files. Done pi@iobroker:~$ ls -la /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 6821778 Nov 20 09:29 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 302548 Nov 20 09:29 /opt/iobroker/iobroker-data/states.jsonl pi@iobroker:~$
-
@mrjeschke 145 mb auf 6 wenn ich grad aufm Handy nicht verzählt hab ;-)) aber ja cool. Tut. Dann kann das später raus.
-
So aus technischer Neugier -
*.jsonl
ist doch im Prinzip eine schnöde Textdatei.
Wie/was komprimiert er da - also wie schafft er es da Platz zu schaffen? Oder lässt er "nur die Luft raus" und entfernt ungenuztes? -
@apollon77 Ich habe nach Systemcrash und Neuaufbau und Rücksicherung der states und objects.jsonl auch gerade "Effekte", die nach kaputter Datenbankstruktur riechen. Objecte tauchen mehrfach auf, alte Werte kommen irgendwie immer wieder hervor. Da kommt mir ein Werkzeug zur Reparatur der Datenbank gerade recht!
-
@bananajoe Das Konzept von der jsonl Datenbank ist das pro Zeile ein Objekt drin steht und zuerst mal neue Daten ans file angehängt werden. Die standard „Komprimierung“ (also einen stand komplett neu zu schreiben bei dem für jeden key der aktuellste Wert drin steht) passiert an sich mit unseren Einstellungen wenn doppelt so viele Zeilen wie unique Objekte sind.
Und ja die Komprimierung räumt da auf. Vor allem da sich Objekte eher selten ändern halbes da Auswirkungen.
Der fixer kann so mit aufräumen und so Probleme beim iobroker start falls mal eine date groß wird und die sd Karte langsam ist zu vermeiden
-
@wolfgangd wobei sowas an sich damit weniger was zu tun haben kann. Aber ja „Schaden kann’s auch nicht“ aber wenn die Probleme anhalten dann mal in eigenen thread „vorstellen“
-
Skript gestartet. Keine Probleme.
Werte
VORHER
pi@pi4:~ $ ls -la /opt/iobroker/iobroker-data/*.jsonl
-rw-r--r-- 1 iobroker iobroker 20202339 Nov 21 20:24 /opt/iobroker/iobroker-data/objects.jsonl
-rw-r--r-- 1 iobroker iobroker 3889023 Nov 21 20:24 /opt/iobroker/iobroker-data/states.jsonl
pi@pi4:~ $NACHHER
pi@pi4:~ $ ls -la /opt/iobroker/iobroker-data/*.jsonl
-rw-rw-r--+ 1 iobroker iobroker 8740574 Nov 21 20:27 /opt/iobroker/iobroker-data/objects.jsonl
-rw-rw-r--+ 1 iobroker iobroker 956049 Nov 21 20:27 /opt/iobroker/iobroker-data/states.jsonl
pi@pi4:~ $ -
Hallo alle miteinander,
Für Linux
die Version des Fixers, die wir hier im Thread getestet hatten, ist seid gestern auch Live. Wäre cool wenn Ihr nochmal mit checken könntet das es auch mit einem "iob fix" immer noch tut.
Und wenn Ihr schon dabei seid wäre cool wenn Ihr auch (nachdem Ihr einmal iob fix gemacht habt!!) danach ein "iob diag" versuchen könntet. Geht das? Da ist bestimmt @Thomas-Braun interessiert ob es da noch Fehler gibt
Für Windows
Der Fixer ist jetzt auch unter Windows verfügbar! Wäre cool wenn ich da ggf auch Tester finden ...
Im ioBroker Verzeichnis wäre dies das Ausführen von
npx @iobroker/fix
... (bei gestopptem ioBroker natürlich).Danke für Euer Feedback
Ingo
-
@apollon77 sagte in Test ioBroker Fixer mit JSONL-Compression:
iob fix
Funktioniert! objects.jsonl von 32751637 -> 20090424, states.jsonl von 20246420 -> 3260086
iob diag
Da bekomme ich folgenden Fehler:
bash: line 1: syntax error near unexpected token `<' bash: line 1: `<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/www/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#2196F3"><meta name="description" content="Remote access to personal ioBroker server via ioBroker.cloud"/><link rel="apple-touch-icon" href="/www/logo192.png"/><link rel="manifest" href="/www/manifest.json"/><title>ioBroker Cloud</title><style>#root,body,html{height:100%;width:100%;display:flex;overflow:hidden}</style><script defer="defer" src="/www/static/js/main.ae982c84.js"></script><link href="/www/static/css/main.59da0ebb.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>'
-
@dr-bakterius Danke, lasse es Bluefox nochmal prüfen
-
@apollon77
für iob diag wie @Dr-Bakteriusbash: Zeile 1: Syntaxfehler beim unerwarteten Symbol »<« bash: Zeile 1: `<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/www/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#2196F3"><meta name="description" content="Remote access to personal ioBroker server via ioBroker.cloud"/><link rel="apple-touch-icon" href="/www/logo192.png"/><link rel="manifest" href="/www/manifest.json"/><title>ioBroker Cloud</title><style>#root,body,html{height:100%;width:100%;display:flex;overflow:hidden}</style><script defer="defer" src="/www/static/js/main.ae982c84.js"></script><link href="/www/static/css/main.59da0ebb.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>'
für iob fix auf meinem vermanschten System
vorher:bommel@iobroker:~$ ls -lah /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 54M 13. Dez 10:52 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 218M 13. Dez 10:52 /opt/iobroker/iobroker-data/states.jsonl
nachher:
bommel@iobroker:/opt/iobroker$ ls -lah /opt/iobroker/iobroker-data/*.jsonl -rw-rw-r--+ 1 iobroker iobroker 31M 13. Dez 10:53 /opt/iobroker/iobroker-data/objects.jsonl -rw-rw-r--+ 1 iobroker iobroker 15M 13. Dez 10:53 /opt/iobroker/iobroker-data/states.jsonl