View a markdown version of this page

Usa le istruzioni batch in Amazon Keyspaces - Amazon Keyspaces (per Apache Cassandra)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa le istruzioni batch in Amazon Keyspaces

Puoi combinare più INSERT DELETE operazioni e in un'UPDATEunica dichiarazione. BATCH LOGGEDi batch sono l'impostazione predefinita.

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

Quando si esegue un'istruzione batch, il driver combina tutte le istruzioni del batch in un'unica operazione batch.

Per decidere quale tipo di operazione batch utilizzare, è possibile prendere in considerazione le seguenti linee guida.

Utilizza i batch registrati quando:
  • Hai bisogno di garanzie atomiche sulle transazioni.

  • Latenze leggermente superiori sono un compromesso accettabile.

Utilizza batch non registrati quando:
  • È necessario ottimizzare le operazioni su una singola partizione.

  • Vuoi ridurre il sovraccarico della rete.

  • Hai requisiti di produttività elevata.

Per informazioni sulle quote dei rendiconti dei batch, vedere. Quote per Amazon Keyspaces (per Apache Cassandra)

Batch non registrati

Con i batch non registrati, Amazon Keyspaces elabora più operazioni come un'unica richiesta senza mantenere un registro batch. Con un'operazione batch non registrata, è possibile che alcune azioni abbiano esito positivo mentre altre falliscano. I batch non registrati sono utili quando si desidera:

  • Ottimizza le operazioni all'interno di una singola partizione.

  • Riduci il traffico di rete raggruppando le richieste correlate.

La sintassi per un batch non registrato è simile a quella di un batch registrato, con l'aggiunta della parola chiave. UNLOGGED

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;

Batch registrati

Un batch registrato combina più azioni di scrittura in un'unica operazione atomica. Quando si esegue un batch registrato:

  • Tutte le azioni hanno successo insieme o falliscono insieme.

  • L'operazione è sincrona e idempotente.

  • Puoi scrivere su più tabelle Amazon Keyspaces, purché si trovino nello stesso account e. AWS Regione AWS

I batch registrati possono avere latenze leggermente superiori. Per le applicazioni ad alto rendimento, è consigliabile utilizzare batch non registrati.

L'utilizzo dei batch registrati in Amazon Keyspaces non comporta costi aggiuntivi. Paghi solo per le scritture che fanno parte delle tue operazioni in batch. Amazon Keyspaces esegue due scritture sottostanti per ogni riga del batch: una per preparare la riga per il batch e una per eseguire il commit del batch. Quando pianifichi la capacità delle tabelle che utilizzano batch registrati, ricorda che ogni riga di un batch richiede il doppio della capacità di un'operazione di scrittura standard. Ad esempio, se l'applicazione esegue un batch registrato al secondo con tre righe da 1 KB, è necessario fornire sei unità di capacità di scrittura (WCU) rispetto alle sole tre WCU per scritture singole o batch non registrati.

Per informazioni sui prezzi, consulta i prezzi di Amazon Keyspaces (per Apache Cassandra).

Utilizza le dichiarazioni preparate nei batch registrati

I batch registrati supportano le istruzioni preparate (vincolate) con esecuzione atomica completa (tutto o niente). È possibile combinare le prestazioni delle istruzioni preparate con le garanzie di atomicità di un batch registrato.

È possibile creare un batch registrato di istruzioni preparate in due modi. Gli esempi seguenti utilizzano un driver Java compatibile con Apache Cassandra.

Nel primo approccio, si prepara ogni dichiarazione singolarmente e si aggiungono le istruzioni associate a un. BatchStatement Questo approccio supporta batch che si estendono su più tabelle nello stesso AWS account e. Regione AWS Il seguente esempio di codice Java mostra questo approccio:

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. }

Nel secondo approccio, si prepara un intero BEGIN BATCH ... APPLY BATCH blocco come singola istruzione, quindi lo si associa e lo si esegue. Questo approccio è più adatto a un batch le cui istruzioni sono destinate a una singola tabella. Per preparare un batch che si estende su più tabelle, utilizzate il primo approccio. Il seguente esempio di codice Java mostra come preparare un intero blocco batch come singola istruzione:

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. }

È inoltre possibile utilizzare le istruzioni preparate in un batch registrato con quanto segue:

  • Dichiarazioni condizionali (IF NOT EXISTSo) IF

  • Indicatori di associazione denominati

  • Una combinazione di dichiarazioni preparate e non preparate nello stesso batch

  • Riutilizzo di una singola dichiarazione preparata con diversi valori vincolati in tutto il batch

Procedure consigliate per le operazioni in batch

