Step 4 of 8 - Storage
Scaling without copying the data
One action, both lanes. The only difference is where the bytes already are.
Stateful nodes on EBS
60 GB to move
Rebalancing ranges: 0 GB of 60 GB copied in 0 s.
| Data to move | 120 ranges x 512 MB | 60 GB |
|---|---|---|
| Copy rate | rebalance snapshots are rate-limited per store | 32 MiB/s |
| Time to complete | 60 GB at 32 MiB/s, and the docs give a band of minutes to hours | 32 min |
| Consequence | can't shrink quickly, so provision for peak | peak-provisioned |
Stateless KV nodes, disaggregated storage
8 KB of metadata
Creating hard links: the ranges are already in the storage layer.
| Hard links created | 120 ranges shared, not copied | 120 links |
|---|---|---|
| Metadata written | 120 x 64 bytes | 8 KB |
| Time to complete | 8 KB at 32 MiB/s | under a second |
| Bulk data moved | none: the range's SSTables are shared, not copied | 0 GB |
| Still sent | the range's store-local state, which no hard link shares | small |
How this is worked out
- Both bars run in real time. A second on screen is a second of the actual operation: the hard links are written in under a second and the copy needs 32 min, so the left-hand bar is still going when you leave the page. There's nothing to wait for.
-
Moving a range is rate-limited per store, so the duration is arithmetic:
60 GB at 32 MiB/s, which is
CockroachDB's default
kv.snapshot_rebalance.max_rate. It's the optimistic end - a real rebalance shares the link with your queries - and it lands inside the "minutes to hours" the design docs give.