All Products
Search
Document Center

Tablestore:Gunakan fitur atomic counter

Last Updated:May 01, 2026

Fitur atomic counter memungkinkan penambahan atau pengurangan nilai kolom INTEGER dalam satu operasi yang aman untuk thread, tanpa memerlukan siklus baca-modifikasi-tulis.

Prasyarat

Catatan penggunaan

  • Atomic counter hanya dapat diterapkan pada kolom INTEGER.

  • Jika kolom yang ditentukan sebagai atomic counter belum ada saat data ditulis, nilai default-nya adalah 0. Jika kolom tersebut bukan bertipe INTEGER, sistem akan mengembalikan error OTSParameterInvalid.

  • Anda dapat memperbarui atomic counter dengan angka positif atau negatif, tetapi harus menghindari integer overflow. Jika terjadi integer overflow, sistem akan mengembalikan error OTSParameterInvalid.

  • Secara default, nilai atomic counter tidak dikembalikan dalam respons permintaan pembaruan baris. Anda dapat mengonfigurasi agar nilai atomic counter yang diperbarui dikembalikan.

  • Kolom yang ditetapkan sebagai atomic counter tidak dapat diperbarui secara bersamaan dengan operasi lain seperti overwrite atau delete dalam satu permintaan pembaruan yang sama.

  • Anda dapat melakukan beberapa operasi pembaruan pada baris yang sama melalui permintaan BatchWriteRow. Namun, jika salah satu operasi tersebut adalah atomic counter, hanya satu operasi pembaruan yang diperbolehkan untuk baris tersebut dalam satu permintaan BatchWriteRow.

  • Hanya nilai versi terbaru dari atomic counter yang dapat diperbarui; pembaruan terhadap versi tertentu tidak didukung. Setelah operasi pembaruan selesai, versi data baru akan dimasukkan ke dalam atomic counter pada baris tersebut.

Operasi API

Operasi atomic counter tersedia melalui kelas RowUpdateChange.

Operation

Description

RowUpdateChange Increment(Column)

Menambah atau mengurangi nilai kolom INTEGER sebesar jumlah yang ditentukan.

List<String> ReturnColumnNames

Menentukan kolom mana yang akan dikembalikan setelah operasi atomic counter.

ReturnType

Menentukan tipe pengembalian untuk hasil atomic counter.

Parameter

Parameter

Description

TableName

Nama tabel data.

ColumnName

Kolom tempat operasi atomic counter diterapkan. Hanya kolom INTEGER yang didukung.

Value

Jumlah yang akan ditambahkan atau dikurangkan dari nilai kolom. Gunakan angka negatif untuk mengurangi.

ReturnColumnNames

Kolom yang akan dikembalikan setelah operasi.

ReturnType

Atur ke ReturnType.RT_AFTER_MODIFY untuk mengembalikan nilai kolom yang diperbarui setelah operasi.

Contoh

Contoh berikut menambah nilai kolom INTEGER dan mengembalikan nilai yang diperbarui.

public static void Increment(int incrementValue)
{
    Console.WriteLine("Start set increment column...");
    OTSClient otsClient = Config.GetClient();

    // Tentukan primary key baris. Primary key harus konsisten dengan primary key yang ditentukan dalam TableMeta saat membuat tabel. 
    PrimaryKey primaryKey = new PrimaryKey
    {
        { Pk1, new ColumnValue(0) },
        { Pk2, new ColumnValue("abc") }
    };
    RowUpdateChange rowUpdateChange = new RowUpdateChange(TableName, primaryKey); // Tentukan nama tabel data. 
    // Atur parameter ReturnType ke ReturnType.RT_AFTER_MODIFY untuk mengembalikan nilai kolom tempat operasi atomic counter dilakukan. 
    rowUpdateChange.ReturnType = ReturnType.RT_AFTER_MODIFY;
    rowUpdateChange.ReturnColumnNames = new List<string>() { IncrementCol};
    // Tentukan kolom tempat operasi atomic counter dilakukan. Nilai kolom dimulai dari 0 dan bertambah sebesar nilai yang ditentukan oleh parameter incrementValue. 
    rowUpdateChange.Increment(new Column(IncrementCol, new ColumnValue(incrementValue)));

    UpdateRowRequest updateRowRequest = new UpdateRowRequest(rowUpdateChange);

    var response = otsClient.UpdateRow(updateRowRequest);
    Console.WriteLine("set Increment column succeed Increment result:" + response.Row.GetColumns()[0].Value);
}