Database Migration Plan: Postgres → TiDB
We're hitting vertical scaling limits on our primary Postgres instance. Write throughput is capped at ~8K TPS and we need 25K+ for the holiday season.
- MySQL-compatible wire protocol (most ORMs work out of the box)
- Horizontal write scaling via Raft-based sharding
- HTAP: real-time analytics without a separate data warehouse
- Strong consistency (no eventual consistency surprises)
- Replace
SERIALwithAUTO_RANDOMfor distributed ID generation - Convert
JSONBcolumns toJSON(TiDB uses MySQL JSON) - Replace Postgres-specific extensions (pg_trgm → full-text index)
- Adjust isolation level expectations (TiDB uses snapshot isolation)
| Risk | Impact | Mitigation |
|---|---|---|
| ORM compatibility gaps | High | Run full test suite against TiDB in CI |
| Latency increase on joins | Medium | Pre-optimize slow queries, add covering indexes |
| Operational complexity | Medium | Team training, runbook creation |
| Data loss during dual-write | Critical | Checksums + reconciliation job every 5min |
Dual-write runs for full 14 days. If issues arise after cutover:
- Flip read traffic back to Postgres (instant)
- Replay TiDB writes to Postgres via CDC
- Full rollback within 30 minutes