Stocker des données dans un fichier ou une BDD ?
Est-ce nécessaire de stocker systématiquement vos données dans une base de données ? Quand est-ce qu'un simple fichier est suffisant ?
Article publié le 02/03/2022, dernière mise à jour le 03/04/2024
C'est une question que je vois régulièrement revenir chez les développeurs et développeuses juniors et à laquelle je vais essayer de répondre le plus clairement possible aujourd'hui.
Si la question peut paraitre basique, elle renferme en réalité toutes les subtilités du fonctionnement interne des différents systèmes de gestion de bases de données, et leur raison d'exister.
Pour commencer, voyons ce que l'on peut faire avec un simple fichier stocké sur un système d'exploitation.
Stocker dans un fichier
Lorsque l'on prend l'habitude de monter de nouveaux projets rapidement, on en oublie parfois que le stockage de données peut simplement se résumer à écrire quelques lignes dans un simple fichier.
Car après tout, c'est à cela que servent les fichiers depuis leur création, à stocker des données !
Que ce soit manuellement ou de manière programmatique, l'utilisation reste accessible : on ouvre le fichier, on ajoute les données et on le referme. Simple, efficace, et en général très peu consommateur de ressources.
Et pour aller plus loin, plusieurs applications (disons plusieurs processus) peuvent même lire les données simultanément, et ces dernières peuvent même être formatées en XML, JSON, CSV,... afin de faciliter la représentation de ces informations !
Si vous voulez en savoir plus sur les différents formats de fichiers pour stocker des données, je vous conseille de lire mon article sur le sujet.
Mais alors au final, pourquoi utiliser une base de données ?
Utiliser une base de données
Combien d'informations, et quelle fréquence ?
Les deux principales raisons pour lesquelles vous devez vous orienter vers une base de donnée plutôt que vers une simple fichier sont : la quantité de données et la fréquence de modification.
Comme vu précédemment, un fichier peut être consulté de manière concurrente, mais non modifié. Dès qu'un fichier est ouvert par un processus, il est bloqué (on pose un verrou) tant que ce processus n'a pas fini d'écrire.
Les bases de données (la majorité d'entre-elles) possèdent des systèmes d'écritures concurrentes et même des transactions afin de conserver la cohérence des données.
Si le terme de transaction ne vous est pas familier, je l'explique en détail dans cet article.
Si un fichier devient trop lourd, ou qu'il est modifié trop souvent, les performances de votre application peuvent en souffrir.
Normalisation, liens logiques et recherche
Si l'on a évoqué le fait que les fichiers peuvent suivre des formats de données, ça n'en fait pas pour autant des données normalisées et structurées.
C'est uniquement en ayant recours à un moyen de stockage plus complexe comme une base de données, que l'on va être capable de faire des liens logiques entre les informations et surtout effectuer des recherches complexes sur les dernières (requêtes), ce qui va donner une valeur bien plus intéressante à vos données !
Les informations ci-dessus sont surtout valables pour les bases de données dîtes "relationnelles", mais elles peuvent également être appliquées dans certains modèles non-relationnels.
Si vous voulez apprendre à choisir entre une base de données "SQL" ou "NoSQL", j'ai un article qui devrait vous aider !
Un exemple concret
Il y a quelques années un très bon exemple démontrant une mauvaise utilisation d'un simple fichier afin de stocker des données est apparu dans le monde du jeu vidéo.
Le jeu "GTA Online" souffrait de temps de chargements anormalement longs au lancement initial du jeu. Après quelques recherches un "hacker" a réussi à réduire de 70% le temps de chargement, simplement dû à un fichier de configuration JSON qui pesait... 10Mo et contenant plus de 60000 objets.
La lecture et le "parsing" de ce fichier était devenu bien trop lourd, et plus suffisamment optimisé, pour l'application d'origine.
La prochaine fois, une simple base SQLite pourra faire l'affaire !
En résumé
Avec un fichier :
- On stocke des données
- On peut lire simultanément
- On peut formater les données
- C'est facile d'utilisation et consomme (normalement) peu de ressources
Avec une base de données :
- On stocke une plus grande quantité de données
- On peut lire ET écrire de manière concurrente
- On peut effectuer des recherches (requêtes) beaucoup plus complexes et optimisées
- On peut normaliser et lier les données entre-elles
Aucun commentaire pour l'instant