Apakah DynamoDB schemaless?
Ya. DynamoDB bersifat schemaless. Selain primary key, Anda tidak mendefinisikan atribut atau tipe data apa pun saat membuat tabel. Setiap item bisa membawa kumpulan atributnya sendiri yang berbeda, dan atribut itu bisa bervariasi bebas dari satu item ke item berikutnya — jadi Anda menyesuaikan model data tanpa menjalankan migrasi schema.
Apa yang Anda definisikan di muka
Hanya primary key-nya: sebuah partition key (wajib) dan sort key opsional, berikut tipenya. Selebihnya bebas. Anda tidak mendeklarasikan kolom.
Apa yang bervariasi per item
Dua item mana pun di tabel yang sama bisa punya atribut yang sepenuhnya berbeda. Satu item mungkin memuat email dan status; item lain memuat orderTotal dan sebuah map address bersarang. DynamoDB menyimpan apa pun yang Anda tulis.
Di mana schemaless berhenti
Schemaless punya batas yang tepat. Primary key divalidasi pada setiap penulisan; selain itu tidak ada. Dua item tanpa satu pun atribut yang sama masuk ke tabel yang sama tanpa keluhan:
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']}
}
})
);Keduanya berhasil. Sekarang tulis partition key yang sama sebagai angka alih-alih string:
ValidationException: One or more parameter values were invalid: Type mismatch for key
HTTP 400Dan hilangkan pk sama sekali:
ValidationException: One of the required keys was not given a value
HTTP 400Dua penolakan itulah seluruh schema-nya. Atribut key harus ada dan harus cocok dengan tipe yang dideklarasikan di AttributeDefinitions. Segala sesuatu setelah itu diterima apa adanya.
Salah ketik pun lolos. Tak ada yang memberi tahu Anda saat menulis bahwa staus sebenarnya dimaksudkan sebagai status.
Mengapa itu membantu
- Tanpa migrasi — tambah atau hapus atribut kapan saja.
- Entitas campuran — banyak tipe entitas bisa berbagi satu tabel (single-table design).
- Bisa berkembang — modelnya berubah seiring kebutuhan berubah.
Aplikasi Anda, bukan database-nya, yang menegakkan bentuk apa pun yang Anda andalkan.
Apa yang tanpa skema tidak longgarkan
Tanpa skema hanya berlaku untuk atribut non-kunci. Setiap batas DynamoDB lainnya tetap mengikat:
- 400 KB per item — nama dan nilai atribut sama-sama dihitung ke batas atas.
- 32 tingkat bersarang untuk map dan list di dalam sebuah nilai.
- 65.535 byte panjang maksimum untuk satu nama atribut.
- 25 item maksimum per panggilan
BatchWriteItem.
Anda bisa menaruh string status di satu item dan menghilangkannya di item berikutnya, tetapi Anda tidak bisa menyimpan blob 500 KB di keduanya. Pakai kalkulator ukuran item untuk mengukur payload sebelum menulis, dan baca single-table design saat Anda mencampur tipe entitas dalam satu tabel.
Di DynoTable: buka Pengaturan di tabel mana pun dan indeks tabelnya. Skema yang disimpulkan dibangun dari item sampel dan dilabeli jujur — menampilkan apa yang Anda tulis, bukan apa yang Anda deklarasikan. Lihat Ikhtisar tabel dan pengindeksan tentang bagaimana indeks lokal mengambil sampel dan menyegar.
Pelajari lebih lanjut
Lihat single-table design dan pola atribut type untuk item campuran. Unduh DynoTable untuk memeriksa bentuk item yang sebenarnya.
Referensi
- Core components of Amazon DynamoDB — Amazon DynamoDB Developer Guide
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Data modeling for DynamoDB tables — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.
Direproduksi 2026-07-28 terhadap DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0 pada Node v24.18.0. Kedua pesan ValidationException adalah keluaran mesin apa adanya.