View a markdown version of this page

Verwenden Sie Batch-Anweisungen in Amazon Keyspaces - Amazon Keyspaces (für Apache Cassandra)

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie Batch-Anweisungen in Amazon Keyspaces

Sie können mehrere INSERTUPDATE, und DELETE -Operationen in einer BATCH Anweisung kombinieren. LOGGEDBatches sind die Standardeinstellung.

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

Wenn Sie eine Batch-Anweisung ausführen, fasst der Treiber alle Anweisungen im Batch zu einer einzigen Batch-Operation zusammen.

Bei der Entscheidung, welche Art von Batchoperation verwendet werden soll, können Sie die folgenden Richtlinien berücksichtigen.

Verwenden Sie protokollierte Batches, wenn:
  • Sie benötigen atomare Transaktionsgarantien.

  • Etwas höhere Latenzen sind ein akzeptabler Kompromiss.

Verwenden Sie nicht protokollierte Stapel, wenn:
  • Sie müssen den Betrieb mit einer Partition optimieren.

  • Sie möchten den Netzwerk-Overhead reduzieren.

  • Sie haben hohe Durchsatzanforderungen.

Hinweise zu Kontingenten für Batch-Kontoauszüge finden Sie unterKontingente für Amazon Keyspaces (für Apache Cassandra).

Nicht protokollierte Stapel

Bei nicht protokollierten Batches verarbeitet Amazon Keyspaces mehrere Vorgänge als eine einzige Anfrage, ohne ein Batch-Protokoll zu führen. Bei einem nicht protokollierten Batch-Vorgang ist es möglich, dass einige der Aktionen erfolgreich sind, während andere fehlschlagen. Stapel ohne Protokollierung sind nützlich, wenn Sie:

  • Optimieren Sie den Betrieb innerhalb einer einzelnen Partition.

  • Reduzieren Sie den Netzwerkverkehr, indem Sie verwandte Anfragen gruppieren.

Die Syntax für einen nicht protokollierten Stapel ähnelt der eines protokollierten Batches, allerdings mit dem Zusatz eines SchlüsselwortsUNLOGGED.

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;

Geloggte Stapel

Ein protokollierter Batch kombiniert mehrere Schreibaktionen zu einer einzigen atomaren Operation. Wenn Sie einen protokollierten Batch ausführen:

  • Alle Aktionen sind entweder zusammen erfolgreich oder schlagen zusammen fehl.

  • Die Operation ist synchron und idempotent.

  • Sie können in mehrere Amazon Keyspaces-Tabellen schreiben, solange sie sich im selben Konto befinden und. AWS AWS-Region

Protokollierte Batches können etwas höhere Latenzen aufweisen. Für Anwendungen mit hohem Durchsatz sollten Sie erwägen, nicht protokollierte Batches zu verwenden.

Für die Verwendung protokollierter Batches in Amazon Keyspaces fallen keine zusätzlichen Kosten an. Sie zahlen nur für die Schreibvorgänge, die Teil Ihrer Batch-Operationen sind. Amazon Keyspaces führt zwei grundlegende Schreibvorgänge für jede Zeile im Batch durch: einen, um die Zeile für den Batch vorzubereiten, und einen, um den Batch zu übertragen. Denken Sie bei der Kapazitätsplanung für Tabellen, die protokollierte Batches verwenden, daran, dass jede Zeile in einem Batch die doppelte Kapazität eines Standard-Schreibvorgangs benötigt. Wenn Ihre Anwendung beispielsweise einen protokollierten Batch pro Sekunde mit drei 1-KB-Zeilen ausführt, müssen Sie sechs Schreibkapazitätseinheiten (WCUs) bereitstellen, anstatt nur drei WCUs für einzelne Schreibvorgänge oder nicht protokollierte Batches.

Informationen zur Preisgestaltung finden Sie unter Preise für Amazon Keyspaces (für Apache Cassandra).

Verwenden Sie vorbereitete Kontoauszüge in protokollierten Batches

Protokollierte Batches unterstützen vorbereitete (gebundene) Anweisungen mit vollständiger atomarer Ausführung (Alles-oder-Nichts). Sie können die Leistung vorbereiteter Anweisungen mit den Atomizitätsgarantien eines protokollierten Batches kombinieren.

