Utilisez le sharding en écriture pour répartir uniformément les charges de travail entre les partitions - Amazon Keyspaces (pour Apache Cassandra)

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisez le sharding en écriture pour répartir uniformément les charges de travail entre les partitions

L'un des moyens de mieux répartir les écritures sur une partition dans Amazon Keyspaces consiste à étendre l'espace. Vous pouvez effectuer cette opération de plusieurs manières. Vous pouvez ajouter une colonne de clé de partition supplémentaire dans laquelle vous écrivez des nombres aléatoires pour répartir les lignes entre les partitions. Ou vous pouvez utiliser un nombre qui est calculé en fonction d'une information sur laquelle porte la requête.

Sharding à l'aide de clés de partition composées et de valeurs aléatoires

Une stratégie pour répartir les charges de manière plus uniforme sur une partition consiste à ajouter une colonne clé de partition supplémentaire dans laquelle vous écrivez des nombres aléatoires. Vous pouvez alors randomiser les écritures sur l'espace plus important.

Par exemple, considérez le tableau suivant qui contient une clé de partition unique représentant une date.

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, title text, description int, PRIMARY KEY (publish_date));

Pour répartir plus uniformément ce tableau entre les partitions, vous pouvez inclure une colonne de clé de partition supplémentaire shard qui stocke des nombres aléatoires. Par exemple :

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, shard int, title text, description int, PRIMARY KEY ((publish_date, shard)));

Lorsque vous insérez des données, vous pouvez choisir un nombre aléatoire entre 1 et 200 pour la shard colonne. Cela produit des valeurs de clé de partition composées telles que (2020-07-09, 1)(2020-07-09, 2),, et ainsi de suite(2020-07-09, 200). Puisque vous randomisez la clé de partition, les écritures quotidiennes sur la table sont réparties uniformément entre plusieurs partitions. Cela permet un meilleur parallélisme et un débit général plus élevé.

Toutefois, pour lire toutes les lignes d'un jour donné, vous devez rechercher toutes les partitions dans les lignes, puis fusionner les résultats. Par exemple, vous devez d'abord émettre une SELECT instruction pour la valeur de la clé de partition(2020-07-09, 1). Émettez ensuite une autre SELECT déclaration pour(2020-07-09, 2), et ainsi de suite(2020-07-09, 200). Enfin, votre application devra fusionner les résultats de toutes ces SELECT instructions.

Sharding à l'aide de clés de partition composées et de valeurs calculées

Une stratégie de randomisation peut considérablement améliorer le débit d'écriture. Mais il est difficile de lire une ligne spécifique car vous ne savez pas quelle valeur a été écrite dans la shard colonne au moment où la ligne a été écrite. Pour faciliter la lecture des lignes individuelles, vous pouvez utiliser une autre stratégie. Au lieu d'utiliser un nombre aléatoire pour répartir les lignes entre les partitions, utilisez un nombre que vous pouvez calculer en fonction de l'élément sur lequel vous souhaitez effectuer une requête.

Considérons l'exemple précédent, dans lequel une table utilise la date du jour dans la clé de partition. Supposons maintenant que chaque ligne possède une title colonne accessible et que vous ayez le plus souvent besoin de rechercher les lignes par titre en plus de leur date. Avant que votre application n'écrive la ligne dans la table, elle peut calculer une valeur de hachage en fonction du titre et l'utiliser pour remplir la shard colonne. Le calcul peut se traduire par un nombre compris entre 1 et 200 assez uniformément distribué, à l'image de ce que la stratégie de randomisation produit.

Un simple calcul suffirait probablement, tel que le produit des valeurs de UTF -8 points de code pour les caractères du titre, modulo 200, + 1. La valeur de la clé de partition composée serait alors la combinaison de la date et du résultat du calcul.

Avec cette stratégie, les écritures sont réparties uniformément entre les valeurs de clé de partition, et de ce fait entre les partitions physiques. Vous pouvez facilement exécuter une SELECT instruction pour une ligne et une date spécifiques, car vous pouvez calculer la valeur de la clé de partition pour une title valeur spécifique.

Pour lire toutes les lignes d'un jour donné, vous devez toujours SELECT chacune des (2020-07-09, N) clés (1 N à 200), et votre application doit ensuite fusionner tous les résultats. L'avantage est que vous évitez qu'une valeur de clé de partition « critique » ne prenne l'ensemble de la charge de travail.