DynamoDB Veri Türleri
Her DynamoDB attribute'u, wire formatında bir veya iki harfli bir tür koduyla etiketlenir. Bu kümeyi bilmek önemlidir çünkü tür, hem bir değerin nasıl depolandığını hem de bir item'ın boyutuna nasıl katkıda bulunduğunu belirler.
DynamoDB hangi veri türlerini destekler?
DynamoDB, üç kategoriye yayılan on veri türünü destekler. Skalerler; String (S), Number (N), Binary (B), Boolean (BOOL) ve Null (NULL)'dur. Dokümanlar; başka türleri iç içe barındıran Map (M) ve List (L)'dir. Set'ler; String Set (SS), Number Set (NS) ve Binary Set (BS)'tir — sırasız, homojen ve boş olamaz. Yalnızca S, N ve B bir anahtar olabilir.
| Kod | Tür | Kategori | JSON / JS karşılığı | Örnek (DynamoDB-JSON) |
|---|---|---|---|---|
S | String | Skaler | string | {"S": "Ada"} |
N | Number | Skaler | number | {"N": "37"} |
B | Binary | Skaler | Uint8Array / base64 | {"B": "ZGF0YQ=="} |
BOOL | Boolean | Skaler | boolean | {"BOOL": true} |
NULL | Null | Skaler | null | {"NULL": true} |
M | Map | Doküman | object | {"M": {"k": {"S": "v"}}} |
L | List | Doküman | array | {"L": [{"N": "1"}]} |
SS | String set | Set | — (JSON türü yok) | {"SS": ["a", "b"]} |
NS | Number set | Set | — | {"NS": ["1", "2"]} |
BS | Binary set | Set | — | {"BS": ["ZA=="]} |
Skalerler
S— string (UTF-8; karakter sayısıyla değil, bayt uzunluğuyla boyutlandırılır).N— number, hassasiyet için string olarak gönderilir; 38 basamağa kadar.B— binary, base64 kodlu gönderilir.BOOL—true/false.NULL— açık bir null işaretçisi.
Dokümanlar
M— map (nesne). İç içe attribute'ların her biri kendi tür etiketini korur.L— list. Elemanlar karışık türlerde olabilir.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}Set'ler
SS— string set,NS— number set,BS— binary set.
Set'ler sırasız, homojendir ve boş olamaz. Kritik olarak, düz JSON'un set türü
yoktur — bir dizi, asla bir SS/NS olarak değil, bir list (L) olarak gidip
gelir. Bu bir hata değil, gerçek bir dönüştürme sınırlamasıdır;
DynamoDB-JSON dönüştürücüsü notuna bakın.
Hangi türler anahtar olabilir?
ve anahtarları — tabloda ve herhangi bir index'te — bir skaler
olmalı ve yalnızca S, N veya B olabilir. Bir boolean, set, map veya list
üzerinde anahtarlama yapamazsınız. Değerleri tek bir S içinde birleştirerek
"bileşik" bir anahtar modelleyin (ör. ORDER#2026#42).
Bilinmeye değer sınırlar
- Bir item en fazla 400 KB olur — iç içe olanlar dahil her attribute adı artı değeri.
- Sayılar 38 basamağa kadar hassasiyet taşır (pozitif veya negatif).
- Map'ler ve list'ler 32 seviyeye kadar iç içe girer.
- Set'ler boş olamaz ve homojendir — boş set yok,
SileN'i karıştırmak yok.
Türün maliyeti neden etkilediği
Item boyutu, attribute-adı baytları artı değer baytlarının toplamıdır ve her tür farklı boyutlanır — sayılar sıkıştırılır, boolean'lar ve null'lar 1 bayttır, map'ler ve list'ler eleman başına ek yük ekler. Bu boyut, okuma/yazma kapasite birimlerine yukarı yuvarlanır. Gerçek bir item'ı item boyutu hesaplayıcısıyla ölçün.
DynoTable'da yapın
Yukarıdaki set-vs-list ayrımı, araçların genellikle gizlediği şeydir. DynoTable'ın item düzenleyicisi bunu bir format değiştirici ile açık hale getirir:
- Düz JSON — ilkeller düz kalır (
"age": 30), ancak set'ler, gidiş-dönüşten sağ çıkabilmeleri için tür sarmalayıcılarını korur:"tags": { "SS": ["a", "b"] },"scores": { "NS": ["1.5", "2.5"] }. Bu, günlük düzenleme için okunabilir biçimdir. - DynamoDB JSON — kanonik AWS biçimi; burada her değer
kendi tür etiketini taşır:
"age": { "N": "30" },"name": { "S": "alice" }.
İkisi arasında geçiş yapmak, her skaler, doküman ve set türünün wire üzerinde tam
olarak nasıl temsil edildiğini gösterir — ve set türlerinin düz-JSON karşılığı
olmadığı için, bu değiştirici, tüm item'ı elle marshal etmeden bir SS/NS/BS'yi
elle yazmanın tek yoludur.

Bir item'ı düzenlerken her attribute'un türünü ve canlı bayt sayısını görmek — ve her tür etiketini sizin için okuyan SQL Workbench'te türlü attribute'lar arasında filtrelemek veya toplamak — için DynoTable'ı deneyin. Marshal edilmiş bir blob'u uygulama olmadan dönüştürmek için, DynamoDB-JSON dönüştürücüsü aynı gidiş-dönüşü tarayıcıda yapar.


