MongoDB : qu’est qu’une bonne clé de sharding ?

mongodb-nosql-logo

MongoDB est un système de gestion de base de données NoSQL, orienté document ne nécessitant pas de schéma, ce qui signifie que les données peuvent être enrichies à la volée sans reconfiguration ou modification de base. Les objets manipulés sont au format BSON (JSON Binaire).
De par ses caractéristiques, MongoDB intervient dans des applications où la volumétrie des données est importante et la structuration des données fluctuante.

Le support de la scalabilité horizontale pèse souvent dans le choix de MongoDB au moment de la mise en place de l'architecture d'une application.
La scalabilité horizontale permet de répartir les données de la base sur des shards différents. Un shard est une partition permettant de stocker des données. Les shards peuvent être localisés sur un même serveur ou sur des serveurs différents.
Cette répartition de données entre les différents shards se fait sur la base d'une clé de sharding choisie par l'utilisateur.
Voici donc quelques conseils pour faire le bon choix.

  • Conseil 1 : la clé de sharding doit être immutable et présente dans les documents en question. Ça paraît évident mais comme il n'y a pas de schéma, il faut rester vigilant sur ce point, principalement lors des opérations de normalisation et de restructuration des collections.
  • Conseil 2 : la clé de sharding doit avoir une cardinalité suffisante. Il faut qu'il y ait un nombre suffisant de valeurs distinctes pour que chaque shard soit utilisé de façon uniforme. Admettons que vous disposiez de 100 shards pour stocker vos données, si vous avez 7 valeurs distinctes pour votre clé de sharding, c'est que ce n'est pas le bon choix pour votre clé de sharding.
  • Conseil 3 : la clé de sharding doit éviter d'arriver au phénomène de "hot-spotting" lors des opérations d'écriture. Cette situation se produit lorsque écriture après écriture, la clé de sharding entraîne toujours l'écriture du document sur le même shard. C'est typiquement le cas lorsque la clé est croissante de façon monotone : par exemple la date actuelle. Même si le timestamp représentant la date actuelle est distinct, il augmente inexorablement de façon monotone. MongoDB n'est donc pas en mesure de construire des plages de ranges ni une distribution sur une telle clé. Cela va donc se traduire inéluctablement par une sous-utilisation du 1er shard et des goulots d'étranglement sur le second shard.
  • Conseil 4 : lors du choix de la clé, pensez à vos patterns d'accès données. La clé de sharding doit être incluse dans toutes les écritures (sinon MongoDB ne saura pas où stocker le document) et dans la plupart des opérations de lecture. L'objectif est d'optimiser les performances des requêtes en permettant au mongo (routeur de sharding) d'aller adresser directement le bon shard. Une opération de lecture doit conduire à aller interroger un et un seul shard : c'est la cible. Ainsi, sur un site de vente en ligne (e-commerce), une bonne clé de sharding est le nom ou l'identifiant technique de l'utilisateur.
  • Conseil 5 : la clé de sharding doit permettre le plus possible de paralléliser les opérations et d'avoir un bon support aux opérations concurrentes. Si on reprend l'exemple du site e-commerce, une répartition selon l'utilisateur permet de tenir la charge car même s'il y a de nombreuses requêtes, elles seront prises en charge par des shards différents (répartition de la charge équitable entre les shards).

Voici donc les 5 conseils que je vous recommande d'avoir en tête au moment du choix de votre clé.

Un commentaire

  1. Bonjour,

    Merci pour ces conseils sur le choix de la clé de sharding. J’ai cependant un problème et j’espère pouvoir trouver de l’aide avec vous.

    Je dois mettre en place un sharded cluster constitué de 2 shards pour stocker des logs d’une certaine plateforme. On me demande de dédier un nœud à la lecture. Je ne sais pas vraiment comment le faire. Est-ce que la solution se trouve dans le bon choix de la clé de sharding? Si oui, comment faire? Sinon, comment pourrais-je le faire autrement?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.