Is DynamoDB a key-value store?
Yes — DynamoDB is a key-value store, and also a document store. Every item is retrieved by its primary key (a partition key, optionally with a sort key), giving fast key-based lookups. It additionally supports document types — nested lists and maps — so it works as both a key-value and a document database.
The key-value model
Each item has a primary key that uniquely identifies it. A GetItem on that key is a direct, single-digit-millisecond lookup — no scanning. This is the classic key-value access pattern.
The document side
Beyond the key, values can be rich documents: maps (objects) and lists (arrays), nested up to 32 levels deep, within the 400 KB item limit. That makes DynamoDB a key-value store with JSON-like document values.
Where the document half stops
The 32-level cap is real (a 33rd level is rejected outright, with the exact error here), but depth is rarely what bites. Addressing is.
You read by key, not by field. A ProjectionExpression narrows what crosses the wire rather than what DynamoDB reads. On one ~30 KB item holding a long bio and a 100-element tags list, a strongly consistent GetItem bills the same three ways:
| Request | Returned | ConsumedCapacity |
|---|---|---|
GetItem, whole item | everything | 8 |
ProjectionExpression: 'status' | one 6-byte value | 8 |
ProjectionExpression: 'profile.tags[0]' | one list element | 8 |
That is the trade you accept by storing documents in a key-value store: the unit of access, and of billing, is the whole item. If one attribute is read constantly and its neighbors are large, they belong in different items.
Why the key matters so much
Because reads are keyed, an efficient lookup begins by pinning down a single partition key value. Designing good keys is the core of DynamoDB modeling.
Size the value, not just the key
Key-value speed assumes the value fits the access pattern. A 400 KB item costs the same to read whether you project one field or the whole document — the table in the section above already showed 8 capacity units for a ~30 KB item. Store large blobs in S3 and keep a pointer in DynamoDB when only part of the document is hot.
The item size calculator totals attribute names and values the way DynamoDB bills them.
In DynoTable: composite partition keys such as USER#123 decode in the grid so you can read the entity prefix at a glance, and Row Quick View (Space) opens the full document without losing your place. See Querying tables.
Go deeper
Understand keys in DynamoDB composite primary key and how DynamoDB partition keys work. Download DynoTable to query by key.
References
- Fast NoSQL Key-Value Database — Amazon DynamoDB — AWS
- Core components of Amazon DynamoDB — Amazon DynamoDB Developer Guide
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
Last verified 2026-07-13 against the official AWS documentation linked above.
The capacity figures were measured 2026-07-28 against DynamoDB Local 3.3.0 (amazon/dynamodb-local:latest) via @aws-sdk/client-dynamodb 3.1095.0, not estimated.