全部产品
Search
文档中心

Tablestore:Pembaruan Bersyarat

更新时间:Jul 02, 2025

Fitur pembaruan bersyarat memungkinkan Anda memperbarui data dalam tabel hanya jika kondisi yang ditentukan terpenuhi. Jika kondisi tidak terpenuhi, pembaruan akan gagal.

Prasyarat

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

  • Tabel data telah dibuat dan berisi data.

Catatan Penggunaan

Ketika menggunakan operasi PutRow, UpdateRow, DeleteRow, atau BatchWriteRow untuk memperbarui data, Anda dapat menerapkan pembaruan bersyarat untuk memeriksa kondisi keberadaan baris dan kondisi berbasis kolom. Pembaruan hanya berhasil jika kondisi tersebut terpenuhi.

Pembaruan bersyarat dapat dilakukan berdasarkan kondisi keberadaan baris dan kondisi berbasis kolom.

  • Kondisi keberadaan baris mencakup IGNORE, EXPECT_EXIST, dan EXPECT_NOT_EXIST.

    Tablestore pertama-tama memeriksa kondisi keberadaan baris sebelum memodifikasi tabel data. Jika kondisi ini tidak terpenuhi, modifikasi gagal dan kesalahan dilaporkan.

  • Kondisi berbasis kolom mencakup SingleColumnCondition dan CompositeCondition, yang digunakan untuk menentukan apakah kondisi terpenuhi berdasarkan nilai satu atau beberapa kolom.

    Kondisi berbasis kolom mendukung operator relasional berikut: =, !=, >, >=, <, dan <=. Kondisi ini juga mendukung operator logika NOT, AND, dan OR. Anda dapat menentukan hingga 10 kondisi berbasis kolom untuk pembaruan bersyarat.

    • SingleColumnCondition mendukung perbandingan antara konstanta dan kolom, termasuk kolom kunci utama. Namun, SingleColumnCondition tidak mendukung perbandingan antara dua kolom atau dua konstanta.

    • Operator logika digunakan untuk menggabungkan subkondisi dalam CompositeCondition. Subkondisi ini dapat berupa SingleColumnCondition atau CompositeCondition.

Anda dapat menggunakan pembaruan bersyarat untuk melakukan kunci optimis. Saat Anda memperbarui baris, Anda harus mendapatkan nilai kolom tertentu dan menentukan kondisi pembaruan baris berdasarkan nilai kolom tersebut. Sebagai contoh, saat Anda memperbarui nilai Kolom A dalam baris menjadi 2, Anda harus mendapatkan nilai Kolom A. Dalam contoh ini, nilai yang diperoleh adalah 1. Kemudian, Anda harus menentukan bahwa baris hanya dapat diperbarui jika nilai Kolom A adalah 1. Jika kondisi yang ditentukan terpenuhi, pembaruan berhasil. Jika baris diperbarui oleh klien lain, pembaruan gagal.

Parameter

Parameter

Deskripsi

RowExistenceExpectation

Kondisi keberadaan baris. Saat Anda memodifikasi tabel, Tablestore pertama-tama memeriksa kondisi keberadaan baris. Jika kondisi keberadaan baris tidak terpenuhi, modifikasi gagal dan kesalahan dilaporkan.

Kondisi keberadaan baris mencakup IGNORE, EXPECT_EXIST, dan EXPECT_NOT_EXIST. Di Tablestore, RowExistenceExpectation_IGNORE menunjukkan IGNORE, RowExistenceExpectation_EXPECT_EXIST menunjukkan EXPECT_EXIST, dan RowExistenceExpectation_EXPECT_NOT_EXIST menunjukkan EXPECT_NOT_EXIST.

  • IGNORE: Tidak ada pemeriksaan keberadaan yang dilakukan.

  • EXPECT_EXIST: Baris diharapkan ada. Jika baris ada, kondisi terpenuhi. Jika tidak, kondisi tidak terpenuhi.

  • EXPECT_NOT_EXIST: Baris diharapkan tidak ada. Jika baris tidak ada, kondisi terpenuhi. Jika tidak, kondisi tidak terpenuhi.

