Setelah mengaktifkan fitur transaksi lokal pada tabel data, Anda dapat membuat transaksi lokal berdasarkan nilai kunci partisi tertentu dan melakukan operasi baca serta tulis pada data dalam transaksi tersebut. Fitur ini memungkinkan Anda menjalankan operasi atomik untuk membaca dan menulis satu atau beberapa baris.
Transaksi lokal memastikan bahwa semua operasi pada data dengan kunci partisi yang sama berhasil atau gagal secara keseluruhan. Tingkat isolasi transaksi lokal adalah Baca Terkonfirmasi.
Prasyarat
Klien harus diinisialisasi terlebih dahulu. Untuk informasi lebih lanjut, lihat Inisialisasi klien Tablestore.
Tabel data tempat fitur transaksi lokal diaktifkan telah dibuat.
CatatanJika Anda tidak mengaktifkan fitur transaksi lokal saat membuat tabel data dan ingin menggunakan fitur ini setelah pembuatan tabel, ajukan Tiket.
Menggunakan fitur transaksi lokal
Gunakan startLocalTransaction untuk membuat transaksi lokal berdasarkan nilai kunci partisi tertentu dan mendapatkan ID transaksi lokal.
Baca dan tulis data dalam transaksi lokal.
Anda dapat memanggil operasi GetRow, PutRow, DeleteRow, UpdateRow, BatchWriteRow, dan GetRange untuk melakukan operasi pada data dalam transaksi lokal.
Gunakan commitTransaction untuk mengirimkan transaksi lokal atau gunakan abortTransaction untuk membatalkannya.
Catatan penggunaan
Fitur kolom primary key auto-increment dan fitur transaksi lokal tidak dapat digunakan secara bersamaan.
Kunci pesimistik digunakan untuk mengontrol operasi konkuren dalam transaksi lokal.
Masa berlaku transaksi lokal maksimal 60 detik.
Jika transaksi lokal tidak dikirimkan atau dibatalkan dalam waktu 60 detik, server Tablestore akan menganggap transaksi tersebut habis waktu dan membatalkannya.
Meskipun kesalahan timeout dikembalikan, transaksi mungkin tetap dibuat di server Tablestore. Dalam hal ini, Anda dapat mengirim ulang permintaan pembuatan transaksi setelah transaksi sebelumnya habis waktu.
Jika transaksi lokal tidak dikirimkan, transaksi tersebut mungkin menjadi tidak valid. Dalam hal ini, ulangi operasi dalam transaksi ini.
Jika tidak ada operasi tulis yang dilakukan pada data dalam transaksi lokal, operasi commit dan abort memiliki efek yang sama.
Tablestore memberlakukan batasan berikut pada operasi baca dan tulis dalam transaksi lokal:
ID transaksi lokal tidak dapat digunakan untuk mengakses data di luar rentang yang ditentukan berdasarkan nilai kunci partisi yang digunakan untuk membuat transaksi.
Nilai kunci partisi dari semua permintaan tulis dalam transaksi yang sama harus sesuai dengan nilai kunci partisi yang digunakan untuk membuat transaksi. Batasan ini tidak berlaku untuk permintaan baca.
Transaksi lokal hanya dapat digunakan oleh satu permintaan pada satu waktu. Saat transaksi lokal sedang digunakan, operasi lain yang menggunakan ID transaksi lokal yang sama akan gagal.
Interval maksimum antara dua operasi baca atau tulis berturut-turut pada data dalam transaksi lokal adalah 60 detik.
Jika tidak ada operasi baca atau tulis yang dilakukan pada data dalam transaksi lokal selama lebih dari 60 detik, server Tablestore akan menganggap transaksi tersebut habis waktu dan membatalkannya.
Hingga 4 MB data dapat ditulis ke setiap transaksi. Volume data yang ditulis dihitung dengan cara yang sama seperti permintaan tulis biasa.
Jika Anda tidak menentukan nomor versi untuk sebuah sel, server Tablestore secara otomatis menetapkan nomor versi ke sel ketika sel ditulis ke transaksi, bukan ketika transaksi dikirimkan.
Jika permintaan BatchWriteRow mencakup ID transaksi lokal, semua baris dalam permintaan tersebut hanya dapat ditulis ke tabel yang sesuai dengan ID transaksi lokal.
Saat menggunakan transaksi lokal, kunci tulis ditambahkan ke data berdasarkan nilai kunci partisi yang digunakan untuk membuat transaksi lokal. Hanya permintaan tulis yang berisi ID transaksi lokal dan dimulai untuk menulis data dalam transaksi lokal yang dapat berhasil. Permintaan non-transaksional lainnya atau permintaan tulis yang berisi ID transaksi lokal lain dan dimulai untuk menulis data dalam transaksi lokal akan gagal. Data dalam transaksi lokal dibuka kuncinya jika transaksi dikirimkan, dibatalkan, atau habis waktu.
Transaksi lokal tetap valid meskipun permintaan baca atau tulis dengan ID transaksi lokal ditolak. Anda dapat menentukan aturan ulang untuk mengirim ulang permintaan, atau Anda dapat membatalkan transaksi.
Operasi API
Berikut ini menjelaskan operasi API yang terkait dengan fitur transaksi lokal: startLocalTransaction, commitTransaction, dan abortTransaction.
startLocalTransaction
/**
* Buat transaksi lokal dan dapatkan ID transaksi lokal.
* @api
* @param [] $request
* Parameter permintaan, termasuk nama tabel dan kunci partisi.
* @return [] Respons.
* @throws OTSClientException Pengecualian yang dikembalikan ketika terjadi kesalahan parameter atau server Tablestore mengembalikan kesalahan verifikasi.
* @throws OTSServerException Pengecualian yang dikembalikan ketika server Tablestore mengembalikan kesalahan.
* @example "src/examples/StartLocalTransaction.php" 50
*/
public function startLocalTransaction(array $request)commitTransaction
/**
* Kirimkan transaksi lokal.
* @api
*
* @param [] $request
* Parameter permintaan, yaitu ID transaksi.
* @return [] Respons.
* @throws OTSClientException Pengecualian yang dikembalikan ketika terjadi kesalahan parameter atau server Tablestore mengembalikan kesalahan verifikasi.
* @throws OTSServerException Pengecualian yang dikembalikan ketika server Tablestore mengembalikan kesalahan.
* @example "src/examples/CommitTransaction.php" 50
*/
public function commitTransaction(array $request)abortTransaction
/**
* Batalkan transaksi lokal.
* @api
*
* @param [] $request
* Parameter permintaan, yaitu ID transaksi.
* @return [] Respons.
* @throws OTSClientException Pengecualian yang dikembalikan jika terjadi kesalahan parameter atau server Tablestore mengembalikan kesalahan verifikasi.
* @throws OTSServerException Pengecualian yang dikembalikan jika server Tablestore mengembalikan kesalahan.
* @example "src/examples/AbortTransaction.php" 20
*/
public function abortTransaction(array $request)Parameter
Parameter | Deskripsi |
table_name | Nama tabel data. |
key | Kunci partisi tabel data. Anda harus menentukan nilai kunci partisi saat membuat transaksi lokal. |
primary_key | Primary key tabel data. Anda harus menentukan nilai semua kolom primary key saat membaca dan menulis data dalam transaksi lokal. |
transaction_id | ID transaksi lokal yang secara unik mengidentifikasi transaksi lokal. Anda harus menentukan ID transaksi lokal saat membaca dan menulis data dalam transaksi lokal. |
Contoh
Gunakan fitur transaksi lokal untuk menulis baris data
Dalam contoh ini, baris data ditulis ke transaksi lokal yang dibuat untuk kunci partisi tertentu dari tabel, dan transaksi lokal dikirimkan.
// Dapatkan ID transaksi lokal.
$response = $client->startLocalTransaction (array (
'table_name' => 'TransactionTable',
// Primary key adalah [PK0:INTEGER,PK1:STRING].
'key' => array(
array('PK0', 123)
)
));
$attr = array();
$attr[] = ['col0', 'bbb'];
$request = [
'table_name' => 'TransactionTable',
'condition' => RowExistenceExpectationConst::CONST_IGNORE, // Anda dapat menyetel kondisi ke IGNORE, EXPECT_EXIST, atau EXPECT_NOT_EXIST.
// Tentukan primary key.
'primary_key' => [
['PK0', 123],
['PK1', 'abc']
],
'attribute_columns' => $attr,
'transaction_id' => $response['transaction_id']
];
// Jalankan metode putRow untuk menulis data.
$client->putRow($request);
// Kirimkan transaksi untuk semua modifikasi data dalam transaksi agar diterapkan. Anda dapat membatalkan transaksi lokal untuk membatalkan semua modifikasi data dalam transaksi lokal.
$client->commitTransaction(array(
'transaction_id' => $response['transaction_id']
));
// Batalkan transaksi lokal untuk membatalkan semua modifikasi data dalam transaksi.
// $client->abortTransaction(array(
// 'transaction_id' => $response['transaction_id']
// ));Gunakan fitur transaksi lokal untuk membaca baris data
Dalam contoh ini, baris data dibaca dalam transaksi lokal yang dibuat untuk kunci partisi tertentu dari tabel.
// Dapatkan ID transaksi lokal.
$response = $client->startLocalTransaction (array (
'table_name' => 'TransactionTable',
// Primary key adalah [PK0:INTEGER,PK1:STRING].
'key' => array(
array('PK0', 123)
)
));
$request = array(
'table_name' => 'TransactionTable',
// Tentukan primary key.
'primary_key' => array (
array('PK0', 123),
array('PK1', 'abc')
),
'max_versions' => 1,
'columns_to_get' => ['col0'],
'transaction_id' => $response['transaction_id']
);
// Jalankan metode getRow untuk membaca data.
$client->getRow($request);
// Kirimkan atau batalkan transaksi lokal. Efek pada operasi baca saat Anda mengirimkan atau membatalkan transaksi lokal adalah sama.
// Kirimkan transaksi untuk semua modifikasi data dalam transaksi agar diterapkan.
$client->commitTransaction(array(// Kirimkan transaksi
'transaction_id' => $response['transaction_id']
));
// Batalkan transaksi lokal untuk membatalkan semua modifikasi data dalam transaksi.
// $client->abortTransaction(array(
// 'transaction_id' => $response['transaction_id']
// ));Referensi
Untuk menulis beberapa baris data sekaligus atau membaca data yang nilai primary key-nya berada dalam rentang tertentu, buat transaksi lokal. Kemudian, lihat kode sampel yang disediakan dalam topik Tulis data atau Baca data untuk memulai permintaan yang mencakup ID transaksi lokal.