Compare NoSQL services (DynamoDB, Cosmos DB, Firestore) features and pricing.
Last verified: May 2026
| Feature | AWS | Azure | GCP |
|---|---|---|---|
| Service | Amazon DynamoDB | Azure Cosmos DB | Cloud Firestore |
| Data model | Key-value + Document | Multi-model (document, key-value, graph, column-family, table) | Document (hierarchical collections and documents) |
| Global distribution | Global Tables with multi-region, multi-active replication | Turnkey multi-region writes with configurable consistency | Multi-region with automatic replication across locations |
| Max document size | 400 KB per item | 2 MB per document | 1 MB per document |
| Feature | AWS | Azure | GCP |
|---|---|---|---|
| Capacity modes | On-demand + Provisioned (auto-scaling available) | Provisioned RU/s (with autoscale) + Serverless | Provisioned throughput not applicable; pay-per-operation |
| Pricing unit | Read Capacity Units (RCU) / Write Capacity Units (WCU) | Request Units per second (RU/s) | Per document read / write / delete operations |
| Free tier | 25 GB storage, 25 RCU / 25 WCU (always free) | 1,000 RU/s and 25 GB storage (always free) | 1 GiB storage, 50K reads / 20K writes / 20K deletes per day |
| Serverless option | Yes, on-demand mode is effectively serverless | Yes, serverless capacity mode (pay-per-request) | Yes, fully serverless by default |
| Feature | AWS | Azure | GCP |
|---|---|---|---|
| Consistency | Eventual consistency (default) + Strong consistency | 5 levels: strong, bounded staleness, session, consistent prefix, eventual | Strong consistency for all reads |
| Transactions | Yes, ACID transactions across up to 100 items (TransactWriteItems / TransactGetItems) | Yes, multi-document ACID transactions within a logical partition | Yes, ACID transactions on one or more documents (batched writes and transactions) |
| Feature | AWS | Azure | GCP |
|---|---|---|---|
| Secondary indexes | Global Secondary Indexes (GSI) + Local Secondary Indexes (LSI) | Automatic indexing on all properties by default (customizable index policy) | Single-field (automatic) + Composite indexes (manual or auto-suggested) |
| Change streams | DynamoDB Streams (ordered log of item-level changes, 24h retention) | Change Feed (ordered log of changes per container, push and pull model) | Real-time listeners (snapshot listeners for live query results) |
| Feature | AWS | Azure | GCP |
|---|---|---|---|
| TTL support | Yes, per-item TTL attribute with automatic expiration | Yes, per-item TTL with default and per-document override | Yes, TTL policies with field-level expiration |
| Encryption | Encryption at rest (AWS owned / customer-managed KMS key) + in-transit (TLS) | Encryption at rest (service-managed / customer-managed keys) + in-transit (TLS) | Encryption at rest (Google-managed / customer-managed CMEK) + in-transit (TLS) |
| Backup / restore | On-demand backup + Point-in-time recovery (PITR, up to 35 days) | Continuous backup with PITR (7 or 30 day retention) + periodic backup | Point-in-time recovery (PITR, up to 7 days) + managed export/import |
[
{
"feature": "Service",
"category": "General",
"aws": "Amazon DynamoDB",
"azure": "Azure Cosmos DB",
"gcp": "Cloud Firestore"
},
{
"feature": "Data model",
"category": "General",
"aws": "Key-value + Document",
"azure": "Multi-model (document, key-value, graph, column-family, table)",
"gcp": "Document (hierarchical collections and documents)"
},
{
"feature": "Global distribution",
"category": "General",
"aws": "Global Tables with multi-region, multi-active replication",
"azure": "Turnkey multi-region writes with configurable consistency",
"gcp": "Multi-region with automatic replication across locations"
},
{
"feature": "Max document size",
"category": "General",
"aws": "400 KB per item",
"azure": "2 MB per document",
"gcp": "1 MB per document"
},
{
"feature": "Capacity modes",
"category": "Capacity",
"aws": "On-demand + Provisioned (auto-scaling available)",
"azure": "Provisioned RU/s (with autoscale) + Serverless",
"gcp": "Provisioned throughput not applicable; pay-per-operation"
},
{
"feature": "Pricing unit",
"category": "Capacity",
"aws": "Read Capacity Units (RCU) / Write Capacity Units (WCU)",
"azure": "Request Units per second (RU/s)",
"gcp": "Per document read / write / delete operations"
},
{
"feature": "Free tier",
"category": "Capacity",
"aws": "25 GB storage, 25 RCU / 25 WCU (always free)",
"azure": "1,000 RU/s and 25 GB storage (always free)",
"gcp": "1 GiB storage, 50K reads / 20K writes / 20K deletes per day"
},
{
"feature": "Serverless option",
"category": "Capacity",
"aws": "Yes, on-demand mode is effectively serverless",
"azure": "Yes, serverless capacity mode (pay-per-request)",
"gcp": "Yes, fully serverless by default"
},
{
"feature": "Consistency",
"category": "Consistency & Transactions",
"aws": "Eventual consistency (default) + Strong consistency",
"azure": "5 levels: strong, bounded staleness, session, consistent prefix, eventual",
"gcp": "Strong consistency for all reads"
},
{
"feature": "Transactions",
"category": "Consistency & Transactions",
"aws": "Yes, ACID transactions across up to 100 items (TransactWriteItems / TransactGetItems)",
"azure": "Yes, multi-document ACID transactions within a logical partition",
"gcp": "Yes, ACID transactions on one or more documents (batched writes and transactions)"
},
{
"feature": "Secondary indexes",
"category": "Indexes & Queries",
"aws": "Global Secondary Indexes (GSI) + Local Secondary Indexes (LSI)",
"azure": "Automatic indexing on all properties by default (customizable index policy)",
"gcp": "Single-field (automatic) + Composite indexes (manual or auto-suggested)"
},
{
"feature": "Change streams",
"category": "Indexes & Queries",
"aws": "DynamoDB Streams (ordered log of item-level changes, 24h retention)",
"azure": "Change Feed (ordered log of changes per container, push and pull model)",
"gcp": "Real-time listeners (snapshot listeners for live query results)"
},
{
"feature": "TTL support",
"category": "Operations",
"aws": "Yes, per-item TTL attribute with automatic expiration",
"azure": "Yes, per-item TTL with default and per-document override",
"gcp": "Yes, TTL policies with field-level expiration"
},
{
"feature": "Encryption",
"category": "Operations",
"aws": "Encryption at rest (AWS owned / customer-managed KMS key) + in-transit (TLS)",
"azure": "Encryption at rest (service-managed / customer-managed keys) + in-transit (TLS)",
"gcp": "Encryption at rest (Google-managed / customer-managed CMEK) + in-transit (TLS)"
},
{
"feature": "Backup / restore",
"category": "Operations",
"aws": "On-demand backup + Point-in-time recovery (PITR, up to 35 days)",
"azure": "Continuous backup with PITR (7 or 30 day retention) + periodic backup",
"gcp": "Point-in-time recovery (PITR, up to 7 days) + managed export/import"
}
]The Multi-Cloud NoSQL Compare tool provides a comprehensive comparison of managed NoSQL database services across AWS DynamoDB, Azure Cosmos DB, and GCP Firestore and Bigtable. It examines data models, consistency levels, global distribution capabilities, throughput pricing, and storage costs to help you choose the right NoSQL service for your workload. The comparison is especially useful for teams building globally distributed applications or event-driven architectures where NoSQL databases excel. It also clarifies the differences between document, key-value, wide-column, and graph data models offered by each provider.
DynamoDB offers eventual and strong consistency per-read. Cosmos DB provides five consistency levels from strong to eventual, including bounded staleness and session consistency. Firestore offers strong consistency for all reads. Bigtable provides eventual consistency for replicated clusters and strong consistency for single-cluster reads.
Cosmos DB has the most mature global distribution story with turnkey multi-region writes and five consistency models. DynamoDB Global Tables support multi-region active-active with eventual consistency. Firestore supports multi-region but with a single write region. The best choice depends on your consistency requirements and write distribution needs.
Your team is building a global gaming leaderboard expected to handle 100K reads/sec and 10K writes/sec, with sub-50ms p99 latency requirements. The comparison shows: DynamoDB Global Tables with on-demand capacity = $1,200/month, single-digit ms p99; Cosmos DB multi-region = $2,400/month with strong consistency option; Firestore = won't meet latency at this scale. Choice: DynamoDB. The decision is made in an hour vs the days it would take to write benchmarks against each individually.
The compare tool normalizes NoSQL database features across providers into categories: data model (key-value, document, wide-column, multi-model), consistency models supported, global distribution capabilities, throughput pricing model (provisioned vs serverless vs on-demand), storage pricing, max item size, query language, secondary index support, and ecosystem integrations. Each row shows the provider-specific implementation with cost and feature deltas.
DynamoDB's single-digit-ms latency at scale is the gold standard for OLTP NoSQL on AWS. But its query model is restrictive — you must design partition keys around access patterns. Cosmos DB is more flexible (SQL-like queries, multiple APIs) but pays for it with higher latency at the same scale.
Firestore's free tier (50K reads, 20K writes per day) is the most generous of the three. For low-traffic apps (<1M users), Firestore can effectively be free, while DynamoDB and Cosmos DB charge from the first request beyond their tiny free tiers.
If you need wide-column / time-series / IoT-scale: DynamoDB with sort key patterns works for moderate scale, BigTable scales to petabytes but has a steep learning curve, Cosmos DB Cassandra API is a middle ground. Match the data model to the workload, not the cloud — multi-cloud isn't a goal in itself.
Was this tool helpful?
Disclaimer: This tool runs entirely in your browser. No data is sent to our servers. Always verify outputs before using them in production. AWS, Azure, and GCP are trademarks of their respective owners.