DynamoDB On-Demand Pricing: Hidden Costs Explained
DynamoDB's free tier looks generous, until it isn't. We break down the read/write unit costs and show where the surprise bills come from.
"Serverless means only paying for what you use." This is the slogan for Amazon DynamoDB. And for true "scale-to-zero" apps, it is true. But for steady production workloads, DynamoDB On-Demand pricing can hide some nasty surprises.
How the Pricing Works
- Reads (RRU): $0.25 per million.
- Writes (WRU): $1.25 per million.
This sounds cheap. 1 million writes is a lot, right?
The Hidden Multipliers
1. The 1KB Ceiling
DynamoDB rounds up every item to the nearest 4KB (for WCUs in provisioned) or 1KB (for On-Demand). If your user session object is 1.1KB, you pay for 2 KB. You just doubled your bill. If you have a 5KB JSON blob, you pay for 5 units.
2. Transactional Overhead
Using TransactWriteItems (for ACID compliance) costs 2x the write units.
Using strongly consistent reads costs 2x the read units.
3. The "Scan" Disaster
A junior developer writes this code:
await docClient.scan({ TableName: 'Users' });
This reads EVERY item in the table. If you have 1 million users, that one API call just cost you $0.25. If that API call is on your homepage... you are bankrupt by morning.
Comparing to Flat-Rate Key-Value
For many use cases (session store, cache, simple profiles), a predictable Key-Value store is safer. With BaseKV, you pay for storage + transfer tiers.
- 1 Million Requests: Same price.
- 10 Million Requests: Same price (within IOPS limits).
- Scan Protection: You shouldn't be scanning a KV store anyway, but if you do, it hits your disk I/O, not your wallet directly.
Conclusion
DynamoDB is amazing technology. But its pricing model requires you to be a DynamoDB expert to avoid overspending. If you want predictable costs, simpler is often better.
See the difference. Check BaseKV pricing.