
Amazon DynamoDB
AWS’s serverless key-value and document database, with single-digit-millisecond reads at any size.
- What it is
- Key-value stores,Document databases
- Type
- Managed service on AWS
- Made by
- Amazon Web Services
- License
- Proprietary
- Facts checked
- 5 October 2026
What it is
A DynamoDB table has no servers or versions for you to manage. Each item has a partition key, and optionally a sort key. DynamoDB hashes the partition key to decide which storage partition holds the item, and keeps items with the same partition key together, ordered by sort key. So “all orders for customer 1042 in October” is one Query that reads a contiguous range. Data is copied across three Availability Zones, and tables have no practical size limit.
Capacity is billed one of two ways. On-demand charges per request, so a table with no traffic pays nothing for throughput. Provisioned charges for a set number of reads and writes per second, with optional auto scaling. Secondary indexes give extra access paths. Transactions update up to 100 items atomically. DynamoDB Streams records every item change in order, which is how Lambda functions react to writes. Global tables replicate a table to several Regions, each accepting writes, with a 99.999% availability SLA.
Why teams pick it
- Fully serverless: no instances, patches or maintenance windows, and on-demand tables pay no throughput charges when idle
- Consistent single-digit-millisecond latency at any table size
- Streams and Lambda triggers make event-driven designs straightforward
- Multi-Region, multi-active global tables and point-in-time recovery for the last 35 days
Watch out for
- No joins or ad-hoc queries: you design keys and indexes around known access patterns
- Items are at most 400 KB, and each
QueryorScancall returns at most 1 MB - A transaction covers at most 100 items and 4 MB, and isn’t atomic across Regions in a global table
- AWS-only, with its own API; moving off it means rewriting the data layer
Alternatives
What all key-value stores have in common →
Amazon ElastiCacheAWSAWS’s managed Valkey, Redis OSS and Memcached, as node-based clusters or a serverless cache.
Amazon MemoryDBAWSA Valkey- and Redis-compatible database that keeps everything in memory but loses no acknowledged write.
ValkeyOpen sourceThe Linux Foundation’s BSD-licensed fork of Redis 7.2.4: an in-memory key-value server that Redis clients can talk to unchanged.How it fits with other technologies
What Amazon DynamoDB uses
What uses Amazon DynamoDB
- AWS Lambdacommonly writes toAmazon DynamoDB
- Akkapersists entity events and snapshots inAmazon DynamoDB
- Apache Pekkopersists entity events inAmazon DynamoDB
- Amazon API Gatewaycan read and write items inAmazon DynamoDB
- Amazon VPCreaches privately via an endpointAmazon DynamoDB
- GraphQLresolves fields via AppSync fromAmazon DynamoDB
- Amazon Kinesis Data Streamskeeps consumer checkpoints (KCL) inAmazon DynamoDB
- AWS Step Functionsreads and writes items inAmazon DynamoDB
- AWS IoT Corewrites rule output toAmazon DynamoDB
- ScyllaDBimplements the API, as Alternator, ofAmazon DynamoDB
- Project Nessiecan keep its commit history (beta) inAmazon DynamoDB
- Spice.ai OSSreplicates tables, via Streams, fromAmazon DynamoDB
- Tinybirdmirrors tables, via DynamoDB Streams, fromAmazon DynamoDB
- Flociemulates the API ofAmazon DynamoDB
- LocalStackemulates the API ofAmazon DynamoDB
An on-demand table keyed by customer and time, queried by range · bash
aws dynamodb create-table --table-name orders --billing-mode PAY_PER_REQUEST \
--attribute-definitions AttributeName=customer_id,AttributeType=S AttributeName=order_ts,AttributeType=S \
--key-schema AttributeName=customer_id,KeyType=HASH AttributeName=order_ts,KeyType=RANGE
aws dynamodb put-item --table-name orders --item \
'{"customer_id":{"S":"c#1042"},"order_ts":{"S":"2026-10-05T09:30:00Z"},"total":{"N":"59.90"}}'
# every October order for one customer, newest first
aws dynamodb query --table-name orders --no-scan-index-forward \
--key-condition-expression "customer_id = :c AND begins_with(order_ts, :m)" \
--expression-attribute-values '{":c":{"S":"c#1042"},":m":{"S":"2026-10"}}'See it in a real stack
Serverless web app on AWS →Where it came from2007–2025
During the 2004 holiday shopping season, Amazon.com suffered outages that its engineers traced back to commercial databases being pushed past their limits. Many of Amazon’s services, such as the shopping cart, only ever looked data up by primary key, so a full relational database was more than they needed and limited how far they could scale. Amazon built Dynamo, an internal key-value store that spread data across many machines and kept accepting writes even when disks failed or networks split, and described it in a 2007 paper.
Dynamo worked, but few teams wanted to run it. It did nothing to reduce the operational complexity of running large database systems, and engineers didn’t want to become experts in its moving parts across several data centers. Meanwhile AWS’s managed SimpleDB showed that developers preferred simplicity to fine-grained control, although it was limited in size and its performance was hard to predict. DynamoDB, launched on January 18, 2012, set out to combine the two: Dynamo’s incremental scalability and predictable performance, with SimpleDB’s hands-off administration and richer table model.
It now runs much of Amazon itself. On Prime Day 2021, DynamoDB served trillions of API calls, peaking at 89.2 million requests per second. Later additions such as Streams, transactions, on-demand billing and multi-Region tables filled in much of what the first version left out.
Why it’s built this way
- A managed service, not software you install
- Dynamo showed that good technology goes unused if every team has to operate it. SimpleDB showed developers would trade fine-grained control for not running anything.
- Partition keys instead of joins and ad-hoc queries
- Most Amazon services fetched data by key. Hashing that key to spread items across partitions lets a table grow by adding partitions, which a relational design couldn’t do as easily.
- Provisioned throughput on solid-state drives
- Customers declared the reads and writes per second a table needed and DynamoDB reserved that capacity on SSDs, so latency stayed predictable and the price was clear up front. On-demand billing came later, in 2018, for spiky workloads.
Timeline
- 2007
Amazon’s Dynamo paper describes its internal key-value store
- 2012
DynamoDB launches on January 18
- 2015
Streams, Lambda triggers and cross-Region replication become generally available
- 2017
Global tables replicate a table across Regions, each accepting writes
- 2018
On-demand capacity and ACID transactions announced at re:Invent
- 2021
Prime Day traffic peaks at 89.2 million requests per second
- 2025
Global tables gain multi-Region strong consistency
- Werner Vogels: Amazon DynamoDB, a fast and scalable NoSQL database service (Jan 2012)
- Werner Vogels: Amazon’s Dynamo (Oct 2007)
- AWS What’s New: DynamoDB Streams, cross-Region replication and triggers (Jul 2015)
- AWS News Blog: New for DynamoDB, global tables and on-demand backup (Nov 2017)
- Amazon press release: new database capabilities at re:Invent (Nov 2018)
- AWS News Blog: Prime Day 2021, two chart-topping days (2021)
- AWS What’s New: global tables with multi-Region strong consistency (Jun 2025)
Sources14 · facts checked 5 October 2026
- DynamoDB Developer Guide: What is Amazon DynamoDB?
- DynamoDB Developer Guide: Partitions and data distribution
- DynamoDB Developer Guide: Throughput capacity modes
- DynamoDB Developer Guide: On-demand capacity mode
- DynamoDB Developer Guide: Provisioned capacity mode
- DynamoDB Developer Guide: Transactions, how it works (incl. global tables)
- DynamoDB Developer Guide: Change data capture with DynamoDB Streams
- DynamoDB Developer Guide: Global tables
- DynamoDB Developer Guide: Point-in-time recovery
- DynamoDB Developer Guide: Constraints
- DynamoDB Developer Guide: Quotas
- DynamoDB Developer Guide: Export to Amazon S3
- DynamoDB Developer Guide: Import from Amazon S3
- Amazon DynamoDB Service Level Agreement