View a markdown version of this page

Gunakan pernyataan batch di Amazon Keyspaces - Amazon Keyspaces (untuk Apache Cassandra)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan pernyataan batch di Amazon Keyspaces

Anda dapat menggabungkan beberapaINSERT,UPDATE, dan DELETE operasi ke dalam sebuah BATCH pernyataan. LOGGEDbatch adalah default.

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

Saat Anda menjalankan pernyataan batch, driver menggabungkan semua pernyataan dalam batch menjadi operasi batch tunggal.

Untuk memutuskan jenis operasi batch yang akan digunakan, Anda dapat mempertimbangkan pedoman berikut.

Gunakan batch yang dicatat saat:
  • Anda membutuhkan jaminan transaksi atom.

  • Latensi yang sedikit lebih tinggi adalah pertukaran yang dapat diterima.

Gunakan batch yang tidak dicatat saat:
  • Anda perlu mengoptimalkan operasi partisi tunggal.

  • Anda ingin mengurangi overhead jaringan.

  • Anda memiliki persyaratan throughput tinggi.

Untuk informasi tentang kuota pernyataan batch, lihatKuota untuk Amazon Keyspaces (untuk Apache Cassandra).

Kumpulan yang tidak dicatat

Dengan batch yang tidak dicatat, Amazon Keyspaces memproses beberapa operasi sebagai permintaan tunggal tanpa memelihara log batch. Dengan operasi batch yang tidak dicatat, ada kemungkinan bahwa beberapa tindakan berhasil sementara yang lain gagal. Batch yang tidak dicatat berguna ketika Anda ingin:

  • Optimalkan operasi dalam satu partisi.

  • Kurangi lalu lintas jaringan dengan mengelompokkan permintaan terkait.

Sintaks untuk batch yang tidak dicatat mirip dengan batch yang dicatat, dengan penambahan UNLOGGED kata kunci.

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 yang dicatat

Bat ch yang dicatat menggabungkan beberapa tindakan penulisan ke dalam satu operasi atom. Saat Anda menjalankan batch yang dicatat:

  • Semua tindakan berhasil bersama atau gagal bersama.

  • Operasi ini sinkron dan idempoten.

  • Anda dapat menulis ke beberapa tabel Amazon Keyspaces, asalkan mereka berada di AWS akun yang sama dan Wilayah AWS.

Batch yang dicatat mungkin memiliki latensi yang sedikit lebih tinggi. Untuk aplikasi throughput tinggi, pertimbangkan untuk menggunakan batch yang tidak dicatat.

Tidak ada biaya tambahan untuk menggunakan batch yang dicatat di Amazon Keyspaces. Anda membayar hanya untuk penulisan yang merupakan bagian dari operasi batch Anda. Amazon Keyspaces melakukan dua penulisan dasar dari setiap baris dalam batch: satu untuk menyiapkan baris untuk batch dan satu untuk melakukan komit batch. Saat merencanakan kapasitas untuk tabel yang menggunakan batch yang dicatat, ingatlah bahwa setiap baris dalam batch memerlukan dua kali kapasitas operasi penulisan standar. Misalnya, jika aplikasi Anda menjalankan satu batch log per detik dengan tiga baris 1KB, Anda perlu menyediakan enam unit kapasitas tulis (WCU) dibandingkan dengan hanya tiga WCU untuk penulisan individual atau batch yang tidak dicatat.

Untuk informasi tentang harga, lihat harga Amazon Keyspaces (untuk Apache Cassandra).

Gunakan pernyataan yang disiapkan dalam batch yang dicatat

Batch yang dicatat mendukung pernyataan yang disiapkan (terikat) dengan eksekusi atom penuh (semua atau tidak sama sekali). Anda dapat menggabungkan kinerja pernyataan yang disiapkan dengan jaminan atomisitas dari batch yang dicatat.

Anda dapat membangun kumpulan pernyataan yang telah disiapkan yang dicatat dengan dua cara. Contoh berikut menggunakan driver Java yang kompatibel dengan Apache Cassandra.

Pada pendekatan pertama, Anda menyiapkan setiap pernyataan secara individual dan menambahkan pernyataan terikat ke aBatchStatement. Pendekatan ini mendukung batch yang menjangkau beberapa tabel di AWS akun yang sama dan Wilayah AWS. Contoh kode Java berikut menunjukkan pendekatan ini:

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

Dalam pendekatan kedua, Anda menyiapkan seluruh BEGIN BATCH ... APPLY BATCH blok sebagai pernyataan tunggal, dan kemudian mengikat dan menjalankannya. Pendekatan ini paling cocok untuk batch yang pernyataannya menargetkan satu tabel. Untuk menyiapkan batch yang mencakup beberapa tabel, gunakan pendekatan pertama. Contoh kode Java berikut menunjukkan bagaimana mempersiapkan seluruh blok batch sebagai pernyataan tunggal:

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