ColumnName

Nama kolom.

ColumnValue

Nilai pembanding kolom.

Comparator

Operator relasional yang digunakan untuk membandingkan nilai kolom. Untuk informasi tentang jenis operator relasional, lihat ComparatorType.

Operator relasional mencakup EQUAL(=), NOT_EQUAL(!=), GREATER_THAN(>), GREATER_EQUAL(>=), LESS_THAN(<), dan LESS_EQUAL(<=). Di Tablestore, CT_EQUAL menunjukkan EQUAL(=), CT_NOT_EQUAL menunjukkan NOT_EQUAL(!=), CT_GREATER_THAN menunjukkan GREATER_THAN(>), CT_GREATER_EQUAL menunjukkan GREATER_EQUAL(>=), CT_LESS_THAN menunjukkan LESS_THAN(<), dan CT_LESS_EQUAL menunjukkan LESS_EQUAL(<=).

Operator

Operator logika yang digunakan untuk menggabungkan beberapa kondisi. Untuk informasi tentang jenis operator logika, lihat LogicalOperator.

Operator logika mencakup NOT, AND, dan OR. Di Tablestore, LO_NOT menunjukkan NOT, LO_AND menunjukkan AND, dan LO_OR menunjukkan OR.

Jumlah subkondisi yang dapat Anda tentukan bervariasi berdasarkan operator logika yang Anda gunakan.

  • Jika operator logika adalah NOT, Anda hanya dapat menentukan satu subkondisi.

  • Jika operator logika adalah AND atau OR, Anda harus menentukan setidaknya dua subkondisi.

FilterIfMissing

Menentukan apakah akan melewati pemeriksaan kondisi ketika kolom tidak ada dalam baris. Nilai parameter ini bertipe Boolean. Nilai defaultnya adalah false, yang menentukan bahwa jika kolom tidak ada dalam baris, pemeriksaan kondisi dilewati dan baris memenuhi kondisi pembaruan.

Jika Anda menetapkan parameter FilterIfMissing ke true dan kolom tidak ada dalam baris, pemeriksaan kondisi gagal dan baris tidak memenuhi kondisi pembaruan.

LatestVersionsOnly

Menentukan apakah hanya menggunakan versi terbaru dari nilai untuk perbandingan ketika kolom memiliki beberapa versi nilai. Nilai parameter ini bertipe Boolean. Nilai defaultnya adalah true, yang menentukan bahwa jika kolom memiliki beberapa versi nilai, hanya versi terbaru dari nilai yang digunakan untuk perbandingan.

Jika Anda menetapkan parameter LatestVersionsOnly ke false dan kolom memiliki beberapa versi nilai, semua versi nilai digunakan untuk perbandingan. Dalam hal ini, jika hanya satu versi yang memenuhi kondisi, pemeriksaan kondisi dilewati dan baris memenuhi kondisi pembaruan.

Contoh

Perbarui data dengan menggunakan kondisi keberadaan baris

Berikut adalah kode sampel yang menunjukkan cara memperbarui baris berdasarkan kunci utama. Jika baris yang ditentukan ada, pembaruan berhasil. Jika tidak, pembaruan gagal.

updateRowRequest := new(tablestore.UpdateRowRequest)
updateRowChange := new(tablestore.UpdateRowChange)
updateRowChange.TableName = tableName
updatePk := new(tablestore.PrimaryKey)
updatePk.AddPrimaryKeyColumn("pk1", "pk1value1")
updatePk.AddPrimaryKeyColumn("pk2", int64(2))
updatePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
updateRowChange.PrimaryKey = updatePk
updateRowChange.DeleteColumn("col1")            // Hapus kolom col1. 
updateRowChange.PutColumn("col2", int64(77))    // Tambahkan kolom col2 dengan nilai 77. 
updateRowChange.PutColumn("col4", "newcol3")    // Tambahkan kolom col4 dengan nilai "newcol3". 
// Tentukan bahwa baris diharapkan ada. 
updateRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
updateRowRequest.UpdateRowChange = updateRowChange
_, err := client.UpdateRow(updateRowRequest)
if err != nil {
    fmt.Println("update gagal dengan kesalahan:", err)
} else {
    fmt.Println("pembaruan baris selesai")
}

