Le sharding est presque l'antithèse de la réplication, bien qu'il s'agisse de concepts orthogonaux et qu'ils fonctionnent bien ensemble.
Le sharding, également connu sous le nom de partitionnement, divise les données par clé; Alors que la réplication, également appelée mise en miroir, consiste à copier toutes les données.
Le partitionnement est utile pour augmenter les performances, en réduisant les accès et la charge de la mémoire sur une ressource donnée. La réplication est utile pour obtenir une haute disponibilité des lectures. Si vous lisez à partir de plusieurs répliques, vous réduisez également le taux de succès sur toutes les ressources, mais les besoins en mémoire pour toutes les ressources restent les mêmes. Il convient de noter que, bien que vous puissiez écrire sur un esclave, la réplication est maître-> esclave uniquement. Vous ne pouvez donc pas mettre à l'échelle les écritures de cette façon.
Supposons que vous ayez les tuples suivants :[1:Apple], [2:Banana], [3:Cherry], [4:Durian] et que nous ayons deux machines A et B. Avec Sharding, nous pourrions stocker les clés 2,4 sur appareil A ; et les clés 1,3 sur la machine B. Avec la réplication, nous stockons les clés 1,2,3,4 sur la machine A et 1,2,3,4 sur la machine B.
Le sharding est généralement mis en œuvre en effectuant un hachage cohérent sur la clé. L'exemple ci-dessus a été implémenté avec la fonction de hachage suivante h(x){return x%2==0?A:B}.
Pour combiner les concepts, nous pourrions répliquer chaque fragment. Dans les cas ci-dessus, toutes les données (2,4) de la machine A pourraient être répliquées sur la machine C et toutes les données (1,3) de la machine B pourraient être répliquées sur la machine D.
Tout magasin clé-valeur (dont Redis n'est qu'un exemple) prend en charge le partitionnement, bien que certaines fonctions de clé croisée ne fonctionnent plus. Redis prend en charge la réplication prête à l'emploi.