DynamoDB TTL destekliyor mu?
Evet. DynamoDB, Time to Live'ı (TTL) destekler. Unix epoch sona erme zaman damgasını saniye cinsinden tutan bir Number özniteliği belirlersiniz; DynamoDB de süresi dolan öğeleri arka planda — genellikle sona ermeden sonraki birkaç gün içinde — ek maliyet olmadan ve yazma kapasitesi tüketmeden kaldırır. Süresi dolmuş ama henüz silinmemiş öğeler, kaldırılana kadar okumalarda görünmeye devam edebilir.
Nasıl etkinleştirilir
Tablo için TTL'i açın ve sona erme zamanını tutan özniteliği adlandırın. O özniteliğin, Unix epoch zaman damgasını saniye cinsinden (milisaniye değil) depolayan bir Number olması gerekir. Değeri geçmişte olan öğeler silinmeye uygun hâle gelir.
Ne beklemelisiniz
- Ücretsiz — otomatik silme yazma kapasite birimi tüketmez. Aynı temizliği
kendiniz yapmak öğe başına bir yazma birimine mal olur: 1 KB'lık on milyon süresi
dolmuş öğe, on milyon yazma birimi,
us-east-1talep üzerine fiyatlarıyla $6.25 ve onları bulmak için 100 GB'lık bir tablo üzerindeki her tam tarama için yaklaşık $1.64 daha demektir. (Bir istisna: bir global tabloda, diğer her Bölgeye çoğaltılan silme, orada çoğaltılmış yazma kapasitesi tüketir.) - Anlık değil — DynamoDB, süresi dolan öğeleri genellikle sona ermeden sonraki birkaç gün içinde kaldırır.
- Hâlâ okunabilir — fiziksel olarak silinene kadar, süresi dolmuş öğeler okumalarda, sorgularda ve taramalarda görünebilir; kesinlik önemliyse onları filtreleyip ayıklayın.
Sessizce hiç çalışmama biçimi
DynamoDB, TTL'i yönelttiğiniz özniteliği doğrulamaz. expiresAt üzerinde TTL etkin
bir tabloda, aşağıdaki yazmaların ikisi de HTTP 200 döndürdü ve iki öğe de asla
sona ermeyecek:
{"pk": {"S": "sess#1"}, "expiresAt": {"S": "1790812800"}}
{"pk": {"S": "sess#2"}, "expiresAt": {"N": "1790812800000"}}İlki zaman damgasını bir String olarak depolar. AWS açıkça belirtir: "items with a
TTL attribute that is not a Number type are ignored by the TTL process" ve size
bunu ne yazma zamanında, ne etkinleştirme zamanında, ne de sonrasında hiçbir şey
söyler.
İkincisi gerçekte olanıdır, çünkü tür doğrudur ve değer Date.now()'dan gelmiştir.
1790812800000, milisaniye cinsinden 1 Ekim 2026'dır. TTL'in onu okuduğu tek biçim
olan saniye olarak okunduğunda o zaman damgası 58718 yılına düşer. Öğe iyi
biçimlendirilmiş, sorgulanabilir, depolama için faturalandırılan ve elli altı bin yıl
sonra sona ermek üzere zamanlanmış durumdadır.
API'de bu hataların hiçbirini yüzeye çıkaran bir şey yoktur, dolayısıyla denetimin siz yazmadan önce olması gerekir. TTL dönüştürücümüz tam da bu nedenle 1e12'nin üzerindeki her değeri milisaniye kabul eder ve değerin çözümlendiği tarihi gösterir.
Yaygın kullanımlar
Kendini temizlemesi gereken oturum kayıtları, doğrulama token'ları ve önbelleklenmiş sonuçlar — klasik TTL kullanım durumları. Silmelere tepki vermek için DynamoDB Streams ile eşleştirin.
Daha derine inin
DynamoDB TTL kılavuzunu ve DynamoDB Streams kılavuzunu okuyun. TTL özniteliklerini görüntülemek ve ayarlamak için DynoTable'ı indirin.
Kaynaklar
- Using time to live (TTL) in DynamoDB — Amazon DynamoDB Developer Guide
- Working with expired items and time to live (TTL) — Amazon DynamoDB Developer Guide
- 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ı; TTL.html 2026-07-28 tarihinde yeniden denetlendi.
Yukarıdaki iki yazma da 2026-07-28 tarihinde @aws-sdk/client-dynamodb 3.1095.0 üzerinden DynamoDB Local 3.3.0'a karşı çalıştırıldı ve HTTP 200 ile kabul edildi. Temizlik maliyetleri, senkronize edilmiş AWS fiyat tablomuzdaki us-east-1 talep üzerine oranlarından hesaplandı.