All Products
Search
Document Center

Tablestore:Gunakan penghitung atomik

Last Updated:Aug 06, 2026

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 increment(Column) untuk menambahkan operasi penghitung atomik.

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: RT_NONE. Untuk mengembalikan nilai yang diperbarui, atur parameter ini ke RT_AFTER_MODIFY.

returnColumnNames (opsional)

Set<String>

Kolom penghitung atomik yang nilainya dikembalikan setelah diperbarui. Tambahkan nama kolom dengan memanggil addReturnColumn() dan gunakan parameter ini bersama dengan RT_AFTER_MODIFY.

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 RT_AFTER_MODIFY ditentukan, bidang ini berisi nilai yang diperbarui dari kolom penghitung atomik yang ditambahkan melalui addReturnColumn(). Panggil getRow() untuk mendapatkan nilainya.

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.

Penting

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.