En informatique, beaucoup de problèmes se posent lorsqu’on essaie de scaler. Faire grossir un système sans perdre ses qualités est même particulièrement difficile. Car il ne suffit pas d’ajouter des ressources matérielles ou humaines, il faut aussi résoudre tout un tas de nouveaux problèmes qu’on a pas avec de petits systèmes. Les bases de données sont au cœur de ces questions de scalabilité.
Lorsqu’il faut faire grossir une base de données, les besoins sont :
- De stocker plus de données
- D’interroger plus de données
- De ne pas perdre de performance
- De grossir de façon transparente pour les utilisateurs
- De pouvoir aussi réduire la voilure si les conditions l’imposent
Comme chacun des points précédents à un impact sur les autres, il ne suffit pas de pousser sur un bouton. Tous les éléments sont interdépendants. La réponse technologique n’est qu’une partie de la solution. Il y a forcément une réponse humaine et de conception / design.
Faisons une analogie avec une bibliothèque. Le but est de fournir des livres à des lecteurs. Voici plusieurs problématiques de croissance.
Avoir plus de livres
Passer de 1000 livres à 100000 livres entraîne des problèmes de stockage. Il faut que tout soit toujours aussi bien rangé, accessible facilement. On a ici surtout un problème de place. Il faut plus de place pour stocker. Stocker plus n’entraîne pas forcément des coûts linéaires et il faut parfois trouver des solutions qui permettent de stocker plus d’une autre façon pour ne pas faire exploser ses coûts. Dans la vraie vie, ça peut être des archives, des armoires sur rail avec manivelle, des étagères plus hautes, de la numérisation, des bâtiments supplémentaires…
Accueillir plus de monde
Ici, on a un problème de « tuyau ». Si la bibliothèque est trop petite, les utilisateurs ne peuvent pas tous passer par la porte, ni se déplacer dans les rayons. Ça fait la queue, l’expérience est déplaisante et les utilisateurs se plaignent. Rajouter des portes ou agrandir les allées corrigent momentanément le problème. Le goulot d’étranglement se trouve ailleurs : au guichet pour enregistrer les livres empruntés, dans les rayons désormais vide du livre souhaité…
Mettre à disposition le même livre à plusieurs personnes
Imaginons qu’un livre soit très populaire. S’il est emprunté, que faire pour satisfaire les autres utilisateurs ? On peut en avoir plusieurs en stock (il faut alors gérer les versions), on peut mettre en place un système de réservation (selon quelles règles et quelles priorités). On peut aussi, pour éviter les bouchons dans certaines allées, disséminer le même livre à différents endroits mais il faut alors revoir le système de rangement. Il est encore possible de photocopier tous les livres et les mettre à disposition dans d’autres bibliothèques mais on se retrouve confronté à des problèmes de synchronisation qui surviennent et qu’il faut traiter.
Trouver le bon livre parmi beaucoup de livres
Rechercher un livre parmi un petit nombre de livres se fait de façon simple : avec un rangement alphabétique. On peut aussi utiliser une classification normalisée. Mais lorsque le nombre de livres est trop important, il faut aller plus loin. Il faut proposer des interfaces permettant des recherches par titre, auteur, éditeur, date, sujet, type de support, lieu… Les livres, pour être trouvables physiquement, doivent être correctement indexés pour pouvoir être trouvé facilement et physiquement identifié au bon endroit. Avant, ça se faisait via des cartes papier qu’il fallait elles aussi classées…
Ajouter des livres
Les livres sont tous bien rangés à leur place dans les rayonnages. Si on ajoute des livres, il faut les ranger à la bonne place et les intercaler au milieu de rayonnages souvent déjà bien pleins. Comment faire lorsqu’il n’y a pas assez de place même en poussant les livres adjacents ? Par effet ricochet, tous les autres livres bougent. Pour pouvoir ranger un rayonnage, il ne faut pas que d’autres livres entrent et sortent en même temps, sinon c’est la zizanie. En même temps, attendre qu’un rayon soit rangé génère des livres en attente de rangement : ces livres sont disponibles mais pas en rayon. Ça génère de nouveaux problèmes.
Dans la vraie vie, ces problèmes de bibliothèque se gèrent bien. En informatique, on a tous ces problèmes avec les bases de données sauf que le volume à traiter est souvent très important (beaucoup de données, beaucoup d’utilisateurs, beaucoup de modifications le tout dans des intervalles très courts) et que ça génère de vrais problèmes techniques auxquels s’ajoutent des questions de coûts et satisfaction utilisateur.