DynamoDB şemasız mı?

Evet. DynamoDB şemasızdır. Birincil anahtar dışında, bir tablo oluşturduğunuzda hiçbir öznitelik ya da veri türü tanımlamazsınız. Her öğe kendi ayrı öznitelik kümesini taşıyabilir ve bunlar öğeden öğeye serbestçe değişebilir — dolayısıyla veri modelinizi şema göçleri çalıştırmadan uyarlarsınız.

Önden ne tanımlarsınız

Yalnızca birincil anahtarı: bir bölüm anahtarı (zorunlu) ve isteğe bağlı bir sıralama anahtarı, artı türleri. Geri kalan her şey serbesttir. Sütun bildirmezsiniz.

Öğe başına ne değişir

Aynı tablodaki herhangi iki öğenin öznitelikleri tamamen farklı olabilir. Bir öğe email ve status tutabilir; bir diğeri orderTotal ve iç içe bir address map'i tutabilir. DynamoDB ne yazarsanız onu saklar.

Şemasızlık nerede durur

Şemasızlığın kesin bir sınırı vardır. Birincil anahtar her yazmada doğrulanır; başka hiçbir şey doğrulanmaz. Ortak hiçbir özniteliği olmayan iki öğe aynı tabloya şikâyetsiz girer:

await client.send(
  new PutItemCommand({
    TableName: 'people',
    Item: {pk: {S: 'USER#1'}, email: {S: 'a@b.c'}, status: {S: 'active'}}
  })
);
await client.send(
  new PutItemCommand({
    TableName: 'people',
    Item: {
      pk: {S: 'ORDER#1'},
      orderTotal: {N: '42.5'},
      address: {M: {city: {S: 'Madrid'}}},
      tags: {SS: ['a', 'b']}
    }
  })
);

İkisi de başarılı olur. Şimdi aynı bölüm anahtarını string yerine sayı olarak yazın:

ValidationException: One or more parameter values were invalid: Type mismatch for key
HTTP 400

Ve pk'yi tamamen atlayın:

ValidationException: One of the required keys was not given a value
HTTP 400

Şemanın tamamı o iki reddir. Anahtar özniteliği var olmak ve AttributeDefinitions'ta bildirilen türle eşleşmek zorundadır. Bunun ötesindeki her şey yazıldığı gibi kabul edilir.

Bir yazım hatası da geçer. staus'un status olması gerektiğini yazma anında size hiçbir şey söylemez.

Neden işe yarar

  • Göç yok — istediğiniz zaman öznitelik ekleyin ya da çıkarın.
  • Karışık varlıklar — birçok varlık türü tek bir tabloyu paylaşabilir (tek tablo tasarımı).
  • Geliştirilebilir — model, gereksinimler değiştikçe değişir.

Dayandığın her biçimi veritabanı değil, uygulaman zorunlu kılar.

Şemasızlığın gevşetmediği şeyler

Şemasızlık yalnızca anahtar olmayan öznitelikler için geçerlidir. DynamoDB'nin diğer her limiti hâlâ bağlar:

  • Öğe başına 400 KB — öznitelik adları ve değerleri tavanı birlikte doldurur.
  • Bir değerin içindeki map ve list'ler için 32 yuvalama düzeyi.
  • Tek bir öznitelik adı için en fazla 65.535 bayt.
  • BatchWriteItem çağrısı başına en fazla 25 öğe.

Bir öğeye status string'i koyup sonrakinde atlayabilirsin, ama ikisinde de 500 KB'lık bir blob saklayamazsın. Yazmadan önce bir payload'u ölçmek için öğe boyutu hesaplayıcısını kullan ve bir tabloda varlık türlerini karıştırırken tek tablo tasarımını oku.

DynoTable'da: herhangi bir tabloda Ayarlar'ı aç ve dizinle. Çıkarılan şema örneklenmiş öğelerden kurulur ve dürüstçe etiketlenir — beyan ettiğini değil, yazdığını gösterir. Yerel indeksin nasıl örneklediği ve yenilendiği için Tablo genel bakışı ve dizinleme'e bak.

Daha derine inin

Karışık öğeler için tek tablo tasarımı ve type özniteliği desenine bakın. Gerçek öğe biçimlerini incelemek için DynoTable'ı indirin.

Kaynaklar

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

2026-07-28 tarihinde, Node v24.18.0 üzerinde @aws-sdk/client-dynamodb 3.1095.0 ile DynamoDB Local 3.3.0'a karşı yeniden üretildi. Her iki ValidationException mesajı da birebir motor çıktısıdır.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.