Partitionnement Redis
Le partitionnement est le processus de répartition des données sur plusieurs instances Redis, de sorte que chaque instance ne stocke qu'un sous-ensemble des clés.
Avantages du partitionnement
- En tirant parti de la mémoire combinée de plusieurs ordinateurs, il nous permet de construire des bases de données plus grandes.
- Grâce à plusieurs cœurs et plusieurs ordinateurs, il permet de mettre à l'échelle la puissance de calcul ; grâce à plusieurs ordinateurs et cartes réseau, il permet de mettre à l'échelle la bande passante réseau.
Inconvénients du partitionnement
Certaines fonctionnalités de Redis ne fonctionnent pas bien avec le partitionnement :
- Les opérations impliquant plusieurs clés ne sont généralement pas prises en charge. Par exemple, lorsque deux ensembles sont mappés à des instances Redis différentes, vous ne pouvez pas effectuer d'opération d'intersection sur ces deux ensembles.
- Les transactions Redis impliquant plusieurs clés ne peuvent pas être utilisées.
- Lors de l'utilisation du partitionnement, la gestion des données est plus complexe ; par exemple, vous devez gérer plusieurs fichiers RDB/AOF et sauvegarder les fichiers de persistance de plusieurs instances et hôtes.
- L'ajout ou la suppression de capacité est également complexe. Redis Cluster prend principalement en charge l'équilibrage transparent des données lors de l'ajout ou de la suppression de nœuds à l'exécution, mais d'autres systèmes tels que le partitionnement côté client et les proxys ne prennent pas en charge cette fonctionnalité. Cependant, une technique appelée presharding est utile à cet égard.
Types de partitionnement
Redis dispose de deux types de partitionnement. Supposons qu'il y ait 4 instances Redis R0, R1, R2, R3, et plusieurs clés représentant des utilisateurs telles que user:1, user:2. Pour une clé donnée, il existe diverses façons différentes de choisir l'instance dans laquelle la clé est stockée. Autrement dit, il existe différents systèmes pour mapper une clé à un service Redis.
Partitionnement par plage
La façon la plus simple de partitionner est le partitionnement par plage, qui associe une plage d'objets à une instance Redis spécifique.
Par exemple, les utilisateurs avec des ID de 0 à 10000 sont stockés dans l'instance R0, les utilisateurs avec des ID de 10001 à 20000 sont stockés dans R1, et ainsi de suite.
Cette approche est réalisable et utilisée en pratique, mais l'inconvénient est la nécessité d'une table de correspondance des plages vers les instances. Cette table doit être gérée, et des tables de correspondance pour divers objets sont également nécessaires ; en général, ce n'est pas une bonne méthode pour Redis.
Partitionnement par hachage
Une autre méthode de partitionnement est le partitionnement par hachage. Elle fonctionne pour n'importe quelle clé et n'a pas besoin d'être sous la forme object_name:
- Utilisez une fonction de hachage pour convertir la clé en un nombre, par exemple en utilisant la fonction de hachage crc32. L'exécution de crc32(foobar) sur la clé foobar produira un entier comme 93024922.
- Prenez le modulo de cet entier pour le convertir en un nombre entre 0 et 3, puis associez cet entier à l'une des 4 instances Redis. 93024922 % 4 = 2, ce qui signifie que la clé foobar doit être stockée dans l'instance R2. Remarque : l'opération modulo prend le reste de la division, généralement implémentée avec l'opérateur % dans de nombreux langages de programmation.