AWS CLI ile DynamoDB Koşullu Yazma
Bir koşullu yazma, put-item, update-item veya delete-item'a bir --condition-expression iliştirir: DynamoDB bunu mevcut öğeye karşı değerlendirir ve yazmayı yalnızca geçerliyse uygular — atomik olarak, oku-değiştir-yaz yarışı olmadan. Bu, DynamoDB'nin iyimser-kilitleme ilkelidir. Bu örnek, bir güncellemeyi bir sürüm kontrolüyle korur.
Code
aws dynamodb update-item \
--table-name 'Music' \
--key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
--update-expression 'SET #upd0 = :updValue0, #version = :newVersion' \
--condition-expression 'attribute_exists(#cond0) AND #version = :expectedVersion' \
--expression-attribute-names '{"#upd0":"Genre","#version":"Version","#cond0":"Artist"}' \
--expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":expectedVersion":{"N":"7"},":newVersion":{"N":"8"}}'Başarı durumunda komut hiçbir şey yazdırmaz ve 0 ile çıkar. Başka bir yazıcı önce oraya ulaştıysa koşul başarısız olur:
An error occurred (ConditionalCheckFailedException) when calling the UpdateItem operation:
The conditional request failedAçıklama
--condition-expression— yazmayla atomik olarak depolanan öğeye karşı kontrol edilir. Kullanılabilir işlevler:attribute_exists,attribute_not_exists,attribute_type,contains,begins_with,size, artı karşılaştırıcılar (=,<>,<,>,<=,>=,BETWEEN,IN) veAND/OR/NOT.- İki temel deyim:
- Bir güncellemede
attribute_exists(#key)= "yalnızca güncelle, asla oluşturma". Bu olmadan, var olmayan bir anahtar üzerindekiupdate-itemöğeyi sessizce oluşturur (kazara-upsert hatası). - Bir put'ta
attribute_not_exists(#key)= "yalnızca oluştur, asla üzerine yazma" — PutItem sayfasında gösterilmiştir.
- Bir güncellemede
- İyimser kilitleme — öğeyi okuyun (sürüm 7), ardından 8'e yükseltirken
#version = :expectedVersionile yazın. İki eşzamanlı yazıcı ikisi birden kazanamaz; kaybedenConditionalCheckFailedExceptionile sıfır dışı çıkar, yeniden okur ve yeni sürümde yeniden dener. --return-values-on-condition-check-failure ALL_OLD— DynamoDB'den mevcut öğeyi başarısızlığa iliştirmesini ister (geçerli değerlerALL_OLD|NONE; hiç okuma kapasitesi tüketilmez). SDK'lar bu öğeyi istisnada sunar; CLI'nin varsayılan hata çıktısı yalnızca iletiyi yazdırır, bu nedenle betikler genellikle bir başarısızlıktan sonraget-itemile yeniden okur.- Başarısız bir koşullu yazma yine de yazma denemesini faturalandırır — koşulları ücretsiz bir varlık yoklaması olarak kullanmayın.
Görsel olarak yapın
Koşul ifadeleri tam olarak DynamoDB Expression Builder'ın oluşturduğu şeydir — işlevi seçin, ifadeyi + ad/değer eşlemelerini çalıştırmaya hazır bir CLI komutu olarak alın.
Kabukta tırnaklanan yer tutucular yerine üretilen, gözden geçirilebilir ifadelerle öğeleri düzenlemek için — DynoTable'ı indirin.
İlgili örnekler
- Node.js'te DynamoDB koşullu yazma — AWS SDK v3 ile aynı iyimser kilit.
- Python'da DynamoDB koşullu yazma — boto3 ile aynı iyimser kilit.
- AWS CLI ile DynamoDB PutItem — yalnızca-oluşturma
attribute_not_existsput'u. - DynamoDB koşul ifadeleri — desenlerle birlikte her işlev.
- ReturnValues'ı anlama — her dönüş seçeneğinin size ne verdiği.
- DynamoDB ConditionalCheckFailedException — başarısız kontrol beklendiğinde ve bunun ucuza nasıl ele alınacağı.
References
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Condition expressions — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.