Tipe Data DynamoDB
Setiap atribut DynamoDB ditandai dengan kode tipe satu atau dua huruf dalam format wire. Mengetahui kumpulan tipe ini penting karena tipe menentukan bagaimana sebuah nilai disimpan sekaligus bagaimana ia dihitung terhadap ukuran sebuah Item.
Tipe data apa saja yang didukung DynamoDB?
DynamoDB mendukung sepuluh tipe data dalam tiga kategori. Skalar adalah String (S), Number (N), Binary (B), Boolean (BOOL), dan Null (NULL). Dokumen adalah Map (M) dan List (L), yang menyarangkan tipe lain. Set adalah String Set (SS), Number Set (NS), dan Binary Set (BS) — tak berurutan, homogen, dan tidak boleh kosong. Hanya S, N, dan B yang bisa menjadi key.
| Kode | Tipe | Kategori | Padanan JSON / JS | Contoh (DynamoDB-JSON) |
|---|---|---|---|---|
S | String | Skalar | string | {"S": "Ada"} |
N | Number | Skalar | number | {"N": "37"} |
B | Binary | Skalar | Uint8Array / base64 | {"B": "ZGF0YQ=="} |
BOOL | Boolean | Skalar | boolean | {"BOOL": true} |
NULL | Null | Skalar | null | {"NULL": true} |
M | Map | Dokumen | object | {"M": {"k": {"S": "v"}}} |
L | List | Dokumen | array | {"L": [{"N": "1"}]} |
SS | String set | Set | — (tanpa tipe JSON) | {"SS": ["a", "b"]} |
NS | Number set | Set | — | {"NS": ["1", "2"]} |
BS | Binary set | Set | — | {"BS": ["ZA=="]} |
Skalar
S— string (UTF-8; diukur berdasarkan panjang byte-nya, bukan jumlah karakter).N— number, dikirim sebagai string demi presisi; hingga 38 digit.B— binary, dikirim ter-encode base64.BOOL—true/false.NULL— penanda null eksplisit.
Dokumen
M— map (object). Setiap atribut bersarang menyimpan tag tipenya sendiri.L— list. Elemen boleh bertipe campuran.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}Set
SS— string set,NS— number set,BS— binary set.
Set bersifat tak berurutan, homogen, dan tidak boleh kosong. Yang penting, JSON
biasa tidak punya tipe set — sebuah array pulang-pergi menjadi list (L), tidak
pernah SS/NS. Itu batasan konversi yang nyata, bukan bug; lihat catatan
konverter DynamoDB-JSON.
Tipe mana yang bisa menjadi key?
Key dan — pada tabel maupun pada index mana pun — harus berupa skalar,
dan hanya S, N, atau B. Anda tidak bisa membuat key dari boolean, set, map, atau list. Modelkan
key "komposit" dengan menggabungkan nilai menjadi satu S (mis. ORDER#2026#42).
Batas yang perlu diketahui
- Sebuah Item maksimal 400 KB — setiap nama atribut ditambah nilai, termasuk yang bersarang.
- Number membawa presisi hingga 38 digit (positif atau negatif).
- Map dan list bersarang hingga 32 tingkat dalam.
- Set tidak boleh kosong dan homogen — tanpa set kosong, tanpa mencampur
SdanN.
Mengapa tipe memengaruhi biaya
Ukuran Item adalah jumlah byte nama atribut ditambah byte nilai, dan setiap tipe diukur berbeda — number dipadatkan, boolean dan null adalah 1 byte, map dan list menambah overhead per elemen. Ukuran itu dibulatkan ke atas menjadi capacity unit baca/tulis. Ukur sebuah Item nyata dengan kalkulator ukuran Item.
Lakukan di DynoTable
Pembedaan set-vs-list di atas adalah hal yang biasanya disembunyikan oleh tooling. Editor Item DynoTable membuatnya eksplisit dengan toggle format:
- JSON biasa — primitif tetap polos (
"age": 30), tapi set mempertahankan pembungkus tipenya agar bertahan saat pulang-pergi:"tags": { "SS": ["a", "b"] },"scores": { "NS": ["1.5", "2.5"] }. Ini bentuk yang mudah dibaca untuk pengeditan sehari-hari. - DynamoDB JSON — bentuk kanonik AWS, di mana setiap nilai
membawa tag tipenya:
"age": { "N": "30" },"name": { "S": "alice" }.
Beralih di antara keduanya menunjukkan tepat bagaimana setiap tipe skalar, dokumen,
dan set direpresentasikan di wire — dan karena tipe set tidak punya padanan JSON
biasa, toggle ini adalah satu-satunya cara membuat SS/NS/BS secara manual tanpa
melakukan marshalling seluruh Item dengan tangan.

Coba DynoTable untuk melihat tipe setiap atribut dan hitungan byte langsung saat Anda mengedit sebuah Item — serta memfilter atau mengagregasi lintas atribut bertipe di SQL Workbench, yang membaca setiap tag tipe untuk Anda. Untuk mengonversi blob ter-marshal tanpa aplikasi, konverter DynamoDB-JSON melakukan pulang-pergi yang sama di browser.


