Setelah mengaktifkan fitur transaksi lokal pada tabel data, Anda dapat membuat transaksi lokal berdasarkan nilai kunci partisi tertentu dan melakukan operasi baca serta tulis dalam transaksi tersebut. Fitur ini memungkinkan 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. Untuk detail lebih lanjut, lihat Inisialisasi Klien Tablestore.
Tabel data tempat fitur transaksi lokal diaktifkan telah dibuat.
CatatanJika fitur transaksi lokal tidak diaktifkan saat membuat tabel data, dan Anda ingin menggunakannya setelah pembuatan tabel, ajukan Tiket.
Menggunakan fitur transaksi lokal
Gunakan startLocalTransaction untuk membuat transaksi lokal berdasarkan nilai kunci partisi tertentu dan memperoleh 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 mengonfirmasi transaksi lokal atau 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 adalah 60 detik.
Jika transaksi lokal tidak dikonfirmasi atau dibatalkan dalam waktu 60 detik, server Tablestore akan membatalkan transaksi karena habis masa berlakunya.
Meskipun kesalahan timeout terjadi, transaksi mungkin tetap dibuat di server Tablestore. Dalam hal ini, Anda dapat mengirim ulang permintaan pembuatan transaksi setelah transaksi sebelumnya habis masa berlakunya.
Jika transaksi lokal tidak dikonfirmasi, transaksi tersebut mungkin menjadi tidak valid. Ulangi operasi dalam transaksi ini jika diperlukan.
Jika tidak ada operasi tulis yang dilakukan pada data dalam transaksi lokal, operasi konfirmasi dan pembatalan 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. Permintaan lain yang menggunakan ID transaksi lokal yang sama akan gagal selama transaksi sedang digunakan.
Interval maksimum antara dua operasi baca atau tulis berturut-turut dalam transaksi lokal adalah 60 detik.
Jika tidak ada operasi baca atau tulis yang dilakukan selama lebih dari 60 detik, server Tablestore akan membatalkan transaksi karena habis masa berlakunya.
Hingga 4 MB data dapat ditulis ke setiap transaksi. Volume data dihitung dengan cara yang sama seperti permintaan tulis biasa.
Jika nomor versi untuk sebuah cell tidak ditentukan, server Tablestore secara otomatis menetapkan nomor versi ketika cell ditulis ke transaksi, bukan saat transaksi dikonfirmasi.
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. Hanya permintaan tulis yang berisi ID transaksi lokal dan dimulai dalam transaksi lokal yang dapat berhasil. Data dalam transaksi lokal dibuka kuncinya jika transaksi dikonfirmasi, dibatalkan, atau habis masa berlakunya.
Transaksi lokal tetap valid meskipun permintaan baca atau tulis dengan ID transaksi lokal ditolak. Anda dapat menentukan aturan pengulangan untuk mengirim ulang permintaan atau membatalkan transaksi.
Parameter
Parameter | Diperlukan | Deskripsi |
tableName | Ya | Nama tabel data. |
primaryKey | Ya | Primary key dari tabel data.
|
transactionId | Ya | 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 transaksi lokal untuk menulis data dan konfirmasi transaksi lokal
Kode sampel berikut menunjukkan cara membuat transaksi lokal berdasarkan nilai kunci partisi tertentu, menulis data dalam transaksi lokal, dan mengonfirmasi transaksi lokal untuk menerapkan semua modifikasi data ke tabel data:
(async () => {
try {
// Buat transaksi lokal.
const response = await client.startLocalTransaction({
tableName,
primaryKey: [{ // Anda hanya perlu menentukan nilai kunci partisi untuk transaksi lokal.
"id": "partitionKeyValue"
}]
});
// Dapatkan ID transaksi lokal.
const transactionId = response.transactionId;
// Tulis data dalam transaksi lokal.
await client.putRow({
tableName,
condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
primaryKey,
attributeColumns: [{
col: 'updated'
}],
transactionId
});
// Konfirmasi transaksi lokal.
await client.commitTransaction({
transactionId
})
} catch (e) {
console.error(e)
}
})();Gunakan transaksi lokal untuk menulis data dan membatalkan transaksi lokal
Kode sampel berikut menunjukkan cara membuat transaksi lokal berdasarkan nilai kunci partisi tertentu, menulis data dalam transaksi lokal, dan membatalkan transaksi lokal untuk membuang semua modifikasi data:
(async () => {
try {
// Buat transaksi lokal.
const response = await client.startLocalTransaction({
tableName,
primaryKey: [{ // Anda hanya perlu menentukan nilai kunci partisi untuk transaksi lokal.
"id": "partitionKeyValue"
}]
});
// Dapatkan ID transaksi lokal.
const transactionId = response.transactionId
// Tulis data dalam transaksi lokal.
await client.putRow({
tableName,
condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
primaryKey,
attributeColumns: [{
col: 'updated'
}],
transactionId
});
// Batalkan transaksi lokal.
await client.abortTransaction({
transactionId
})
} catch (e) {
console.error(e)
}
})();Referensi
Untuk menulis beberapa baris data sekaligus atau membaca data dengan nilai primary key dalam rentang tertentu, buat transaksi lokal. Lihat kode sampel yang disediakan dalam topik Tulis Data atau Baca Data untuk memulai permintaan yang mencakup ID transaksi lokal.