Database migration: 7 real scaling case studies
7 of the 73 engineering write-ups in our database are tagged with the technique "database migration". They come from 5 companies (Discord, Shopify, Atlassian, Slack and Tailscale) and were published between 2017 and 2026. Stack that shows up most often in these stories: MySQL (3), Cassandra (2) and Vitess (2). Often combined with horizontal sharding (2). 5 of the 7 state concrete scale numbers, for example "$5.1 million sales/minute (Black Friday 2025 peak)" (Shopify). Each card below links to our short summary and the original post.
We replaced Redis with MySQL for inventory reservations—and it scaled
Shopify moved checkout inventory reservations from Redis to MySQL using one row per sellable unit, a bounded pool of 1,000 rows per item/location and SELECT ... FOR UPDATE SKIP LOCKED. The real ceiling was connections held by other checkout code: tagging SQL by business process and measuring hold time in ProxySQL found it, and the cleanup removed 50% of reads and 33% of transactions on the primary.
Migrating the Jira Database Platform to AWS Aurora
Atlassian migrated about four million Jira databases from RDS Postgres to Aurora, balancing reliability, downtime and cost.
Horizontally scaling the Rails backend of Shop app with Vitess
Shopify's Shop app adopted Vitess to shard its Rails backend, covering keyspace design and the migration plan.
How Discord Stores Trillions of Messages
Discord moved its message store from Cassandra to ScyllaDB and put Rust data services in front of it to coalesce hot-partition requests.
Switching from etcd to SQLite: A Database Migration Story
Tailscale replaced etcd with SQLite plus Litestream replication for a simpler control-plane datastore.
Scaling Datastores at Slack with Vitess
Slack's multi-year migration from active-active MySQL pairs to Vitess, so data could be sharded by any key, not only workspace.
How Discord Stores Billions of Messages
Early story of Discord outgrowing MongoDB and moving messages to Cassandra with a channel+time-bucket partition key.