26 août 2024 : Mise à jour majeure de Gladys!

Salut à tous !

Pour ceux qui n’ont pas suivi ce sujet, je travaille depuis fin juin sur une mise à jour majeure de Gladys.

Cette mise à jour va changer la façon dont le stockage des valeurs historiques de capteurs fonctionne dans Gladys, en passant d’un stockage dans une base de donnée OLTP (SQLite) à une base de donnée OLAP (DuckDB).

Nous conservons SQLite pour toutes les données relationnelles (utilisateurs, maison, scènes, etc…), c’est uniquement les valeurs de capteurs qui seront stockées dans DuckDB.

Concrètement, cette mise à jour va offrir à tous les utilisateurs :

  • Des bases de données beaucoup plus petites. @GBoulvin est passé d’une base de donnée de 11 Go à 65 Mo avec DuckDB, pour 11 millions d’états stockés. Cela est possible car ces 2 systèmes de base de données ne fonctionnent pas du tout de la même manière, et que DuckDB compresse agressivement les données time-series.
  • Des graphiques précis et ultra-rapide, même sur des longues périodes. Fini les données agrégées peu précise de Gladys, il est maintenant possible de faire des graphiques sur des longues durées, mélangeant vieille donnée et valeurs live d’un capteur, chose qui n’était pas possible jusqu’ici !
  • Une meilleure performance de Gladys en général : fini les process d’agrégations de données toutes les heures qui occupaient la bande passante disque sur les petites machines.

Pourquoi avoir attendu jusqu’à maintenant pour passer à ce système révolutionnaire ?

DuckDB est la seule base de donnée OLAP-fichier du marché.

Jusque-là, DuckDB était en alpha/beta, et chaque version amenait encore des changements breaking, ce qui n’était pas compatible avec notre besoin de stabilité dans Gladys.

En juin 2024, DuckDB est passé en 1.0 (stable), et j’ai immédiatement commencé les chantiers pour passer à ce système.

La suite

J’ai déjà installé cette version sur mon instance chez moi depuis le début de la semaine afin de vérifier que tout va bien, et pour l’instant tout se déroule parfaitement.

Si tout continue comme ça, je vais sortir cette version le lundi 26 août :rocket:

Migrer dès maintenant ?

Si tu es à l’aise avec la ligne de commande, et que tu veux migrer toi aussi dès maintenant vers cette version, tu peux ! (Et me faire un retour).

L’image Docker est disponible à cette adresse :

gladysassistant/gladys:duckdb

Tu peux pull cette version:

docker pull gladysassistant/gladys:duckdb

Puis stopper ton container Gladys existant:

docker stop gladys && docker rm gladys

Puis relancer un container Gladys avec l’image DuckDB :

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

(N’oublie pas de modifier cette commande pour ton cas personnel)

Ensuite tu pourras voir l’état de la migration sur ton tableau de bord.

Et une fois que la migration sera finie, tu pourras supprimer les anciens états SQLite dans les paramètres → « Système » de Gladys :

Note: Il faudra bien-sûr repasser à l’image gladysassistant/gladys:v4 une fois la mise à jour déployée !

Si tu veux attendre un peu

Si tu n’es pas chez toi le 26 août et que tu veux éviter que la mise à jour se déroule automatiquement quand tu n’es pas là, tu peux mettre en pause Watchtower d’ici là et relancer Watchtower à ton retour, ce qui t’évitera d’éventuels problèmes que tu ne pourrais pas régler à distance.

Je n’oppose pas SQLite et DuckDB

SQlite est un outil formidable, que l’on continue d’utiliser dans Gladys.

Cependant, pour un cas d’usage précis que nous avons (stockage de donnée time-serie), DuckDB est beaucoup plus adapté.

Pour le reste des tables, SQLite reste la meilleure solution sur le marché pour notre usage, et je reste un convaincu de SQLite !

Je n’oppose donc pas du tout ces deux bases de données, ce sont deux produits radicalement différents :slight_smile:

