DynamoDB Item Tabanlı Eylemler
DynamoDB'nin API'si üç aileye ayrılır: bir item üzerinde birincil anahtarıyla çalışan
item tabanlı eylemler, tek bir partition içinde bir aralığı okuyan Query ve her
şeyi okuyan Scan. Bu kılavuz ilk aile — en sık kullandığınız dört işlem:
GetItem, PutItem, UpdateItem, DeleteItem. Bunlar DynamoDB'nin sunduğu en ucuz,
en hızlı çağrılardır ve aralarındaki ayrımları doğru anlamak (özellikle Put vs
Update) bir sınıf kazara veri kaybı hatasını önler.
DynamoDB'nin item tabanlı işlemleri nelerdir?
DynamoDB'nin item tabanlı işlemleri, tek bir item'a tam birincil anahtarıyla erişen dört çağrıdır: GetItem onu okur, PutItem onu oluşturur veya tamamen değiştirir, UpdateItem belirli attribute'ları yerinde değiştirir ve DeleteItem onu kaldırır. Her biri tam olarak bir item'ı hedefler ve bu da onları en hızlı, en ucuz çağrılar yapar — çok sayıda item okuyan Query ve Scan'in aksine.
GetItem— bir item'ı tam birincil anahtarıyla okur.PutItem— bir item'ı oluşturur veya tamamen değiştirir.UpdateItem— bir item'ı oluşturur veya yerinde belirli attribute'larını değiştirir.DeleteItem— bir item'ı tam birincil anahtarıyla siler.- Dördü de tam birincil anahtarı gerektirir (partition key, tablo varsa sort key dahil) — tam olarak bir item'a erişirler.
PutItemitem'ın tamamını üzerine yazar;UpdateItemcerrahidir — bunları karıştırmak attribute'ların sessizce kaybolma şeklidir.
Belirleyici özellik: tek item, tam anahtar
Her item tabanlı eylem tam birincil anahtarıyla tek bir item'ı hedefler. Bunları hızlı ve ucuz yapan da budur — DynamoDB partition key'i hash'ler, doğrudan item'a gider, biter. Filtreleme yok, tarama yok. Tam anahtarı bilmiyorsanız, bunlar doğru araç değildir; Query ve Scan bunun içindir.
Diyelim ki USER#<id> ile anahtarlanmış kullanıcı hesapları çalıştırıyorsunuz:
PK: USER#204 email, displayName, plan, createdAtUSER#204üzerindeGetItem→ doğrudan o kullanıcı.USER#204üzerindeDeleteItem→ o senyı kaldırır.
İkisi de kesin anahtarı gerektirir. Anahtar yoksa, item tabanlı eylem yok.
PutItem vs UpdateItem — sizi ısıran ayrım
İçselleştirmeye değer ayrım budur:
PutItemitem'ın tamamını yazar.USER#204zaten varsa ve yalnızca{email, displayName}ilePutItemyaparsanız, mevcutplanvecreatedAtattribute'ları gider — bir put item'ın tamamını değiştirir, birleştirmez.UpdateItemyalnızca adını verdiğiniz şeyi değiştirir. BirSET email = …içerenUpdateItemdiğer her attribute'a dokunmaz ve item yoksa onu oluşturur (bir upsert).
Pratik kural: mevcut bir item'ı değiştirmek için UpdateItem'a başvurun ve
PutItem'ı yalnızca gerçekten "bu item'ı tam yeni durum olarak yaz" anlamına geldiğinde
kullanın. Hem PutItem hem de UpdateItem bir
koşul ifadesi kabul eder, böylece yazma
işlemini koşullu yapabilirsiniz ("yalnızca zaten yoksa").
DynoTable'da item tabanlı eylemler
Bu aksiyonların arkasındaki ham API çağrılarını görmek ister misiniz? Altta yatan ifadeleri ve türlü değer haritalarını DynamoDB expression builder'da birleştirin ve düz JSON bir item'ı API'nin türlü formatına DynamoDB JSON dönüştürücü ile dönüştürün.
DynoTable'da aynı çalışma görseldir: ızgarada bir item açıp okuyun (bir GetItem),
attribute'ları düzenleyip işleyin (bir UpdateItem), bir satır ekleyin veya değiştirin
(bir PutItem) ya da birini silin — aynı anda bir item.

