DynamoDB ilişkisel bir veritabanı mı?
Hayır. DynamoDB ilişkisel bir veritabanı değildir — NoSQL bir anahtar-değer ve doküman deposudur. Sabit şemalı tablolar, yabancı anahtarlar ve join işlemleri yoktur. Veriyi, ilişkisel (SQL) bir veritabanında yapacağınız gibi ilişkili tablolar arasında normalize etmek yerine, uygulamanızın erişim desenleri etrafında modeller ve denormalize edersiniz. İlişkisel iş akışını özlüyorsanız, DynoTable onun bir kısmını istemcide geri getirir: gerçek JOIN ve GROUP BY çalıştıran bir SQL Workbench ve tabloları görsel olarak birleştiren Smart Table'lar.
Neden ilişkisel değil
İlişkisel veritabanları bir şema dayatır, veriyi birçok tabloya normalize eder ve onları okuma zamanında birleştirir. DynamoDB bunun tersini yapar: şemasız öğeler saklar ve ilişkili veriyi çoğaltarak ya da gömerek önceden birleştirmenizi bekler.
İlişkisel özelliklerin yerine ne geçer
- Join'ler → denormalizasyon ve tek tablo tasarımı.
- Normalize tablolar → tek bir bölüm anahtarı altında gruplanan öğe koleksiyonları.
- Anlık SQL → anahtar tabanlı Query ve Scan ya da PartiQL (SQL uyumlu bir alt küme, yine de join yok).
Bu arada PartiQL bu boşluğu kapatmaz. Ayrıştırıcısı iki tablolu bir SELECT'i reddeder ve GROUP BY'ı reddeder — ikisini de hiçbir şey okumadan önce; tam reddetmeler DynamoDB join destekler mi ve DynamoDB SQL destekler mi sayfalarında alıntılanmıştır.
Denormalize etmek size gerçekte neye mal olur
Bu takas genellikle "birleştirmek yerine veriyi çoğaltmak" diye anlatılır ve bir depolama kararı gibi duyulur. Aslında bir yazma ve atomiklik kararıdır ve ilişkisel motorların sizden gizlediği kısım da budur.
5.000 siparişi olan bir müşteriyi ele alın ve müşteri görünen adını değiştirsin. İlişkisel bir şemada bu, tek bir satıra karşı tek bir UPDATE'tir ve her join yeni değeri hemen alır. DynamoDB'ye denormalize edildiğinde ad 5.000 sipariş öğesinin hepsinde yaşar; dolayısıyla ad değişikliği 5.000 öğe yazması demektir: 5.000 yazma birimi, öğe başına 1 KB üzerinden us-east-1 talep üzerine modda yaklaşık $0.003.
Para hiçbir şey değil. Sorun, bunun tek bir işlem olamamasıdır. TransactWriteItems 100 eylemde tavan yapar; dolayısıyla 5.000 öğe en az 50 ayrı işlem eder ve aralarında yalıtım yoktur. O fan-out çalıştığı sürece verileriniz kendisiyle çelişir ve uçuşun ortasına denk gelen her okuma eski ve yeni adların bir karışımını görür.
İlişkisel veritabanları size tam olarak şunu satar: tek bir yetkili kopyaya tek bir atomik değişiklik. Ondan vazgeçmek asıl giriş bedelidir ve "hangi öznitelikler çoğaltılıyor" sorusunun neden hangilerinin indeksleneceğinden daha fazla tasarım ilgisi hak ettiğini de bu açıklar.
Daha derine inin
DynamoDB'de veri nasıl modellenir ve tek tablo tasarımı sayfalarını okuyun. Veri modelinizi görsel olarak keşfetmek — ve üzerinde SQL Workbench ile ilişkisel tarzda JOIN/GROUP BY sorguları çalıştırmak — için DynoTable'ı indirin.
Kaynaklar
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Core components of Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PartiQL — a SQL-compatible query language for Amazon DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı; 100 eylemlik işlem tavanı 2026-07-28 tarihinde API başvurusundan yeniden alındı.