Fixed cost per operation
total cost = fixed cost + (cost per byte × size)
- Fixed cost
- the setup cost paid for each operation, whatever its size
- Transfer rate
- bytes per second once data streams
- Size
- bytes moved per operation
- Natural transfer size
- the size at which half of your time is setup
How it behaves
One input on the horizontal axis, the others held fixed.
Data table
| Request size x | series | Time spent transferring |
|---|---|---|
| 1,000 B | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.025% |
| 1.16 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.03% |
| 1.38 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.035% |
| 1.64 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.042% |
| 1.95 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.05% |
| 2.32 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.059% |
| 2.75 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.07% |
| 3.27 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.084% |
| 3.89 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.099% |
| 4.62 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.118% |
| 5.49 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.14% |
| 6.53 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.167% |
| 7.76 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.198% |
| 9.22 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.235% |
| 11 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.28% |
| 13 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.332% |
| 15.5 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.395% |
| 18.4 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.469% |
| 21.9 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.557% |
| 26 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.661% |
| 30.9 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.784% |
| 36.7 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 0.931% |
| 43.6 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 1.1% |
| 51.8 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 1.31% |
| 61.6 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 1.55% |
| 73.2 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 1.84% |
| 87 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 2.18% |
| 103 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 2.58% |
| 123 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 3.05% |
| 146 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 3.61% |
| 174 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 4.26% |
| 206 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 5.02% |
| 245 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 5.91% |
| 292 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 6.95% |
| 346 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 8.15% |
| 412 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 9.54% |
| 489 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 11.1% |
| 582 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 13% |
| 691 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 15% |
| 822 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 17.4% |
| 977 KB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 20% |
| 1.13 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 22.9% |
| 1.35 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 26.1% |
| 1.6 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 29.6% |
| 1.9 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 33.3% |
| 2.26 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 37.2% |
| 2.69 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 41.3% |
| 3.19 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 45.6% |
| 3.8 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 49.9% |
| 4.51 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 54.2% |
| 5.36 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 58.4% |
| 6.37 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 62.6% |
| 7.58 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 66.5% |
| 9 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 70.2% |
| 10.7 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 73.7% |
| 12.7 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 76.9% |
| 15.1 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 79.8% |
| 18 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 82.5% |
| 21.4 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 84.8% |
| 25.4 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 86.9% |
| 30.2 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 88.8% |
| 35.8 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 90.4% |
| 42.6 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 91.8% |
| 50.6 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 93% |
| 60.2 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 94% |
| 71.5 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 94.9% |
| 85 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 95.7% |
| 101 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 96.4% |
| 120 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 96.9% |
| 143 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 97.4% |
| 170 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 97.8% |
| 202 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 98.1% |
| 240 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 98.4% |
| 285 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 98.7% |
| 338 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 98.9% |
| 402 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 99.1% |
| 478 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 99.2% |
| 568 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 99.3% |
| 675 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 99.4% |
| 802 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 99.5% |
| 954 MB | object storage (F ≈ 50 ms, B ≈ 80 MB/s) | 99.6% |
| 1,000 B | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.077% |
| 1.16 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.091% |
| 1.38 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.109% |
| 1.64 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.129% |
| 1.95 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.153% |
| 2.32 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.182% |
| 2.75 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.216% |
| 3.27 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.257% |
| 3.89 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.305% |
| 4.62 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.363% |
| 5.49 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.431% |
| 6.53 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.511% |
| 7.76 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.607% |
| 9.22 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.721% |
| 11 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 0.856% |
| 13 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 1.02% |
| 15.5 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 1.2% |
| 18.4 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 1.43% |
| 21.9 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 1.69% |
| 26 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 2.01% |
| 30.9 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 2.37% |
| 36.7 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 2.81% |
| 43.6 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 3.32% |
| 51.8 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 3.92% |
| 61.6 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 4.63% |
| 73.2 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 5.45% |
| 87 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 6.42% |
| 103 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 7.53% |
| 123 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 8.83% |
| 146 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 10.3% |
| 174 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 12% |
| 206 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 14% |
| 245 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 16.2% |
| 292 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 18.7% |
| 346 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 21.4% |
| 412 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 24.5% |
| 489 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 27.8% |
| 582 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 31.4% |
| 691 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 35.3% |
| 822 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 39.3% |
| 977 KB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 43.5% |
| 1.13 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 47.8% |
| 1.35 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 52.1% |
| 1.6 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 56.4% |
| 1.9 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 60.5% |
| 2.26 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 64.6% |
| 2.69 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 68.4% |
| 3.19 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 72% |
| 3.8 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 75.4% |
| 4.51 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 78.4% |
| 5.36 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 81.2% |
| 6.37 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 83.7% |
| 7.58 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 85.9% |
| 9 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 87.9% |
| 10.7 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 89.6% |
| 12.7 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 91.1% |
| 15.1 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 92.4% |
| 18 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 93.5% |
| 21.4 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 94.5% |
| 25.4 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 95.3% |
| 30.2 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 96.1% |
| 35.8 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 96.7% |
| 42.6 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 97.2% |
| 50.6 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 97.6% |
| 60.2 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 98% |
| 71.5 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 98.3% |
| 85 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 98.6% |
| 101 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 98.8% |
| 120 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99% |
| 143 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.1% |
| 170 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.3% |
| 202 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.4% |
| 240 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.5% |
| 285 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.6% |
| 338 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.6% |
| 402 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.7% |
| 478 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.7% |
| 568 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.8% |
| 675 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.8% |
| 802 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.8% |
| 954 MB | hard disk (F ≈ 13 ms, B ≈ 100 MB/s) | 99.9% |
Worked examples, recomputed
Every number the mechanisms quote for this relationship is recomputed from it, so none of them disagrees with it.
- DRAM 80 ns × 50 GB/s = 4,000 bytes
- NVMe 80 µs × 7 GB/s = 560,000 bytes
- HDD 10 ms × 200 MB/s = 2,000,000 bytes
- object store 50 ms × 80 MB/s = 4,000,000 bytes
- 9 × 50 ms × 80 MB/s = 36 MB
- hard disk: 8 ms × 100 MB/s ÷ 200 B = 4,000 records per flush
- NVMe: 20 µs × 3 GB/s ÷ 200 B = 300 records per flush
- F = 5 ms, 0.05 ms per row, B = 1 → ≈ 198 rows/s
- F = 5 ms, 0.05 ms per row, B = 100 → ≈ 10,000 rows/s
- F = 5 ms, 0.05 ms per row, B = 10,000 → ≈ 19,800 rows/s
- dispatch F ≈ 10 ms at 1% overhead → tasks of at least 1 s
- NVMe 80 µs × 3 GB/s ≈ 250 KB floor
- disk 10 ms × 175 MB/s ≈ 2 MB floor
- $4 × 10⁻⁷ per GET ÷ $5 per TB → S* ≈ 80 KB
- 5 MB files at 50 ms + 100 MB/s → 50% overhead
- 570 KB files → ≈ 90% overhead
- 2 s tasks with a 30 s launch → about 6% useful
- batched into 200 s tasks → 13% overhead
- a billion rows one call each at 5 µs → 5,000 s
- batches of 10,000 → ≈ 50 s in total
- a 2 KB schema header in a 50 KB file → 4% of the bytes
- 50 ms × 80 MB/s = 4 MB
- 90% efficiency needs about 36 MB
- 0.013 s × 100 MB/s = 1.3 MB
Where it appears
Each mechanism states it in its own names. The general symbol each name stands for is shown with it.
- Physical Substrate & Performance Laws
Why do trade-offs exist at all?
- Physical Substrate & Performance Laws
Why do trade-offs exist at all?
- Data Movement
How do records cross between two systems that have independent rates, independent availability and independent lifetimes, and what are you willing to lose when the assumption underneath the crossing breaks?
F = · B (batch size) = · c (marginal cost per row) =
- Data Movement
How do records cross between two systems that have independent rates, independent availability and independent lifetimes, and what are you willing to lose when the assumption underneath the crossing breaks?
- Storage: Physical Organization
What should sit next to what, given that I must decide at write time and find out at read time?
latency = · bandwidth = · characteristic size =
- Persistence & Durability
When a system says "yes, your data is safe", what exactly has it promised, and what did it have to do to keep that promise?
T_flush = · bandwidth = · B (records per flush) =
- Execution Engine Runtime
Once a query plan is chosen, why does the machine still sit idle, and what does each mechanism of a query runtime pay to buy that idle time back?
F (boundary cost) = · N (tuples per call) =
- Execution Engine Runtime
Once a query plan is chosen, why does the machine still sit idle, and what does each mechanism of a query runtime pay to buy that idle time back?
- Cost Mechanics
What is metered, and what is the smallest increment you are charged for?
c_req = · 1 / c_byte = · S =
- Table & Storage Maintenance
Who pays for the gap between the order data arrives in and the order it is read in: the writer, every reader, or a background job, and what is the break-even?
F (per-file cost) = · b (stream rate) = · s (file size) =
- Orchestration & Workflow
How do you make unreliable, unobservable, irreversible side effects behave like a pure function of a time interval?
launch cost = · work =