Sie können einen protokollierten Stapel vorbereiteter Anweisungen auf zwei Arten erstellen. Die folgenden Beispiele verwenden einen Java-Treiber, der mit Apache Cassandra kompatibel ist.

Bei der ersten Methode bereiten Sie jede Anweisung einzeln vor und fügen die gebundenen Anweisungen zu a BatchStatement hinzu. Dieser Ansatz unterstützt Batches, die sich über mehrere Tabellen in demselben AWS Konto und AWS-Region erstrecken. Das folgende Java-Codebeispiel zeigt diesen Ansatz:

import com.datastax.driver.core.BatchStatement; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Session; PreparedStatement psInsert = session.prepare( "INSERT INTO my_keyspace.orders (order_id, status) VALUES (?, ?)"); PreparedStatement psUpdate = session.prepare( "UPDATE my_keyspace.inventory SET qty = ? WHERE sku = ?"); BatchStatement batch = new BatchStatement(BatchStatement.Type.LOGGED); batch.add(psInsert.bind(orderId, "CONFIRMED")); batch.add(psUpdate.bind(newQty, sku)); try { session.execute(batch); } catch (Exception e) { // Handle the batch execution error. }

Beim zweiten Ansatz bereiten Sie einen ganzen BEGIN BATCH ... APPLY BATCH Block als einzelne Anweisung vor, binden ihn dann und führen ihn aus. Dieser Ansatz eignet sich am besten für einen Batch, dessen Anweisungen auf eine einzelne Tabelle abzielen. Verwenden Sie den ersten Ansatz, um einen Batch vorzubereiten, der sich über mehrere Tabellen erstreckt. Das folgende Java-Codebeispiel zeigt, wie ein ganzer Batchblock als einzelne Anweisung vorbereitet wird:

import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Session; PreparedStatement psBatch = session.prepare( "BEGIN BATCH " + " INSERT INTO my_keyspace.orders (order_id, status) VALUES (?, ?); " + " INSERT INTO my_keyspace.orders (order_id, status) VALUES (?, ?); " + "APPLY BATCH"); try { session.execute(psBatch.bind(orderId1, "CONFIRMED", orderId2, "PENDING")); } catch (Exception e) { // Handle the batch execution error. }

Sie können vorbereitete Anweisungen auch in einem protokollierten Batch wie folgt verwenden:

  • Bedingte Anweisungen (IF NOT EXISTSoderIF)

  • Benannte Bindungsmarkierungen

  • Eine Mischung aus vorbereiteten und unvorbereiteten Anweisungen in derselben Charge

  • Wiederverwendung einer einzelnen vorbereiteten Abrechnung mit unterschiedlichen Grenzwerten für den gesamten Stapel

Bewährte Verfahren für Batch-Operationen

Beachten Sie bei der Verwendung von Amazon Keyspaces-Batchoperationen die folgenden empfohlenen Verfahren.

  • Aktivieren Sie die automatische Skalierung, damit Ihre Tabellen über eine ausreichende Durchsatzkapazität verfügen, um Batch-Operationen und die zusätzlichen Durchsatzanforderungen protokollierter Batches abzuwickeln.

  • Verwenden Sie einzelne Operationen oder nicht protokollierte Batches, wenn Vorgänge unabhängig voneinander ausgeführt werden können, ohne die Richtigkeit der Anwendung zu beeinträchtigen.

  • Entwerfen Sie Ihre Anwendung so, dass die Anzahl gleichzeitiger Aktualisierungen derselben Zeilen minimiert wird, da gleichzeitige Batchvorgänge zu Konflikten führen und fehlschlagen können.

  • Verwenden Sie einzelne Schreibvorgänge oder nicht protokollierte Batches, um Massendaten mit hohem Durchsatz ohne Atomarität aufzunehmen.

Konsistenz und Parallelität

Amazon Keyspaces erzwingt die folgenden Konsistenz- und Parallelitätsregeln für protokollierte Batches:

  • Bei allen Batch-Vorgängen wird das Konsistenzniveau verwendet. LOCAL_QUORUM

  • Gleichzeitige Batches, die sich auf verschiedene Zeilen auswirken, können gleichzeitig ausgeführt werden.

  • Gleichzeitige oder DELETE Operationen mit Zeilen INSERTUPDATE, die an einem laufenden Batch beteiligt sind, schlagen aufgrund eines Konflikts fehl.

Unterstützte Operatoren und Bedingungen

Unterstützte WHERE Klauseloperatoren:
  • Gleichheit (=)

Nicht unterstützte Operatoren:
  • Bereichsoperatoren (>, <, >=, < =)

  • IN-Operator

  • LIKE-Operator

  • BETWEEN-Operator

Wird in protokollierten Batches nicht unterstützt:
  • Mehrere Anweisungen, die dieselbe Zeile betreffen

  • Gegenoperationen

  • Löscht den Bereich

Eine DELETE Anweisung in einem protokollierten Batch muss auf eine einzelne Zeile abzielen und dabei den vollständigen Primärschlüssel (alle Partitionsschlüssel- und Clusterspalten) mit Gleichheitsbedingungen angeben. Das Löschen eines Bereichs, z. B. ein Löschen nach Partitionsschlüssel allein oder über einen Bereich von Clusterspalten, wird in einem protokollierten Batch nicht unterstützt. Um einen Bereich zu löschen, verwenden Sie eine eigenständige DELETE Anweisung oder einen nicht protokollierten Batch.

Fehlerbedingungen protokollierter Batch-Anweisungen

Ein protokollierter Batchvorgang kann in einem der folgenden Fälle fehlschlagen:

  • Bedingungsausdrücke (wie IF NOT EXISTS oderIF) ergeben falsch.

  • Eine oder mehrere Operationen enthalten ungültige Parameter.

  • Die Anforderung steht in Konflikt mit einer anderen Batchoperation, die in denselben Zeilen ausgeführt wird.

  • Der Tabelle fehlt die ausreichend bereitgestellte Kapazität.

  • Eine Zeile überschreitet die maximale Größenbeschränkung.

  • Das Eingabedatenformat ist ungültig.

Batch-Anweisungen und Replikation in mehreren Regionen

Bei Bereitstellungen mit mehreren Regionen:

  • Die Operationen in der Quellregion sind synchron und atomar.

  • Die Operationen in der Zielregion sind asynchron.

  • Alle Batchvorgänge werden in die Zielregionen repliziert, die Isolierung während der Anwendung wird jedoch möglicherweise nicht aufrechterhalten.

Überwachen Sie Batch-Operationen

Sie können Batch-Operationen mithilfe von CloudWatch Amazon-Metriken überwachen, um Leistung, Fehler und Nutzungsmuster zu verfolgen. Amazon Keyspaces bietet die folgenden CloudWatch Metriken für die Überwachung von Batch-Vorgängen pro Tabelle:

  • SuccessfulRequestCount— Verfolgen Sie erfolgreiche Batch-Operationen.

  • Latency— Messen Sie die Leistung des Chargenbetriebs.

  • ConsumedWriteCapacityUnits— Überwachen Sie den Kapazitätsverbrauch des Chargenbetriebs.

Weitere Informationen finden Sie unter Amazon-Keyspaces-Metriken.

Zusätzlich zu den CloudWatch Metriken können Sie AWS CloudTrail damit alle Amazon Keyspaces-API-Aktionen protokollieren. Jede API-Aktion im Batch wird protokolliert, CloudTrail sodass Sie Batch-Operationen in Ihren Amazon Keyspaces-Tabellen leichter verfolgen und überprüfen können.

Beispiele für Batch-Operationen

Das Folgende ist ein Beispiel für eine einfache protokollierte Batchanweisung.

BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith'); APPLY BATCH;

Dies ist ein Beispiel für einen Batch, der INSERT UPDATE ,- und DELETE -Anweisungen enthält.

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;

Dies ist ein Beispiel für einen Batch, der clientseitige Zeitstempel verwendet.

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;

Dies ist ein Beispiel für einen bedingten Batch.

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;

Dies ist ein Beispiel für einen Stapel, der Time to Live (TTL) verwendet.

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;

Dies ist ein Beispiel für eine Batch-Anweisung, die mehrere Tabellen aktualisiert.

BEGIN BATCH INSERT INTO users (id, firstname) VALUES (1, 'John'); INSERT INTO user_emails (user_id, email) VALUES (1, 'john@example.com'); APPLY BATCH;

Dies ist ein Beispiel für eine Batchoperation, bei der benutzerdefinierte Typen (UDTs) verwendet werden. Das Beispiel geht davon aus, dass das UDT address existiert.

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;