全部产品
Search
文档中心

Tablestore:Gunakan fitur penghitung atomik

更新时间:Jul 02, 2025

Jika Anda ingin menggunakan penghitung dalam aplikasi online, Anda dapat memanfaatkan fitur penghitung atomik. Untuk menggunakannya, tentukan kolom sebagai penghitung atomik dan lakukan operasi penghitung atomik pada kolom tersebut.

Prasyarat

  • Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi klien.

  • Tabel data telah dibuat, dan data telah ditulis ke tabel tersebut.

Catatan Penggunaan

  • Penghitung atomik hanya dapat diterapkan pada kolom bertipe INTEGER.

  • Jika kolom yang ditentukan sebagai penghitung atomik tidak ada sebelum menulis data, nilai defaultnya adalah 0. Jika kolom bukan bertipe INTEGER, kesalahan OTSParameterInvalid akan muncul.

  • Anda dapat memperbarui penghitung atomik dengan angka positif atau negatif, tetapi hindari overflow integer. Jika terjadi overflow, kesalahan OTSParameterInvalid akan dikembalikan.

  • Secara default, nilai penghitung atomik tidak termasuk dalam respons permintaan pembaruan baris. Namun, Anda dapat menentukan agar nilai yang diperbarui dari penghitung atomik dikembalikan.

  • Anda tidak dapat menetapkan kolom sebagai penghitung atomik dan melakukan pembaruan lain (seperti operasi timpa atau hapus) pada kolom yang sama dalam satu permintaan pembaruan.

  • Anda dapat melakukan beberapa operasi pembaruan pada baris yang sama melalui permintaan BatchWriteRow. Namun, jika Anda menjalankan operasi penghitung atomik pada baris, hanya satu operasi pembaruan yang dapat dilakukan pada baris tersebut dalam permintaan BatchWriteRow.

  • Hanya nilai versi terbaru dari penghitung atomik yang dapat diperbarui. Anda tidak dapat memperbarui nilai versi tertentu dari penghitung atomik. Setelah operasi pembaruan selesai, versi data baru dimasukkan ke dalam penghitung atomik di baris tersebut.

Operasi API

Operasi API yang digunakan untuk memanfaatkan fitur penghitung atomik telah ditambahkan ke kelas rowUpdateChange. Tabel berikut menjelaskan operasi tersebut.

Operasi

Deskripsi

RowUpdateChange increment(Column column)

Menambah atau mengurangi nilai dalam kolom dengan angka.

void addReturnColumn(String columnName)

Menentukan nama kolom tempat operasi dilakukan untuk mengimplementasikan penghitung atomik. Operasi API ini dipanggil untuk mengembalikan nama kolom.

void setReturnType(ReturnType returnType)

Menentukan tipe data untuk mengembalikan nilai penghitung atomik.

Parameter

Parameter

Deskripsi

tableName

Nama tabel data.

columnName

Nama kolom tempat Anda ingin melakukan operasi penghitung atomik. Anda hanya dapat menentukan kolom bertipe INTEGER.

value

Peningkatan atau penurunan nilai kolom.

returnType

Jika Anda menetapkan parameter ini ke ReturnType.RT_AFTER_MODIFY, nilai penghitung atomik akan dikembalikan.

Contoh

Kode sampel berikut menunjukkan cara menggunakan rowUpdateChange untuk meningkatkan nilai penghitung atomik dan mengembalikan nilai yang telah ditingkatkan:

private static void incrementByUpdateRowApi(SyncClient client) {
    // Konstruksi kunci utama. 
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("<PRIMARY_KEY_NAME>", PrimaryKeyValue.fromString("pk0"));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    // Tentukan nama tabel data. 
    RowUpdateChange rowUpdateChange = new RowUpdateChange("<TABLE_NAME>", primaryKey); 

    // Tentukan kolom harga sebagai penghitung atomik dan tingkatkan nilai penghitung atomik sebesar 10. Anda tidak dapat menentukan timestamp. 
    rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));

    // Tetapkan parameter returnType ke ReturnType.RT_AFTER_MODIFY untuk mengembalikan nilai penghitung atomik. 
    rowUpdateChange.addReturnColumn("price");
    rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);

    // Ajukan permintaan untuk memperbarui baris. 
    UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));

    // Tampilkan nilai yang diperbarui. 
    Row row = response.getRow();
    System.out.println(row);
}