Tablolar, Öğeler ve Birincil Anahtarlar
Bölüm anahtarları ve bileşik birincil anahtarlarla DynamoDB tabloları tasarlayacak ve öğe düzeyindeki depolama sınırlarını anlayacaksınız.
Tablolar, Öğeler ve Birincil Anahtarlar, CoddyKit'te ücretsiz bir Cloud & IT Cert Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cloud & IT Cert Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cloud & IT Cert Prep kursu toplamda 4 dersten oluşur.
DynamoDB: NoSQL Anahtar-Değer Deposu
Amazon DynamoDB, her ölçekte tek haneli milisaniye performansı sunmak üzere tasarlanmış, tamamen yönetilen, sunucusuz bir anahtar-değer ve belge veritabanıdır. İlişkisel veritabanlarının aksine DynamoDB şemasızdır; birincil anahtar mevcut olduğu sürece her öğe farklı bir öznitelik kümesine sahip olabilir.
DynamoDB, SQL tablosuna benzer şekilde en üst düzey kapsayıcı olan tablolar içinde veri depolar. Tablolar, herhangi bir yapılandırma gerektirmeden yerleşik yedeklilik sağlamak için otomatik olarak AZ'ler genelinde birden çok depolama düğümüne dağıtılır.
Tablolar ve Öğeler
Bir DynamoDB tablosu, her biri özniteliklerden oluşan bir öğe koleksiyonu barındırır. Öznitelikler türü belirlenmiş değerlerdir: String (S), Number (N), Binary (B), Boolean (BOOL), Null (NULL), List (L), Map (M) ve Set türleri (SS, NS, BS).
Bir tablodaki her öğe birincil anahtar özniteliklerini içermelidir; diğer tüm öznitelikler isteğe bağlıdır ve öğeden öğeye farklılık gösterebilir. Tek bir öğenin boyutu, tüm öznitelik adları ve değerleri dahil olmak üzere en fazla 400 KB olabilir.
# Example DynamoDB item structure (JSON)
{
'UserId': {'S': 'user-abc-123'},
'Timestamp': {'N': '1719000000'},
'Username': {'S': 'alice'},
'Score': {'N': '4200'},
'Tags': {'SS': ['premium', 'verified']}
}Basit Birincil Anahtar: Yalnızca Bölüm Anahtarı
Basit birincil anahtar, bölüm anahtarı (karma anahtarı olarak da adlandırılır) adlı tek bir öznitelikten oluşur. DynamoDB, öğeyi hangi depolama bölümünün barındıracağını belirlemek için bölüm anahtarı değerine dahili bir karma işlevi uygular. Aynı bölüm anahtarı değerine sahip tüm öğeler birlikte depolanır.
Basit birincil anahtarda, tablodaki iki öğe aynı bölüm anahtarı değerine sahip olamaz; bu değer her öğeyi benzersiz biçimde tanımlar. Bu tasarım, kullanıcı kimliği veya sipariş kimliği gibi benzersiz bir tanımlayıcıyla verilere her zaman eriştiğiniz tablolar için uygundur.
# Create a table with a simple (partition key only) primary key
aws dynamodb create-table \
--table-name Users \
--attribute-definitions AttributeName=UserId,AttributeType=S \
--key-schema AttributeName=UserId,KeyType=HASH \
--billing-mode PAY_PER_REQUESTBileşik Birincil Anahtar: Bölüm + Sıralama Anahtarı
Bileşik birincil anahtar, hem bölüm anahtarını hem de sıralama anahtarını (aralık anahtarı olarak da adlandırılır) kullanır. Aynı bölüm anahtarına sahip öğeler birlikte depolanır ve sıralama anahtarı değerine göre sıralanır; bu da bir bölüm içindeki aralık sorgularını mümkün kılar.
Bu tasarım son derece esnektir: sıralama anahtarları farklı olduğu sürece birden çok öğe aynı bölüm anahtarını paylaşabilir. Örneğin bir Orders tablosu, bölüm anahtarı olarak CustomerId ve sıralama anahtarı olarak OrderDate kullanabilir; böylece bir müşterinin tüm siparişlerini tarihe göre sıralanmış biçimde sorgulayabilirsiniz.
# Create a table with a composite primary key
aws dynamodb create-table \
--table-name Orders \
--attribute-definitions \
AttributeName=CustomerId,AttributeType=S \
AttributeName=OrderDate,AttributeType=S \
--key-schema \
AttributeName=CustomerId,KeyType=HASH \
AttributeName=OrderDate,KeyType=RANGE \
--billing-mode PAY_PER_REQUESTBölüm Anahtarı Tasarımı ve Yoğun Bölümler
Doğru bölüm anahtarını seçmek, DynamoDB tasarımındaki en önemli karardır. İyi bir bölüm anahtarı yüksek kardinaliteye (çok sayıda farklı değere) sahiptir ve erişimi bölümlere eşit biçimde dağıtır. Kötü seçimler, bir bölümün orantısız miktarda trafik aldığı yoğun bölümlere yol açar ve bu da kısıtlamaya neden olur.
Kaçınılması gereken anti-kalıplar: yalnızca iki değere sahip bir boole bayrağı kullanmak, bugünün tüm yazma işlemlerini aynı yerde gruplayan bir tarih kullanmak veya düşük kardinaliteli bir durum alanı kullanmaktır. İyi seçimler: kullanıcı kimliği, cihaz kimliği, rastgele UUID veya tenantId#entityType gibi bileşik değerlerdir.
PutItem, GetItem ve DeleteItem
Üç temel DynamoDB öğe işlemi şunlardır:
- PutItem: yeni bir öğe yazar veya aynı birincil anahtara sahip mevcut öğeyi tamamen değiştirir
- GetItem: bir öğeyi tam birincil anahtarına göre alır (tam anahtarı, yani bölüm anahtarını ve bileşik anahtar kullanılıyorsa sıralama anahtarını gerektirir)
- DeleteItem: bir öğeyi tam birincil anahtarına göre kaldırır
Bu üç işlemin tamamı öğe düzeyinde atomiktir. Varsayılan olarak GetItem, sonunda tutarlı okumalar kullanır; --consistent-read eklemek, her zaman en son yazılan değeri döndüren güçlü tutarlı bir okumayı zorunlu kılar.
# PutItem
aws dynamodb put-item \
--table-name Users \
--item '{"UserId":{"S":"user-123"},"Name":{"S":"Alice"}}'
# GetItem
aws dynamodb get-item \
--table-name Users \
--key '{"UserId":{"S":"user-123"}}' \
--consistent-readUpdateItem ve Koşullu İfadeler
UpdateItem, PutItem'ın aksine mevcut bir öğenin tamamını değiştirmeden belirli öznitelikleri değiştirir. Öznitelikleri ekleyebilir, kaldırabilir veya Number öznitelikleri üzerinde atomik aritmetik işlemler gerçekleştirebilirsiniz (ör. bir sayacı artırmak).
Koşullu ifadeler, bir işlemin yalnızca bir koşul doğruysa başarılı olması gerektiğini belirtmenizi sağlar. Örneğin bir öğenin durumunu yalnızca mevcut değeri PENDING ise güncelleyebilirsiniz. Bu, işlemler olmadan iyimser kilitleme kalıplarını uygular ve önemli bir DynamoDB tasarım tekniğidir.
# Atomically increment a counter, only if item exists
aws dynamodb update-item \
--table-name Orders \
--key '{"CustomerId":{"S":"c-123"},"OrderDate":{"S":"2026-06-20"}}' \
--update-expression 'SET ItemCount = ItemCount + :inc' \
--condition-expression 'attribute_exists(CustomerId)' \
--expression-attribute-values '{":inc":{"N":"1"}}'Query ve Scan Karşılaştırması
Query, aynı bölüm anahtarı değerini paylaşan ve isteğe bağlı olarak sıralama anahtarı koşullarına göre filtrelenen öğeleri alır. Query verimlidir; yalnızca hedeflenen bölümü okur. Bölüm içindeki sonuçları daraltmak için begins_with, between, =, <, > gibi sıralama anahtarı koşullarını kullanabilirsiniz.
Scan, tablodaki her öğeyi okur ve ardından isteğe bağlı bir filtre ifadesi uygular. Scan işlemleri büyük tablolar için maliyetlidir ve üretim sorgu kalıplarında kaçınılmalıdır. Kendinizi sık sık Scan kullanırken buluyorsanız tablo tasarımınızı yeniden değerlendirin veya bir Global Secondary Index ekleyin.
# Query: get all orders for customer c-123 after a date
aws dynamodb query \
--table-name Orders \
--key-condition-expression 'CustomerId = :cid AND OrderDate >= :dt' \
--expression-attribute-values \
'{":cid":{"S":"c-123"},":dt":{"S":"2026-01-01"}}'Güçlü Tutarlı ve Sonunda Tutarlı Okumalar
DynamoDB, verilerinizin üç kopyasını birden çok AZ genelinde depolar. Sonunda tutarlı okumalar (varsayılan), yakın zamanda yapılan bir yazma işlemi henüz tüm kopyalara yayılmadıysa biraz güncelliğini yitirmiş bir değer döndürebilir; ancak bu okumalar, güçlü tutarlı okumaların tükettiği okuma kapasitesi birimlerinin yarısını tüketir.
Güçlü tutarlı okumalar her zaman en son işlenmiş yazma işlemini döndürür; ancak RCU'ların iki katına mal olur ve Global Secondary Indexes üzerinde kullanılamaz. Yüksek iş hacimli ve okuma ağırlıklı iş yükleri için sonunda tutarlı okumaları, uygulamanızın kesinlikle en güncel verilere ihtiyaç duyduğu durumlar içinse güçlü tutarlı okumaları seçin.
DynamoDB İşlemleri
DynamoDB, TransactWriteItems ve TransactGetItems aracılığıyla ACID işlemlerini destekler. Bir işlem, birden çok öğe ve hatta birden çok tablo genelinde en fazla 100 yazma işlemini gruplayabilir; böylece tüm işlemlerin başarılı olması veya tümünün atomik olarak geri alınması sağlanır.
İşlemleri, hesaplar arasında para aktarma (bir öğeden borç düşüp diğerine alacak ekleme) veya koltuk ayırtma (uygunluğu kontrol edip atomik olarak ayırtma) gibi senaryolarda kullanın. İşlemler normal RCU/WCU maliyetinin iki katına mal olur; bu nedenle bunları yalnızca birden çok öğe arasındaki atomikliğin gerçekten gerekli olduğu durumlarda kullanın.
Öğe Boyutu Sınırı ve Veri Modelleme İpuçları
DynamoDB'nin öğe başına 400 KB sınırı, veri modellemeyi etkiler. Büyük yükler (ör. görseller ve büyük belgeler) için ikili verileri S3'te depolayın ve yalnızca S3 nesne anahtarını DynamoDB'de saklayın. Derin iç içe geçmiş hiyerarşik veriler için her düğüm türünü, tek tablo tasarımı kullanarak kendi bölüm anahtarı düzeniyle modelleyin; tek bir tablo, bölüm anahtarı ön eki ve sıralama anahtarı düzeniyle birbirinden ayrılan birden çok varlık türünü barındırır.
Tek tablo tasarımı, tablo sayısını en aza indirir ve ilişkili öğeleri aynı bölümde bir arada bulundurarak verimli erişim düzenlerini mümkün kılar. Bu, karmaşık erişim düzenlerinde operasyonel yükü azaltan ve performansı artıran ileri düzey bir tekniktir.
Kısa Kontrol
Bu dersteki AWS Solutions Architect (SAA-C03) kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: DynamoDB tabloları, şeması olmayan ve boyutu 400 KB ile sınırlı öğeleri barındırır; basit birincil anahtarlar yalnızca bir bölüm anahtarı kullanırken bileşik anahtarlar aralık sorguları için bir sıralama anahtarı ekler ve yüksek kardinaliteli bölüm anahtarları aşırı yoğun bölümleri önler. Verimli erişim için Scan yerine Query kullanın. Sırada, sağlanan ve isteğe bağlı kapasite modlarını inceleyeceğiz.
Sıkça Sorulan Sorular
“Tablolar, Öğeler ve Birincil Anahtarlar” dersi ücretsiz mi?
Evet — “Tablolar, Öğeler ve Birincil Anahtarlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cloud & IT Cert Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cloud & IT Cert Prep kursu toplamda 4 dersten oluşur.
“Tablolar, Öğeler ve Birincil Anahtarlar” dersinde ne öğreneceğim?
Bölüm anahtarları ve bileşik birincil anahtarlarla DynamoDB tabloları tasarlayacak ve öğe düzeyindeki depolama sınırlarını anlayacaksınız. Cloud & IT Cert Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cloud & IT Cert Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cloud & IT Cert Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Tablolar, Öğeler ve Birincil Anahtarlar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cloud & IT Cert Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cloud & IT Cert Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Tablolar, Öğeler ve Birincil Anahtarlar
- Sağlanan ve İsteğe Bağlı Kapasite
- Genel İkincil Dizinler ve Yerel İkincil Dizinler
- DynamoDB Akışları ve Genel Tablolar