Considera le seguenti pratiche consigliate quando usi le operazioni batch di Amazon Keyspaces.

  • Abilita il ridimensionamento automatico in modo da disporre di una capacità di throughput sufficiente per consentire alle tabelle di gestire le operazioni in batch e i requisiti di throughput aggiuntivi dei batch registrati.

  • Utilizzate le singole operazioni o i batch non registrati quando le operazioni possono essere eseguite indipendentemente senza influire sulla correttezza dell'applicazione.

  • Progettate l'applicazione in modo da ridurre al minimo gli aggiornamenti simultanei alle stesse righe, poiché le operazioni batch simultanee possono entrare in conflitto e fallire.

  • Per l'acquisizione di dati di massa ad alta velocità senza requisiti di atomicità, utilizza singole operazioni di scrittura o batch non registrati.

Coerenza e concorrenza

Amazon Keyspaces applica le seguenti regole di coerenza e concorrenza per i batch registrati:

  • Tutte le operazioni in batch utilizzano il livello di coerenza. LOCAL_QUORUM

  • I batch simultanei che riguardano righe diverse possono essere eseguiti contemporaneamente.

  • Le DELETE operazioni INSERT simultanee UPDATE o sulle righe coinvolte in un batch in corso hanno esito negativo e si verifica un conflitto.

Operatori e condizioni supportati

Operatori di WHERE clausole supportati:
  • Uguaglianza (=)

Operatori non supportati:
  • Operatori di intervallo (>, <, >=, < =)

  • Operatore IN

  • Operatore LIKE

  • Operatore BETWEEN

Non supportato nei batch registrati:
  • Dichiarazioni multiple che influiscono sulla stessa riga

  • Controoperazioni

  • L'intervallo viene eliminato

Un'DELETEistruzione in un batch registrato deve essere indirizzata a una singola riga specificando la chiave primaria completa (tutte le chiavi di partizione e le colonne di clustering) con condizioni di uguaglianza. L'eliminazione di un intervallo, ad esempio tramite la sola chiave di partizione o su un intervallo di colonne di clustering, non è supportata in un batch registrato. Per eseguire l'eliminazione di un intervallo, utilizza un'DELETEistruzione autonoma o un batch non registrato.

Condizioni di errore delle istruzioni batch registrate

Un'operazione batch registrata può fallire in uno dei seguenti casi:

  • Le espressioni di condizione (come IF NOT EXISTS oIF) restituiscono false.

  • Una o più operazioni contengono parametri non validi.

  • La richiesta è in conflitto con un'altra operazione batch in esecuzione sulle stesse righe.

  • La tabella non dispone di una capacità allocata sufficiente.

  • Una riga supera il limite massimo di dimensione.

  • Il formato dei dati di input non è valido.

Rendiconti batch e replica in più regioni

Nelle distribuzioni in più regioni:

  • Le operazioni della regione di origine sono sincrone e atomiche.

  • Le operazioni della regione di destinazione sono asincrone.

  • Tutte le operazioni batch vengono replicate nelle regioni di destinazione, ma potrebbero non mantenere l'isolamento durante l'applicazione.

Monitora le operazioni in batch

Puoi monitorare le operazioni in batch utilizzando le CloudWatch metriche di Amazon per tenere traccia delle prestazioni, degli errori e dei modelli di utilizzo. Amazon Keyspaces fornisce le seguenti CloudWatch metriche per il monitoraggio delle operazioni in batch per tabella:

  • SuccessfulRequestCount— Tieni traccia delle operazioni batch riuscite.

  • Latency— Misura le prestazioni delle operazioni in batch.

  • ConsumedWriteCapacityUnits— Monitora il consumo di capacità delle operazioni in batch.

Per ulteriori informazioni, consulta Parametri di Amazon Keyspaces.

Oltre alle CloudWatch metriche, puoi utilizzarle AWS CloudTrail per registrare tutte le azioni dell'API Amazon Keyspaces. Ogni azione API del batch viene registrata, CloudTrail semplificando il monitoraggio e la verifica delle operazioni batch nelle tabelle Amazon Keyspaces.

Esempi di operazioni in batch

Di seguito è riportato un esempio di istruzione batch di base registrata.

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

Questo è un esempio di batch che include INSERT DELETE istruzioni e. UPDATE

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;

Questo è un esempio di batch che utilizza timestamp sul lato 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;

Questo è un esempio di batch condizionale.

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;

Questo è un esempio di batch che utilizza 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;

Questo è un esempio di istruzione batch che aggiorna più tabelle.

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

Questo è un esempio di operazione batch che utilizza tipi definiti dall'utente (UDT). L'esempio presuppone che l'UDT esista. address

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;