Tablestore SDK for Java secara atomik menambah atau mengurangi nilai kolom atribut integer pada tingkat baris dan dapat mengembalikan nilai yang diperbarui dalam permintaan yang sama.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi
Panggil increment(Column) untuk memperbarui kolom integer tertentu secara atomik. Nilai positif akan menambahkan, sedangkan nilai negatif akan mengurangi. Tablestore menjamin atomisitas pada tingkat baris dan menulis versi data baru setelah pembaruan. Untuk mengembalikan nilai yang diperbarui dalam permintaan yang sama, panggil addReturnColumn(String) dan atur returnType ke RT_AFTER_MODIFY.
public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
public RowUpdateChange increment(Column column)
public void addReturnColumn(String columnName)
public void setReturnType(ReturnType returnType)
Contoh berikut menambah kolom price sebesar 10 untuk baris dengan kunci primer pk0 di tabel counter_demo dan membaca nilai yang diperbarui dalam permintaan yang sama.
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("pk0"))
.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange("counter_demo", primaryKey);
// Tambah kolom price sebesar 10 (gunakan nilai negatif untuk mengurangi)
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));
// Kembalikan nilai kolom yang diperbarui dalam permintaan yang sama
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);
UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
Row row = response.getRow();
System.out.println("Updated price: " + row.getLatestColumn("price").getValue().asLong());
Parameter
Konfigurasi permintaan
UpdateRowRequest berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
rowChange (wajib) |
RowUpdateChange |
Konfigurasi pembaruan satu baris. |
|
transactionId (opsional) |
String |
ID transaksi lokal. Tentukan parameter ini hanya ketika Anda melakukan operasi penghitung atomik dalam transaksi lokal. Untuk informasi tentang cara mendapatkan dan menggunakan ID tersebut, lihat Gunakan transaksi lokal. |
Konfigurasi pembaruan baris
Parameter rowChange dari UpdateRowRequest bertipe RowUpdateChange.
|
Nama |
Type |
Deskripsi |
|
tableName (wajib) |
String |
Nama tabel data. |
|
primaryKey (wajib) |
PrimaryKey |
Kunci primary dari baris target. |
|
columnsToUpdate (wajib) |
List<Pair<Column, Type>> |
Kolom atribut yang akan diperbarui. Panggil |
|
condition (opsional) |
Condition |
Konfigurasi pembaruan kondisional. Operasi penghitung atomik hanya dilakukan jika baris memenuhi kondisi tersebut. Untuk informasi tentang cara mengonfigurasi kondisi, lihat Gunakan pembaruan kondisional. |
|
returnType (opsional) |
ReturnType |
Tipe pengembalian. Nilai default: |
|
returnColumnNames (opsional) |
Set<String> |
Kolom penghitung atomik yang nilainya dikembalikan setelah diperbarui. Tambahkan nama kolom dengan memanggil |
Kolom penghitung
Setiap elemen yang ditambahkan ke UpdateRowRequest.rowChange.columnsToUpdate oleh increment() berupa objek Column.
|
Nama |
Type |
Deskripsi |
|
name (wajib) |
String |
Nama kolom atribut tempat operasi penghitung atomik dilakukan. |
|
value (wajib) |
ColumnValue |
Nilai penambahan integer. Nilai positif akan menambah dan nilai negatif akan mengurangi. Hasilnya tidak boleh overflow. Jika kolom target tidak ada, nilai awalnya dianggap 0. |
Respons
|
Nama |
Tipe |
Deskripsi |
|
row |
Row |
Jika |
Batasan
-
Operasi penghitung atomik hanya mendukung kolom integer. Jika kolom tersebut ada tetapi bukan bertipe integer, operasi akan mengembalikan error
OTSParameterInvalid. -
Operasi penghitung atomik hanya berlaku untuk versi terbaru dan tidak menerima timestamp yang ditentukan pengguna.
-
Dalam satu permintaan pembaruan, Anda tidak dapat menggabungkan operasi penghitung atomik dengan operasi lain pada kolom yang sama, seperti overwrite atau delete.
-
Dalam permintaan
BatchWriteRow, baris yang memiliki operasi penghitung atomik hanya boleh muncul sekali.
Operasi penghitung atomik dapat gagal karena timeout jaringan atau error sistem. Upaya ulang (retry) dapat menyebabkan penambahan ganda, sehingga nilai penghitung menjadi lebih tinggi (atau lebih rendah) dari yang dimaksudkan oleh nilai increment. Untuk menghindari penghitungan ganda, gunakan pembaruan kondisional untuk memperbarui nilai berdasarkan kondisi saat ini.