Tuzaklar ve sonraki adımlar
PutItemitem'ın tamamını değiştirir — gerisini kaybetmeden birkaç alanı değiştirmek içinUpdateItemkullanın.- Tam birincil anahtarı bilmeniz gerekir — anahtar yoksa item eylemi değil, Query/Scan.
- Aynı anda çok item mı? Bunları tek tek döngüye sokmayın — batch işlemleri onları daha az gidiş dönüşe katlar.
- Eski/yeni değeri geri mi istiyorsunuz? Bir ardıl
GetItemyerineReturnValuesayarlayın. - İlgili: query vs scan çok okuma tarafını kapsar.
API kodu yazmadan item'ları okumak, yazmak ve silmek mi istiyorsunuz? DynoTable'ı indirin ve tablolarınızla doğrudan çalışın.
Maliyet: tek item, tek sıçrama
Item tabanlı okumalar, DynamoDB'deki en ucuz adreslenebilir erişimdir. 2 KB'lık
bir satırda bir GetItem, 1 nihai tutarlı RCU tüketir (yukarı yuvarlanmış
tek bir 4 KB'lık blok). Partition key'i ve sort key'i bildiğiniz için aynı satırı
döndüren bir Query aynı kapasiteye mal olur — ancak yalnızca partition key'i
bilir ve uygulama kodunda filtrelerseniz, partition'daki her item için ödersiniz.
| İşlem | Gereken anahtarlar | Tipik kullanım | Kapasite biçimi |
|---|---|---|---|
GetItem | Tam birincil anahtar | id'ye göre nokta okuma | item başına 1 blok |
PutItem | Tam birincil anahtar | Tüm item'ı oluştur veya değiştir | KB başına 1 WCU, yuvarlanmış |
UpdateItem | Tam birincil anahtar | Attribute'ları yamala | Yazılan item boyutu üzerinden |
DeleteItem | Tam birincil anahtar | Satırı kaldır | Item boyutunda bir yazmayla aynı |
Query + filtre | Partition (+ isteğe bağlı sort koşulu) | Tek partition'da çok item | Eşleşen item'ların toplamı |
Temsili bir item'ı
item boyutu hesaplayıcısına yapıştırın,
sonra sıcak bir yol döngü içinde GetItem yerine iyi anahtarlanmış tek bir
Query kullandığında saniyedeki istek sayısıyla
fiyatlandırma hesaplayıcısında çarpın.
Yazmalarda condition expression'lar
Hem PutItem hem UpdateItem, isteğe bağlı
condition expression'ları kabul eder.
Tipik desenler:
attribute_not_exists(pk)put üzerinde — yarış olmadan yalnızca-oluştur ekleme.attribute_exists(pk)update üzerinde — yanlışlıkla bir taslak oluşturmayı reddeder.plan = :oldupdate üzerinde — iyimser eşzamanlılık; başka bir yazıcı planı önce değiştirdiyse yeniden dene.
DeleteItem de koşulları destekler — örneğin yalnızca status = :closed ise
sil. Koşullar ayrı bir okuma ücreti eklemez; DynamoDB bunları yazma denemesi
sırasında saklanan item'a karşı değerlendirir.
Koşulları görsel olarak
DynamoDB expression builder'da oluşturun;
ConditionExpression ile ExpressionAttributeNames ve
ExpressionAttributeValues'ı SDK çağrınıza kopyalayın.
İdempotenslik ve üzerine yazma güvenliği
Koşulsuz bir PutItem, tüm item üzerinde son-yazan-kazanır. Webhook
işleyicileri veya SQS tüketicileri için, put'ları işlenmiş bir işaretçi
attribute'u üzerinde attribute_not_exists ile eşleştirin ya da
attribute_not_exists(processed) ile korunan SET processed = :true içeren bir
UpdateItem kullanın.
Bir denetim günlüğü için önceki attribute değerlerine ihtiyaç duyduğunuzda,
öncesinde bir GetItem yapmak yerine aynı UpdateItem üzerine
ReturnValues ekleyin — tek gidiş dönüş,
okuma/yazma yarışı yok.
Doğru item eylemini seçmek
| Amaç | Çağrı | Koruma |
|---|---|---|
| Kullanıcı id'sine göre profil okuma | GetItem | — |
| Yoksa kullanıcı oluşturma | PutItem | attribute_not_exists(pk) |
| E-postayı değiştir, diğer alanları koru | UpdateItem | isteğe bağlı email <> :old |
| Tüm yapılandırma blob'unu değiştir | PutItem | yalnızca yük eksiksizse |
| Kapatılmış talebi kaldır | DeleteItem | status = :closed |
| Bilinen anahtarlarla 50 talep okuma | BatchGetItem | seri hâlde 50× GetItem değil |
DynoTable'da yazmaları hazırlama
DynoTable, UpdateItem ve PutItem'ı commit'ten önce local olarak hazırlar.
Attribute farklarını gözden geçirir, isteğe bağlı PartiQL kontrolleri çalıştırır,
sonra commit edersiniz — bu da yukarıdaki gerçek API çağrılarına eşlenir. Toplu
satır silmeleri, arka planda işlenmemiş item'lar için yeniden denemeyle
BatchWriteItem'a batch'lenir.
SDK kodu üretimi için, update cümlelerini expression builder'da bir araya getirin ve üretilen SDK v3 parçacığını işleyici testlerinizin yanına yapıştırın.


