Comparison: Cloudflare R2 | Tigris Object Storage Documentation
Summary
For small object workloads (1 KB objects), Tigris achieves approximately 20x the throughput of Cloudflare R2 for both read and write operations. R2 exhibits extremely high latency for small objects, making Tigris the clear winner for this use case.
Load Phase Results
Loading 10 million 1 KB objects into each system.
| Metric | Tigris | Cloudflare R2 |
|---|---|---|
| P50 Latency | 16.799ms | 197.119ms (11.73x Tigris) |
| P90 Latency | 35.871ms | 340.223ms (9.48x Tigris) |
| Runtime | 6710.7sec | 72063sec (10.74x Tigris) |
| Throughput | 1490.2ops/sec | 138.8ops/sec (0.09x Tigris) |
R2's p90 PUT latency tops 340ms whereas Tigris stays below 36ms. This extreme latency difference means Tigris finishes the load in 6711 seconds while R2 requires 72063 seconds (over 20 hours).
Total load time for loading 10M 1 KB objects
Mixed Workload Results
1 million operations with 80% reads and 20% writes.
Read Performance
| Metric | Tigris | Cloudflare R2 |
|---|---|---|
| P50 Latency | 5.399ms | 605.695ms (112.19x Tigris) |
| P90 Latency | 7.867ms | 680.959ms (86.56x Tigris) |
| Runtime | 241.7sec | 4705.3sec (19.47x Tigris) |
| Throughput | 3309.8ops/sec | 42.6ops/sec (0.01x Tigris) |
Tigris sustains ≈3.3k ops/s, approximately 78x R2 (≈43 ops/s) for read operations.
Read throughput during mixed workload
Read p90 latency during mixed workload
Write Performance
| Metric | Tigris | Cloudflare R2 |
|---|---|---|
| P50 Latency | 12.855ms | 605.695ms (47.12x Tigris) |
| P90 Latency | 16.543ms | 680.959ms (41.16x Tigris) |
| Runtime | 241.6sec | 4705.3sec (19.48x Tigris) |
| Throughput | 828.1ops/sec | 42.6ops/sec (0.05x Tigris) |
Tigris delivers ≈828 ops/s, approximately 20x R2 (≈43 ops/s) for write operations.
Write throughput during mixed workload
Write p90 latency during mixed workload
Key Takeaways
- 20x faster throughput for both reads and writes
- Sub-10ms read latency vs R2's 680ms p90
- Sub-20ms write latency vs R2's 680ms p90
- 10x faster bulk loads for large datasets
- R2 is not optimized for small object workloads