全部产品
Search
文档中心

Tablestore:Penghitung atomik

更新时间:Jul 02, 2025

Untuk aplikasi online yang memerlukan penghitung, Anda dapat menggunakan fitur penghitung atomik. Untuk mengaktifkan fitur ini, 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 instance OTSClient.

  • 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 terjadi.

  • 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 dikembalikan dalam respons permintaan pembaruan baris. Namun, Anda dapat menentukan agar nilai yang diperbarui dari penghitung atomik dikembalikan.

  • Kolom tidak dapat ditetapkan sebagai penghitung atomik dan diperbarui dalam satu permintaan pembaruan. Sebagai contoh, jika Kolom A ditetapkan sebagai penghitung atomik, Anda tidak dapat melakukan operasi lain seperti timpa atau hapus pada kolom tersebut secara bersamaan.

  • Beberapa operasi pembaruan dapat dilakukan pada baris yang sama melalui permintaan BatchWriteRow. Namun, jika Anda melakukan operasi penghitung atomik pada baris tersebut, hanya satu operasi pembaruan yang dapat dilakukan 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 untuk menggunakan fitur penghitung atomik telah ditambahkan ke kelas updateRowChange. Tabel berikut menjelaskan operasi tersebut.

Operasi

Deskripsi

IncrementColumn(columnName string, value int64)

Menambah atau mengurangi nilai dalam kolom dengan angka tertentu.

AppendIncrementColumnToReturn(name string)

Menentukan nama kolom yang nilainya ingin Anda kembalikan di antara kolom-kolom tempat operasi dilakukan untuk mengimplementasikan penghitung atomik.

SetReturnIncrementValue()

Menentukan tipe data untuk mengembalikan nilai penghitung atomik.

Parameter

Parameter

Diperlukan

Deskripsi

TableName

Ya

Nama tabel data.

ColumnName

Ya

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

Value

Ya

Penambahan atau pengurangan pada nilai kolom.

Contoh

Kode sampel berikut menunjukkan cara memanggil operasi updateRowChange untuk menambahkan nilai kolom bertipe INTEGER saat menulis data dan membaca nilai baru dari kolom tersebut:

func UpdateRowWithIncrement(client *tablestore.TableStoreClient, tableName string) {
    fmt.Println("mulai memperbarui baris")
    updateRowRequest := new(tablestore.UpdateRowRequest)
    updateRowChange := new(tablestore.UpdateRowChange)
    // Tentukan nama tabel data.
    updateRowChange.TableName = tableName
    updatePk := new(tablestore.PrimaryKey)
    updatePk.AddPrimaryKeyColumn("pk1", "pk1increment")
    updatePk.AddPrimaryKeyColumn("pk2", int64(2))
    updatePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
    updateRowChange.PrimaryKey = updatePk
    // Tentukan bahwa nilai kolom col2 tempat operasi dilakukan untuk mengimplementasikan penghitung atomik ditingkatkan sebesar 30. Jangan tentukan timestamp.
    updateRowChange.IncrementColumn("col2", int64(30))
    // Kembalikan nilai kolom tempat operasi dilakukan untuk mengimplementasikan penghitung atomik.
    updateRowChange.SetReturnIncrementValue()
    updateRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
    updateRowChange.AppendIncrementColumnToReturn("col2")
    updateRowRequest.UpdateRowChange = updateRowChange

    resp, err := client.UpdateRow(updateRowRequest)
    if err != nil {
        fmt.Println("pembaruan gagal dengan kesalahan:", err)
        return
    } else {
        fmt.Println("pembaruan baris selesai")
        fmt.Println(len(resp.Columns))
        fmt.Println(resp.Columns[0].ColumnName)
        fmt.Println(resp.Columns[0].Value)
        fmt.Println(resp.Columns[0].Timestamp)
    }
}