全部产品
Search
文档中心

Tablestore:Gunakan fitur penghitung atomik

更新时间:Jul 06, 2025

Jika Anda ingin mengimplementasikan penghitung untuk aplikasi online Anda, gunakan fitur penghitung atomik. Untuk memanfaatkan fitur ini, atur kolom sebagai penghitung atomik dan lakukan operasi terkait 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. Untuk informasi lebih lanjut, lihat Buat tabel data.

Catatan Penggunaan

  • Penghitung atomik hanya dapat diimplementasikan 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 disertakan dalam respons 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, operasi lain seperti timpa atau hapus tidak dapat dilakukan pada kolom tersebut secara bersamaan.

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

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

Sintaksis

/**
 * Perbarui satu baris data. 
 * @api
 * @param [] $request Parameter permintaan. 
 * @return [] Respons. 
 * @throws OTSClientException Pengecualian yang dilempar jika terjadi kesalahan parameter atau server Tablestore mengembalikan kesalahan verifikasi. 
 * @throws OTSServerException Pengecualian yang dilempar jika server Tablestore mengembalikan kesalahan. 
 */
public function updateRow(array $request);         

Anda dapat memanggil operasi updateRow untuk melakukan operasi pada penghitung atomik. Tabel berikut menjelaskan operasi tersebut.

Operasi

Deskripsi

update_of_attribute_columns

Tentukan INCREMENT sebagai tipe pembaruan untuk menambah atau mengurangi nilai kolom dengan bilangan bulat tertentu. Format konfigurasi:

'update_of_attribute_columns'=> array(
    'INCREMENT' => array (     
        array('<column_name>', <value>, ColumnTypeConst::CONST_INTEGER), 
    ),
)

return_content

Mengembalikan nilai kolom yang diperbarui. Anda harus menentukan nama kolom yang nilainya ingin Anda ubah dan atur parameter return_type ke ReturnTypeConst::CONST_AFTER_MODIFY. Format konfigurasi:

'return_content' => array(
    'return_type' => ReturnTypeConst::CONST_AFTER_MODIFY,
    'return_column_names' => array('<column_name>')
 )

Parameter

Parameter

Deskripsi

table_name

Nama tabel.

column_name

Nama kolom tempat operasi penghitung atomik akan dilakukan. Anda hanya dapat menentukan kolom bertipe INTEGER.

value

Peningkatan atau penurunan nilai kolom.

return_content

Informasi yang dikembalikan tentang kolom tempat operasi penghitung atomik dilakukan. Parameter ini berisi parameter return_type dan return_column_names.

  • return_type: Atur parameter ini ke ReturnTypeConst::CONST_AFTER_MODIFY untuk mengembalikan nilai yang diperbarui dari kolom tempat operasi penghitung atomik dilakukan.

  • return_column_names: mengembalikan nama kolom tempat operasi penghitung atomik dilakukan.

Contoh

Kode sampel berikut menunjukkan cara memperbarui nilai kolom bertipe INTEGER saat menulis data dan membaca nilai yang diperbarui.

$request = array (
    // Tentukan nama tabel. 
    'table_name' => 'MyTable',
    // Atur kondisi keberadaan baris ke RowExistenceExpectationConst::CONST_IGNORE, yang menentukan bahwa keberadaan baris tidak diperiksa. 
    'condition' => RowExistenceExpectationConst::CONST_IGNORE,
    // Tentukan kunci utama. Jumlah dan tipe kolom kunci utama yang Anda tentukan harus sama dengan jumlah dan tipe kolom kunci utama yang sebenarnya di tabel. 
    'primary_key' => array ( 
        // Nama kolom kunci utama pertama adalah PK0, tipe datanya adalah INTEGER, dan nilai kolomnya adalah 123. 
        array('PK0', 123),
        // Nama kolom kunci utama kedua adalah PK1, tipe datanya adalah STRING, dan nilai kolomnya adalah 'inc'. 
        array('PK1', 'inc')
    ),
    // Kolom atribut yang nilainya akan diperbarui. Tiga jenis operasi didukung: PUT, DELETE, dan DELETE_ALL. 
    'update_of_attribute_columns'=> array(
        'INCREMENT' => array (     
            // Tentukan kolom tempat operasi penghitung atomik akan dilakukan. Nama kolom adalah attr0, peningkatan nilai kolom adalah 1, dan tipe datanya adalah INTEGER. 
            array('attr0', 1, ColumnTypeConst::CONST_INTEGER), 
        ),
        'PUT' => array(
            array('attr1', 1, ColumnTypeConst::CONST_INTEGER),
        )
    ),
    // Kembalikan informasi kolom setelah operasi penghitung atomik dilakukan. 
    'return_content' => array(
        'return_type' => ReturnTypeConst::CONST_AFTER_MODIFY,
        'return_column_names' => array('attr0')
    )
);
$response = $otsClient->updateRow ($request);
print json_encode ($response);