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 failed

Açı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) ve AND/OR/NOT.
  • İki temel deyim:
    • Bir güncellemede attribute_exists(#key) = "yalnızca güncelle, asla oluşturma". Bu olmadan, var olmayan bir anahtar üzerindeki update-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.
  • İyimser kilitleme — öğeyi okuyun (sürüm 7), ardından 8'e yükseltirken #version = :expectedVersion ile yazın. İki eşzamanlı yazıcı ikisi birden kazanamaz; kaybeden ConditionalCheckFailedException ile 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ğerler ALL_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 sonra get-item ile 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

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.