18 juillet 2020

Base de données trop grosse


Elèves

Je ne mets aucune limite à mes applications. Il n’y a pas de limite au nombre d’élèves que peut contenir la base de données des élèves, il n’y a pas de limite au nombre de photos, au nombre d’items à valider.

Cependant, même si je n’ai pas mis de limite, cela ne veut pas dire qu’il n’y en a pas ! De la même façon que la taille de la Terre limite l’expansion économique mondiale, l’iPad limite mes applications à ce qu’il est capable de faire.

Jusqu’à présent je n’avais pas vu cette limite en dehors de bugs, mais j’ai récemment reçu une base de données approchant les 3Go avec plus de 100 élèves et des centaines de photos par élève. Cette base faisait planter certaines de mes applications.

Nettoyage de base

Evidemment, la première chose que j’ai faite est d’essayer un nettoyage de la base de données. Il faut savoir que lorsque vous supprimez un élément de la base de données, l’espace de stockage n’est pas libéré et qu’il faut faire un nettoyage pour cela. La raison pour laquelle le nettoyage n’est pas automatique est que c’est une opération longue et qu’il faut donc la faire lorsque l’on en a besoin.

Mais le nettoyage plantait l’application Elèves ! Comme cette opération est une opération de base, je ne peux rien faire pour l’améliorer, il n’y avait pas moyen de corriger le bug, l’iPad est tout simplement un ordinateur trop peu puissant pour cette opération avec une base de données de plusieurs Giga-octets.

Je crois que l’on peut considérer qu’une base qui dépasse 1Go est trop grosse. Vous pouvez connaitre la taille de votre base de données dans l’application Elèves / BASES / Zone verte.

Suppression des élèves

Lorsque vous supprimez un élève, celui-ci n’est pas vraiment supprimé de la base de données, je garde l’élève de côté pour pouvoir le récupérer si celui-ci a été supprimé par erreur (par exemple par un élève), il est donc juste noté "invisible" et il faut une action supplémentaire pour le supprimer vraiment.

Lorsqu’une nouvelle année commence, certains enseignants, à la place de créer une nouvelle base de données vont supprimer les élèves un à un mais sans faire l'opération de suppression définitive.

Donc, d’année en année, la base grandit, c’était la cas de la base de données qui posait problème, non seulement l’école avait mis 5 classes en se servant des groupes (donc une centaine d’élèves), mais en plus la base contenait les élèves de l’année précédente (qui avaient été supprimés).

Pour supprimer définitivement les élèves, vous devez aller dans l’application Elèves (Actions rares) ou l’application Elèves-mini (Actions).

J’ai donc supprimé définitivement les élèves déjà supprimés, ce qui a allégé la base de la moitié de ses données.

Le problème c’est que la base n’est pas nettoyée après la suppression définitive d’un élève et donc cela n’arrange pas notre le problème de la taille du fichier. Les données dans la base font 1,5Go mais le fichier reste un fichier de 3Go.

Taille des photos

Une autre raison qui conduit à une taille de base de données des élèves importante est la résolution des photos. Selon les applications et les réglages (et les sources) les photos peuvent faire plusieurs Mo chacune. Mais la plupart du temps, vous n’avez pas besoin d’une résolution importante, les photos sont destinées à être imprimées sous la forme de petites vignettes dans les bilans.

C’est pourquoi j’ai ajouté une fonctionnalité dans Elèves (encore en bêta à l’heure de cet article) qui est la réduction des photos ayant une trop grande résolution (dans actions rares).

SQLite

Même après la suppression définitives des élèves et la réduction des photos les bases de données ne pouvaient pas être nettoyées sur l’iPad. J’ai donc dû l’importer sur mon Mac et faire l’opération sur celui-ci.

Les fichiers ”.eleves-shared” sont en fait des base de données SQLite3 qui est un outil de base de données SQL.

https://www.sqlite.org/index.html

Sur Mac et sur Linux vous avez SQLite installé par défaut, sous Windows je pense qu’il faut l’installer mais ce produit est totalement gratuit.

Il suffit, en ligne de commande d’écrire :

sqlite save.eleve-shared < VACUUM

Pour réduire la taille de la base de données. L’opération enlève les trous laissés par les suppressions de données.

Conclusion

La base de données de 3Go, une fois nettoyée, faisait 500Mo, soit 6 fois moins. Une fois installée à la place de la base de 3Go, toutes les fonctionnalités de toutes les applications fonctionnaient parfaitement.

Donc, à la nouvelle année, pensez à :

  • Exportez un à un tous les élèves pour avoir une sauvegarde de chacun d’eux.
  • Créez une nouvelle base ”vierge”.
  • Importez les élèves que vous gardez.
  • Créez les fiches des nouveaux élèves.

Ainsi votre base de données restera d’une taille raisonnable même avec 100 élèves. Mes applications fonctionnent parfaitement avec des données raisonnables. Vous pouvez suivre une classe de 30 élèves sur 4 ans, ou avoir 100 élèves pendant un an, mais évitez de flirter avec les limites. Pour savoir où vous en êtes avec votre base, regardez son poids dans Elèves, si vous dépassez les 1Go commencez par supprimer définitivement les élèves et par nettoyer la base.

PS

La synchronisation des deux iPads avec Elèves commence par un nettoyage des bases. Si une base est trop grosse l’application risque donc de planter.

Emmanuel CROMBEZ