To be fair: acknowledged writes are durable, and strongly consistent reads exist for tables. That explains my experience; it doesn't change the verdict. Postgres with JSONB "NoSQL tables" covers every case I've met. Argue with me.
Don't use it when
- At my clients' scale, always. A huge, simple key-value workload might justify NoSQL, and even then I'd look beyond DynamoDB.
In my words: what hurts
- I was never sure writes really landed.
- Eventual consistency left me waiting for data.
- The query model is hard to reason about.
Gotchas, with fixes
Gotcha: Reads are eventually consistent by default, so a read right after a write can miss it.
Fix: Use strongly consistent reads (tables only, not global secondary indexes), or use Postgres.
Provisioning
Official Pulumi package · Official Terraform provider
Use instead
Postgres on Neon, with JSONB for the document-shaped data.
Alternatives
- Neon (serverless Postgres) Relational data plus JSONB documents.
Where it fits
- A database: Don't.
You design every query up front and pay for it in rewrites when the app changes. Postgres with JSONB gives you documents and SQL in one place, and covers every case I've met.
Instead: Neon (serverless Postgres)
Last reviewed by Nicolas Dao