Perbarui data dengan menggunakan kondisi keberadaan baris dan kondisi berbasis kolom

  • Perbarui baris dengan menggunakan kondisi

    updateRowRequest := new(tablestore.UpdateRowRequest)
    updateRowChange := new(tablestore.UpdateRowChange)
    updateRowChange.TableName = tableName
    updatePk := new(tablestore.PrimaryKey)
    updatePk.AddPrimaryKeyColumn("pk1", "pk1value1")
    updateRowChange.PrimaryKey = updatePk
    updateRowChange.PutColumn("col2", int64(77)) // Tambahkan kolom col2 dengan nilai 77. 
    // Tentukan bahwa nilai yang diharapkan dari kolom col5 adalah 3. 
    clCondition1 := tablestore.NewSingleColumnCondition("col5", tablestore.CT_EQUAL, int64(3))
    // Nilai default dari parameter FilterIfMissing adalah false, yang menentukan bahwa jika kolom tidak ada dalam baris, pemeriksaan kondisi dilewati. 
    // Jika Anda ingin menentukan bahwa pemeriksaan kondisi gagal jika kolom tidak ada dalam baris, tetapkan parameter FilterIfMissing ke true. 
    //clCondition1.FilterIfMissing = true
    // Tentukan bahwa baris diharapkan ada. 
    updateRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
    updateRowChange.SetColumnCondition(clCondition1)
    updateRowRequest.UpdateRowChange = updateRowChange
    _, err := client.UpdateRow(updateRowRequest)
    if err != nil {
        fmt.Println("update gagal dengan kesalahan:", err)
    } else {
        fmt.Println("pembaruan baris selesai")
    }

  • Hapus baris dengan menggunakan kondisi

    Berikut adalah kode sampel yang menunjukkan cara menghapus baris berdasarkan kunci utama. Jika baris yang ditentukan ada dan nilai kolom col2 adalah 3, pembaruan berhasil. Jika tidak, pembaruan gagal.

    deleteRowReq := new(tablestore.DeleteRowRequest)
    deleteRowReq.DeleteRowChange = new(tablestore.DeleteRowChange)
    deleteRowReq.DeleteRowChange.TableName = tableName
    deletePk := new(tablestore.PrimaryKey)
    deletePk.AddPrimaryKeyColumn("pk1", "pk1value1")
    deletePk.AddPrimaryKeyColumn("pk2", int64(2))
    deletePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
    deleteRowReq.DeleteRowChange.PrimaryKey = deletePk
    
    // Tentukan bahwa baris diharapkan ada. 
    deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
    // Tentukan bahwa nilai yang diharapkan dari kolom col2 adalah 3. 
    clCondition1 := tablestore.NewSingleColumnCondition("col2", tablestore.CT_EQUAL, int64(3))
    // Nilai default dari parameter FilterIfMissing adalah false, yang menentukan bahwa jika kolom tidak ada dalam baris, pemeriksaan kondisi dilewati. 
    // Jika Anda ingin menentukan bahwa pemeriksaan kondisi gagal jika kolom tidak ada dalam baris, tetapkan parameter FilterIfMissing ke true. 
    //clCondition1.FilterIfMissing = true
    deleteRowReq.DeleteRowChange.SetColumnCondition(clCondition1)
    _, err := client.DeleteRow(deleteRowReq)
    if err != nil {
        fmt.Println("penghapusan gagal dengan kesalahan:", err)
    } else {
        fmt.Println("penghapusan baris selesai")
    }