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.
Utiliser des relevés par lots dans Amazon Keyspaces
Vous pouvez combiner plusieurs DELETE opérations INSERTUPDATE, et dans une BATCH instruction. LOGGEDles lots sont utilisés par défaut.
batch_statement ::= BEGIN [ UNLOGGED ] BATCH [ USING update_parameter( AND update_parameter)* ] modification_statement ( ';' modification_statement )* APPLY BATCH modification_statement ::= insert_statement | update_statement | delete_statement
Lorsque vous exécutez une instruction par lots, le pilote combine toutes les instructions du lot en une seule opération par lots.
Pour choisir le type d'opération par lots à utiliser, vous pouvez prendre en compte les directives suivantes.
- Utilisez des lots enregistrés lorsque :
-
-
Vous avez besoin de garanties de transactions atomiques.
-
Des latences légèrement plus élevées constituent un compromis acceptable.
-
- Utilisez des lots non enregistrés lorsque :
-
-
Vous devez optimiser les opérations à partition unique.
-
Vous souhaitez réduire la surcharge réseau.
-
Vous avez des exigences en matière de débit élevé.
-
Pour plus d'informations sur les quotas des relevés de lots, consultezQuotas pour Amazon Keyspaces (pour Apache Cassandra).
Lots non enregistrés
Avec les lots non enregistrés, Amazon Keyspaces traite plusieurs opérations en une seule demande sans tenir de journal des lots. Dans le cas d'une opération par lots non journalisée, il est possible que certaines actions aboutissent alors que d'autres échouent. Les lots non enregistrés sont utiles lorsque vous souhaitez :
-
Optimisez les opérations au sein d'une seule partition.
-
Réduisez le trafic réseau en regroupant les demandes associées.
La syntaxe d'un lot non journalisé est similaire à celle d'un lot enregistré, avec l'ajout du UNLOGGED mot clé.
BEGIN UNLOGGED BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith'); APPLY BATCH;
Lots enregistrés
Un lot enregistré combine plusieurs actions d'écriture en une seule opération atomique. Lorsque vous exécutez un lot enregistré :
-
Toutes les actions réussissent ensemble ou échouent ensemble.
-
Le fonctionnement est synchrone et idempotent.
-
Vous pouvez écrire sur plusieurs tables Amazon Keyspaces, à condition qu'elles se trouvent dans le même AWS compte et. Région AWS
Les lots enregistrés peuvent avoir des latences légèrement plus élevées. Pour les applications à haut débit, pensez à utiliser des lots non enregistrés.
L'utilisation de lots enregistrés dans Amazon Keyspaces n'entraîne aucun coût supplémentaire. Vous ne payez que pour les écritures faisant partie de vos opérations par lots. Amazon Keyspaces effectue deux écritures sous-jacentes de chaque ligne du lot : une pour préparer la ligne pour le lot et une pour valider le lot. Lorsque vous planifiez la capacité des tables qui utilisent des lots enregistrés, n'oubliez pas que chaque ligne d'un lot nécessite deux fois la capacité d'une opération d'écriture standard. Par exemple, si votre application exécute un lot enregistré par seconde avec trois lignes de 1 Ko, vous devez prévoir six unités de capacité d'écriture (WCUs) contre trois seulement WCUs pour les écritures individuelles ou les lots non enregistrés.
Pour plus d'informations sur les tarifs, consultez les tarifs d'Amazon Keyspaces (pour Apache Cassandra
Bonnes pratiques pour les opérations par lots
Tenez compte des pratiques recommandées suivantes lors de l'utilisation des opérations par lots Amazon Keyspaces.
-
Activez le dimensionnement automatique pour vous assurer que vous disposez d'une capacité de débit suffisante pour que vos tables puissent gérer les opérations par lots et répondre aux exigences de débit supplémentaires des lots enregistrés.
-
Utilisez des opérations individuelles ou des lots non enregistrés lorsque les opérations peuvent être exécutées indépendamment sans affecter l'exactitude de l'application.
-
Concevez votre application de manière à minimiser les mises à jour simultanées sur les mêmes lignes, car les opérations par lots simultanées peuvent être conflictuelles et échouer.
-
Pour une ingestion de données en masse à haut débit sans exigence d'atomicité, utilisez des opérations d'écriture individuelles ou des lots non enregistrés.
Cohérence et simultanéité
Amazon Keyspaces applique les règles de cohérence et de simultanéité suivantes pour les lots enregistrés :
-
Toutes les opérations par lots utilisent le niveau de
LOCAL_QUORUMcohérence. -
Les lots simultanés affectant différentes lignes peuvent être exécutés simultanément.
Les
DELETEopérationsUPDATEsimultanéesINSERTou sur les lignes impliquées dans un lot en cours échouent en raison d'un conflit.
Opérateurs et conditions pris en charge
- Opérateurs de
WHEREclauses pris en charge : -
Égalité (=)
- Opérateurs non pris en charge :
-
Opérateurs de plage (>, <, >=, <=)
Opérateur
INOpérateur
LIKEOpérateur
BETWEEN
- Non pris en charge dans les lots enregistrés :
-
Plusieurs instructions affectant la même ligne
Contre-opérations
Supprime une plage
Conditions de défaillance des relevés de lots enregistrés
Une opération par lots enregistrée peut échouer dans l'un des cas suivants :
-
Les expressions de condition (comme
IF NOT EXISTSouIF) ont la valeur fausse. -
Une ou plusieurs opérations contiennent des paramètres non valides.
-
La demande est en conflit avec une autre opération par lots exécutée sur les mêmes lignes.
-
La table ne dispose pas d'une capacité provisionnée suffisante.
-
Une ligne dépasse la limite de taille maximale.
-
Le format des données d'entrée n'est pas valide.
Relevés par lots et réplication multirégionale
Dans les déploiements multirégionaux :
-
Les opérations de la région source sont synchrones et atomiques.
-
Les opérations de la région de destination sont asynchrones.
-
La réplication de toutes les opérations par lots est garantie, mais il est possible que l'isolement ne soit pas maintenu pendant l'application.
Surveiller les opérations par lots
Vous pouvez surveiller les opérations par lots à l'aide CloudWatch des métriques Amazon pour suivre les performances, les erreurs et les modèles d'utilisation. Amazon Keyspaces fournit les CloudWatch statistiques suivantes pour surveiller les opérations par lots par table :
SuccessfulRequestCount— Suivez les opérations par lots réussies.Latency— Mesurez les performances des opérations par lots.ConsumedWriteCapacityUnits— Surveillez la consommation de capacité des opérations par lots.
Pour de plus amples informations, veuillez consulter Métriques Amazon Keyspaces.
Outre les CloudWatch statistiques, vous pouvez les utiliser AWS CloudTrail pour enregistrer toutes les actions de l'API Amazon Keyspaces. Chaque action d'API du lot est enregistrée, CloudTrail ce qui facilite le suivi et l'audit des opérations par lots dans vos tables Amazon Keyspaces.
Exemples d'opérations par lots
Voici un exemple d'instruction de lot enregistrée de base.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith'); APPLY BATCH;
Il s'agit d'un exemple de lot qui inclut des DELETE instructions INSERTUPDATE, et.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); UPDATE users SET firstname = 'Johnny' WHERE id = 2; DELETE FROM users WHERE id = 3; APPLY BATCH;
Il s'agit d'un exemple de lot utilisant des horodatages côté client.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Stiles') USING TIMESTAMP 1669069624; INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Doe') USING TIMESTAMP 1669069624; APPLY BATCH; BEGIN BATCH UPDATE users USING TIMESTAMP 1669069624 SET firstname = 'Carlos' WHERE id = 1; UPDATE users USING TIMESTAMP 1669069624 SET firstname = 'Diego' WHERE id = 2; APPLY BATCH;
Il s'agit d'un exemple de lot conditionnel.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'Jane', 'Doe') IF NOT EXISTS; INSERT INTO users (id, firstname, lastname) VALUES (2, 'John', 'Doe') IF NOT EXISTS; APPLY BATCH; BEGIN BATCH UPDATE users SET lastname = 'Stiles' WHERE id = 1 IF lastname = 'Doe'; UPDATE users SET lastname = 'Stiles' WHERE id = 2 IF lastname = 'Doe'; APPLY BATCH;
Voici un exemple de batch utilisant Time to Live (TTL).
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe') USING TTL 3600; INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith') USING TTL 7200; APPLY BATCH;
Il s'agit d'un exemple d'instruction batch qui met à jour plusieurs tables.
BEGIN BATCH INSERT INTO users (id, firstname) VALUES (1, 'John'); INSERT INTO user_emails (user_id, email) VALUES (1, 'john@example.com'); APPLY BATCH;
Il s'agit d'un exemple d'opération par lots utilisant des types définis par l'utilisateur (UDTs). L'exemple suppose que l'UDT address existe.
BEGIN BATCH INSERT INTO users (id, firstname, address) VALUES (1, 'John', {street: '123 Main St', city: 'NYC', zip: '10001'}); INSERT INTO users (id, firstname, address) VALUES (2, 'Jane', {street: '456 Oak Ave', city: 'LA', zip: '90210'}); APPLY BATCH; BEGIN BATCH UPDATE users SET address.zip = '10002' WHERE id = 1; UPDATE users SET address.city = 'Boston' WHERE id = 2; APPLY BATCH;