All Products
Search
Document Center

Tablestore:Gunakan transaksi lokal

Last Updated:Aug 05, 2026

Gunakan Tablestore SDK for Python untuk mengelompokkan operasi baca dan tulis pada satu nilai kunci partisi ke dalam operasi atomik yang semua penulisannya dikomit atau dibatalkan secara bersamaan.

Prasyarat

  • Instal Tablestore SDK for Python dan inisialisasi klien.

  • Transaksi lokal telah diaktifkan untuk tabel tersebut.

    Catatan

    Untuk mengaktifkan transaksi lokal pada tabel yang sudah ada atau memeriksa apakah fitur tersebut telah diaktifkan, kirimkan tiket.

Deskripsi fungsi

Transaksi lokal hanya berlaku untuk satu nilai kunci partisi dan menggunakan tingkat isolasi Read Committed. Permintaan dalam transaksi berbagi ID transaksi. Gunakan transaksi lokal sebagai berikut:

  1. Panggil start_local_transaction dengan nilai kunci partisi untuk mendapatkan ID transaksi.

  2. Panggil get_row, put_row, update_row, delete_row, batch_write_row, atau get_range dalam transaksi dan sertakan ID tersebut dalam parameter transaction_id.

  3. Panggil commit_transaction untuk mengomit semua penulisan atau abort_transaction untuk membatalkan semua penulisan.

def start_local_transaction(self, table_name, key)
def commit_transaction(self, transaction_id)
def abort_transaction(self, transaction_id)

Contoh berikut memulai transaksi lokal untuk nilai kunci partisi device, menulis baris, lalu melakukan commit transaksi.

table_name = "example_table"
partition_key = [("partition", "device")]
transaction_id = client.start_local_transaction(table_name, partition_key)

primary_key = [("partition", "device"), ("id", 1)]
row = Row(primary_key, [("status", "online")])
condition = Condition(RowExistenceExpectation.IGNORE)
client.put_row(
    table_name,
    row,
    condition,
    transaction_id=transaction_id,
)

client.commit_transaction(transaction_id)

Parameter

Transaksi lokal mencakup parameter utama berikut.

Name

Type

Description

table_name (required)

str

Nama tabel.

key (required)

List[Tuple]

Kunci partisi yang digunakan untuk memulai transaksi lokal. Tentukan hanya nama dan nilai kolom kunci primer pertama.

primary_key (required)

List[Tuple]

Kunci primer lengkap yang digunakan untuk membaca atau menulis baris dalam transaksi. Tentukan semua kolom kunci primer. Untuk operasi tulis, nilai kunci partisi harus sesuai dengan key.

transaction_id (required)

str

ID transaksi lokal yang dikembalikan oleh start_local_transaction. Sertakan ID ini pada setiap permintaan baca, tulis, komit, atau batalkan dalam transaksi.

Batasan

  • Transaksi lokal tidak kompatibel dengan kolom kunci utama auto-increment.

  • Transaksi lokal menggunakan kunci pesimistis. Selama transaksi berlangsung, kunci tulis diterapkan pada data untuk nilai kunci partisi tersebut, dan hanya operasi tulis yang menyertakan ID transaksi yang dapat berhasil.

  • Masa aktif transaksi maksimal adalah 60 detik. Jika jeda antara dua operasi berturut-turut melebihi 60 detik, transaksi akan kedaluwarsa dan server akan membatalkannya.

  • Satu ID transaksi hanya dapat digunakan oleh satu permintaan dalam satu waktu. Permintaan konkuren yang menggunakan ID yang sama akan gagal semuanya.

  • Setiap operasi tulis dalam transaksi harus menggunakan nilai kunci partisi yang sama dengan yang digunakan saat memulai transaksi. Operasi baca tidak memiliki batasan ini.

  • Satu transaksi dapat menulis hingga 4 MB data.

  • Jika penulisan kolom atribut tidak menentukan versi data, server akan menghasilkan versi tersebut saat penulisan, bukan saat komit.

  • Ketika BatchWriteRowRequest menyertakan ID transaksi, semua baris harus ditujukan ke tabel tempat transaksi dimulai.

  • Jika transaksi tidak mengandung operasi tulis, komit dan batalkan memiliki efek yang sama dan keduanya akan melepaskan transaksi.

  • Operasi baca atau tulis yang gagal namun menyertakan ID transaksi tidak mengakhiri transaksi. Ulangi permintaan tersebut atau batalkan transaksi secara eksplisit.

Contoh

Baca baris dalam transaksi

Contoh berikut membaca satu baris dalam transaksi lokal. Untuk transaksi read-only, komit dan batalkan memiliki efek yang sama.

table_name = "example_table"
partition_key = [("partition", "device")]
transaction_id = client.start_local_transaction(table_name, partition_key)

primary_key = [("partition", "device"), ("id", 1)]
consumed, return_row, next_token = client.get_row(
    table_name,
    primary_key,
    transaction_id=transaction_id,
)
print(return_row.primary_key, return_row.attribute_columns)

client.commit_transaction(transaction_id)

Tulis beberapa baris sekaligus dalam transaksi

Contoh berikut memanggil set_transaction_id untuk menyertakan ID transaksi dalam permintaan batch. Nilai kunci partisi setiap baris harus sesuai dengan nilai yang digunakan saat memulai transaksi.

table_name = "example_table"
partition_key = [("partition", "device")]
transaction_id = client.start_local_transaction(table_name, partition_key)

condition = Condition(RowExistenceExpectation.IGNORE)
row_items = [
    PutRowItem(Row([("partition", "device"), ("id", 2)], [("status", "online")]), condition),
    PutRowItem(Row([("partition", "device"), ("id", 3)], [("status", "offline")]), condition),
]
request = BatchWriteRowRequest()
request.add(TableInBatchWriteRowItem(table_name, row_items))
request.set_transaction_id(transaction_id)

response = client.batch_write_row(request)
if response.is_all_succeed():
    client.commit_transaction(transaction_id)
else:
    client.abort_transaction(transaction_id)