Anda juga dapat menggunakan pernyataan yang disiapkan dalam batch yang dicatat dengan yang berikut:

  • Pernyataan bersyarat (IF NOT EXISTSatauIF)

  • Penanda bind bernama

  • Campuran pernyataan yang disiapkan dan tidak disiapkan dalam batch yang sama

  • Penggunaan kembali pernyataan tunggal yang disiapkan dengan nilai terikat yang berbeda di seluruh batch

Praktik terbaik untuk operasi batch

Pertimbangkan praktik yang disarankan berikut saat menggunakan operasi batch Amazon Keyspaces.

  • Aktifkan penskalaan otomatis sehingga Anda memiliki kapasitas throughput yang cukup untuk tabel Anda untuk menangani operasi batch dan persyaratan throughput tambahan dari batch yang dicatat.

  • Gunakan operasi individual atau batch yang tidak dicatat ketika operasi dapat berjalan secara independen tanpa mempengaruhi kebenaran aplikasi.

  • Rancang aplikasi Anda untuk meminimalkan pembaruan bersamaan ke baris yang sama, karena operasi batch simultan dapat bertentangan dan gagal.

  • Untuk penyerapan data massal throughput tinggi tanpa persyaratan atomisitas, gunakan operasi penulisan individual atau batch yang tidak dicatat.

Konsistensi dan konkurensi

Amazon Keyspaces memberlakukan aturan konsistensi dan konkurensi berikut untuk batch yang dicatat:

  • Semua operasi batch menggunakan tingkat LOCAL_QUORUM konsistensi.

  • Batch bersamaan yang mempengaruhi baris yang berbeda dapat dieksekusi secara bersamaan.

  • Serent INSERT ak,UPDATE, atau DELETE operasi pada baris yang terlibat dalam batch yang sedang berlangsung gagal dengan konflik.

Operator dan kondisi yang didukung

Operator WHERE klausa yang didukung:
  • Kesetaraan (=)

Operator yang tidak didukung:
  • Operator rentang (>, <, >=, <=)

  • Operator IN

  • Operator LIKE

  • Operator BETWEEN

Tidak didukung dalam batch yang dicatat:
  • Beberapa pernyataan yang mempengaruhi baris yang sama

  • Operasi konter

  • Rentang dihapus

Per DELETE nyataan dalam batch yang dicatat harus menargetkan satu baris dengan menentukan kunci primer lengkap (semua kunci partisi dan kolom pengelompokan) dengan kondisi kesetaraan. Penghapusan rentang, seperti hapus dengan kunci partisi saja atau di berbagai kolom pengelompokan, tidak didukung dalam batch yang dicatat. Untuk menjalankan penghapusan rentang, gunakan DELETE pernyataan mandiri atau batch yang tidak dicatat.

Kondisi kegagalan pernyataan batch yang dicatat

Operasi batch yang dicatat mungkin gagal dalam salah satu kasus berikut:

  • Ekspresi kondisi (seperti IF NOT EXISTS atauIF) dievaluasi menjadi salah.

  • Satu atau lebih operasi berisi parameter yang tidak valid.

  • Permintaan bertentangan dengan operasi batch lain yang berjalan pada baris yang sama.

  • Tabel tidak memiliki kapasitas yang disediakan yang memadai.

  • Baris melebihi batas ukuran maksimum.

  • Format data input tidak valid.

Pernyataan batch dan replikasi multi-wilayah

Dalam penerapan multi-wilayah:

  • Operasi Wilayah Sumber bersifat sinkron dan atom.

  • Operasi Wilayah Tujuan bersifat asinkron.

  • Semua operasi batch mereplikasi ke Wilayah tujuan, tetapi mungkin tidak mempertahankan isolasi selama aplikasi.

Pantau operasi batch

Anda dapat memantau operasi batch menggunakan CloudWatch metrik Amazon untuk melacak kinerja, kesalahan, dan pola penggunaan. Amazon Keyspaces menyediakan CloudWatch metrik berikut untuk memantau operasi batch per tabel:

  • SuccessfulRequestCount— Lacak operasi batch yang berhasil.

  • Latency— Mengukur kinerja operasi batch.

  • ConsumedWriteCapacityUnits— Memantau konsumsi kapasitas operasi batch.

Untuk informasi selengkapnya, lihat Metrik Amazon Keyspaces.

Selain CloudWatch metrik, Anda dapat menggunakannya AWS CloudTrail untuk mencatat semua tindakan API Amazon Keyspaces. Setiap tindakan API dalam batch dicatat sehingga CloudTrail memudahkan untuk melacak dan mengaudit operasi batch di tabel Amazon Keyspaces Anda.

Contoh operasi batch

Berikut ini adalah contoh pernyataan batch log dasar.

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

Ini adalah contoh dari batch yang mencakupINSERT,UPDATE, dan DELETE pernyataan.

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;

Ini adalah contoh batch menggunakan stempel waktu sisi klien.

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;

Ini adalah contoh dari batch bersyarat.

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;

Ini adalah contoh batch menggunakan 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;

Ini adalah contoh pernyataan batch yang memperbarui beberapa tabel.

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

Ini adalah contoh operasi batch menggunakan tipe yang ditentukan pengguna (UDT). Contohnya mengasumsikan bahwa UDT address ada.

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;