Merci à ceux qui testeront, j’ai vraiment hâte de voir cette nouvelle techno dans vos mains !

4 « J'aime »

Migration en cours!
image

Pour ma part la base de donnée fait 20Go
image

2 « J'aime »

27 millions !! Incroyable :star_struck:

Hâte de voir ça, tiens nous au courant ici

Migration effectuée en un peu moins d’1h
image

Avant 20Go
image

Avec duckdb 119Mo. Incroyable la différence
image

3 « J'aime »

Et la purge ?

En cours!

1 « J'aime »

Génial tout ça, je me lancerai probablement à partir du 26, avant faut que je debugue mes déconnexions lol.

Super post en tout cas, très clair et informatif !! :+1:

1 « J'aime »

Par contre la purge c’est long…
Heureusement Gladys est toujours fonctionnelle

Oui, c’est voulu ! ça supprime à coup de 1000 lignes, sinon ça bloquerait trop le disque et donc ton Gladys serait pas disponible pendant la purge :slight_smile:

1 « J'aime »

Hello,

Migration en cours pour moi avec une base de 5,2 Go

image

Par contre je n’ai pas accès au suivi sur le tableau de bord et j’ai ceci dans les tâches :

Tu pourrais donner les commandes @pierre-gilles stp ? Du coup le 26/08 ? :
( C’est plus pour éviter de faire une boulette qu’autre choses :slight_smile: )

Je suppose que c’est :

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

Puis relancer un container Gladys avec l’image V4 :

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

Merci :slight_smile:

Edit :

En succès :

Je voudrais juste avoir la confirmation de @pierre-gilles avant de lancer l’étape de la purge :slight_smile:

Edit 2 :

Le boulet :laughing: il fallait aller en local et non sur Gladys plus :

Migration faite en 15 minutes :wink:

Je lance la purge

Au bout d’une heure tout est ok :

Je lance le nettoyage :

La base fait plus que 38Mo :
image

Et la sauvegarde Gladys Plus :
image

1 « J'aime »

Merci d’avoir testé @prohand !

Oui c’est ce que tu as fourni :slight_smile:

Pour la commande Docker c’est la même que sur Installation avec Docker | Gladys Assistant

Yes! Gladys Plus n’a pas encore la version DuckDB, ce n’est pas en prod encore :wink:

Génial :star_struck: Encore un succès !

1 « J'aime »

C’est genial !
De mon coté je n’ai pas testé, j’ai déménagé dans un autre pays, je n’ai pas encore déballé tous les cartons. Nouvelle maison, nouvelle installation à refaire et probablement nouvelle instance de Gladys à venir.
J’ai hâte de tester :hugs:

3 « J'aime »

Bonne installation a toi

1 « J'aime »

@lmilcent Bonne installation :smiley:

1 « J'aime »

nikel chez moi, pas hu de probleme
le seul hic c’est quand je suis repasser a l’ image gladysassistant/gladys:v4 comme indiquer ci dessus.
il n’y a plus de commentaire

Nickel @Marco85 merci d’avoir testé ! Ah non il ne faut surtout pas repasser à l’image v4 tout de suite :sweat_smile: Repasse tout de suite à l’image DuckDB !!

L’image v4 il faudra y repasser uniquement quand j’aurais mis en prod ce développement, le 26 août :slight_smile:

ok c bon je suis repasser à l’image DuckDB

1 « J'aime »

Bonne installation @imilcent,
Je profite de l’occasion pour te demander quel type de sonde tu utilises pour les réfrigérateurs et congélateurs. Je crois me souvenir qu’avec des thermomètres classiques tu consommais beaucoup de piles.
Merci d’avance

1 « J'aime »

@pierre-gilles,
En ce qui concerne la partie :

Serait-il possible de formater Math.abs avec une condition sur le type de la feature en plus, car je me retrouve avec des courbes affreuse lorsque par exemple le vent est faible :
image

Il en sera de même avec les capteurs de distance je suppose.

Effectivement ! Je note ça

1 « J'aime »