Tüm Ürünler
Search
Belge Merkezi

Tablestore:Use local transactions

Son Güncelleme:Oct 02, 2026

Tablestore SDK for Python kullanarak tek bir bölüm anahtarı değeri için okuma ve yazma işlemlerini atomik bir işlemde gruplayın. Bu işlemin tüm yazmaları ya tamamen uygulanır ya da tamamen iptal edilir.

Ön koşullar

  • Tablestore SDK for Python öğesini yükleyin ve bir istemci başlatın.

  • Tablo için yerel işlemler etkinleştirilmiştir.

    Not

    Mevcut bir tablo için yerel işlemleri etkinleştirmek veya özelliğin etkin olup olmadığını kontrol etmek için bir destek talebi gönderin .

İşlev açıklaması

Yerel bir işlem tek bir bölüm anahtarı değeriyle sınırlıdır ve Read Committed yalıtım düzeyini kullanır. İşlem içindeki istekler aynı işlem kimliğini paylaşır. Yerel bir işlemi aşağıdaki şekilde kullanın:

  1. İşlem kimliği almak için bölüm anahtarı değeriyle birlikte start_local_transaction yöntemini çağırın.

  2. İşlem kapsamında get_row, put_row, update_row, delete_row, batch_write_row veya get_range yöntemlerinden birini çağırın ve kimliği transaction_id parametresi olarak geçirin.

  3. Tüm yazmaları uygulamak için commit_transaction yöntemini veya tüm yazmaları iptal etmek için abort_transaction yöntemini çağırın.

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

Aşağıdaki örnek, device bölüm anahtarı değeri için yerel bir işlem başlatır, bir satır yazar ve işlemi uygular.

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)

Parametreler

Yerel bir işlem aşağıdaki temel parametreleri içerir.


Ad


Tür


Açıklama


table_name (gerekli)


str


Tablonun adı.


key (gerekli)


List[Tuple]


Yerel işlemi başlatmak için kullanılan bölüm anahtarı. Yalnızca birincil anahtar sütununun ilk sütununun adını ve değerini belirtin.


primary_key (gerekli)


List[Tuple]


İşlem sırasında bir satırı okumak veya yazmak için kullanılan tam birincil anahtar. Tüm birincil anahtar sütunlarını belirtin. Yazma işlemleri için bölüm anahtarı değeri key parametresiyle eşleşmelidir.


transaction_id (gerekli)


str


start_local_transaction tarafından döndürülen yerel işlem kimliği. Kimliği, işlemdeki her okuma, yazma, uygulama veya iptal isteğine geçirin.

Sınırlamalar

  • Yerel işlemler otomatik artan birincil anahtar sütunlarıyla uyumlu değildir.

  • Yerel işlemler karamsar kilitleme (pessimistic locking) kullanır. İşlem sırasında, bölüm anahtarı değerine ait veriler üzerinde bir yazma kilidi tutulur ve yalnızca işlem kimliğini taşıyan yazmalar başarılı olur.

  • Bir işlemin maksimum ömrü 60 saniyedir. Arka arkaya gelen iki işlem arasında 60 saniyeden fazla süre varsa işlem zaman aşımına uğrar ve sunucu tarafından iptal edilir.

  • Bir işlem kimliği aynı anda yalnızca bir istek tarafından kullanılabilir. Kimliği paylaşan eşzamanlı isteklerin tümü başarısız olur.

  • İşlem içindeki her yazma, işlemi başlatan bölüm anahtarı değerini kullanmalıdır. Okuma işlemlerinde böyle bir kısıtlama yoktur.

  • Tek bir işlem en fazla 4 MB veri yazabilir.

  • Bir nitelik sütunu yazımı için veri sürümü belirtilmezse sunucu sürümü yazma sırasında oluşturur, uygulama sırasında değil.

  • Bir BatchWriteRowRequest işlem kimliği taşıyorsa tüm satırlar işlemin başlatıldığı tabloyu hedeflemelidir.

  • Bir işlem yazma içermiyorsa uygulama ve iptal aynı etkiye sahiptir ve her ikisi de işlemi serbest bırakır.

  • İşlem kimliği taşıyan başarısız bir okuma veya yazma işlemi sonlandırmaz. İsteği yeniden deneyin veya işlemi açıkça iptal edin.

Örnekler

İşlem sırasında bir satır okuma

Aşağıdaki örnek yerel bir işlem sırasında bir satır okur. Salt okunur işlemlerde uygulama ve iptal aynı etkiye sahiptir.

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)

İşlem sırasında toplu satır yazma

Aşağıdaki örnek, işlem kimliğini toplu bir isteğe dahil etmek için set_transaction_id yöntemini çağırır. Her satırın bölüm anahtarı değeri, işlemi başlatmak için kullanılan değerle eşleşmelidir.

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)