DynamoDB ACID uyumlu mu?
Evet. DynamoDB, TransactWriteItems ve TransactGetItems API'leri üzerinden ACID işlemlerini destekler. Bunlar, 100'e kadar eylemi tek bir AWS Bölgesi içinde atomiklik, tutarlılık, yalıtım ve dayanıklılık garantileriyle tek bir ya-hep-ya-hiç işlemde gruplar. Tek öğelik yazmalar da atomik ve dayanıklıdır, ama çok öğeli ACID işlem API'lerini gerektirir.
Burada ACID ne anlama gelir
Bir DynamoDB işlemi ya her eylemi uygular ya da hiçbirini (atomiklik), veriyi geçerli bir durumda bırakır (tutarlılık), eşzamanlı işlemlerden yalıtılmıştır ve başarı döndürdüğünde dayanıklı biçimde işlenmiştir. Bu garantiler, işlem API'sinin çağrıldığı AWS Bölgesi içinde geçerlidir.
İşlem API'leri
TransactWriteItems—Put,Update,DeleteveConditionCheckeylemlerini yığınlayan eşzamanlı, idempotent bir yazma.TransactGetItems— birden çok öğenin atomik, tutarlı bir okuması.
Tek bir işlemde aynı öğeyi iki kez hedefleyemezsiniz.
Sınır 100, 25 değil
API referansı, TransactWriteItems'ın "groups up to 100 action requests" olduğunu ve "the aggregate size of the items in the transaction cannot exceed 4 MB" dediğini belirtiyor (2026-07-28 tarihinde alındı). Bu değer 2022'den önce 25'ti ve o eski sayı hâlâ yeterince yaygın biçimde tekrarlanıyor; dolayısıyla bir blog yazısı yerine API'ye karşı kontrol etmeye değer.
100 eylemli bir işlem kabul edilir. 101 eylemli bir tanesi reddedilir:
ValidationException: Member must have length less than or equal to 100O mesajın neyi içermediğine dikkat edin: "transaction" sözcüğünü. Bu, genel bir dizi uzunluğu şikâyetidir; dolayısıyla işlem hataları için yapılan bir günlük aramasında çıkmaz. Toplu API'ler bu konuda daha az çekingendir. 101 anahtarlı BatchGetItem, Too many items requested for the BatchGetItem call döndürür ve 26 istekli BatchWriteItem aynı cümleyi kendi adıyla döndürür.
Tek bir öğeyi iki kez hedeflemek de başarısız olur, her eylem tek başına başarılı olacak olsa bile:
ValidationException: Transaction request cannot include multiple operations on one itemBu, eylem listesini gelen olaylar üzerindeki bir döngüden önce anahtara göre yinelenenleri ayıklamadan kuran kodu yakalayan hatadır.
İşlemler ayrıca iki kat faturalandırır. 1 KB'lık 100 öğeyi işlemsel olarak yazmak 200 yazma birimi tüketir; aynı öğeleri tek tek yazmak ise 100. Yani hiçbir şey başarısız olmasa bile atomikliğin bir bedeli vardır.
Peki ya global tablolar?
Bir işlem yalnızca çağrıldığı bölgede ACID'dir. Varsayılan çoklu bölge nihai tutarlılık (MREC) modunu kullanan global tablolarda işlemsel yazmalar bir bütün olarak çoğaltılmaz — değişiklikler yayılırken başka bir bölge kısa süreliğine kısmen çoğaltılmış bir işlem gözlemleyebilir. Çoklu bölge güçlü tutarlılık (MRSC) için yapılandırılmış global tablolar ise işlem API'lerini hiç desteklemez.
Daha derine inin
Bunları güvenle nasıl modelleyeceğinizi DynamoDB işlemleri sayfasında öğrenin ve ihtiyaç duydukları koşul ifadelerini Expression Builder ile kurun. Kendi tablolarınıza karşı deneyin — DynoTable'ı indirin.
Kaynaklar
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı; 100 eylem ve 4 MB sınırları 2026-07-28 tarihinde API referansından yeniden alındı.
Yukarıdaki reddetmeler 2026-07-28 tarihinde @aws-sdk/client-dynamodb 3.1095.0 üzerinden DynamoDB Local 3.3.0'a (amazon/dynamodb-local:latest) karşı yeniden üretildi. Alıntılanan her dize birebir motor çıktısıdır.