Throughput
A singlem5n.xlarge node delivers either high write throughput or a large
follower fan-out, depending on how you load it:
| Scenario | Result |
|---|---|
| Pure ingest (no concurrent reads) | ~100 MB/s |
| Read-serving (ingest pushed to drive reads) | 20 MB/s ingest + 50,000 concurrent followers |
Poll latency
Flat across key cardinality
At a fixed 20 MB/s ingest, increasing the key count from 100K to 1M does not degrade p50 poll latency for reading a single key’s log:| Key cardinality | p50 poll latency |
|---|---|
| 100K | 38.9 ms |
| 250K | 39.0 ms |
| 500K | 39.8 ms |
| 1M | 39.7 ms |
Scales with ingest rate
Poll latency is sensitive to ingest rate. Below the cache-residency point (~5 MB/s) the live tail stays cache-resident and latency is low and flat. Above it, ingest evicts hot data before compaction collocates keys, and the tail climbs:| Ingest rate | p50 | p99 |
|---|---|---|
| 1.25 MB/s | 3 ms | 14 ms |
| 5 MB/s (cache-residency point) | 4 ms | 22 ms |
| 10 MB/s | 12 ms | 140 ms |
| 20 MB/s | 28 ms | 900 ms |
| 25 MB/s | 36 ms | 2,200 ms |
Range vs. random sharding
Scoping a reader to a contiguous key range improves cache locality and thus improves poll latencies. At a fixed 25 MB/s ingest over 1M keys, the difference between different sharding schemes is shown below:| Reader sharding | GETs / op | p50 latency |
|---|---|---|
| Range-scoped | 0.07–0.15 | 2.7–3.5 ms |
| Random | ~0.15 | 3.5–6.4 ms |
Cost
The cost breakdown of one fully-loaded node serving 20 MB/s ingest, 50,000 concurrent followers, and 1M keys, with 1 day of retention works out to:| Line item | Driver | Est. / mo |
|---|---|---|
| Compute | 1× m5n.xlarge, on-demand | $174 |
| S3 writes | flush every ~2–3 s ≈ 1.0M PUT | ~$10 |
| S3 storage | 1.73 TB/day × 1 day | ~$40 |
| Total | compute + S3 | ~$224 / mo |
PUT requests.
Learn more
- Storage internals: Log storage design and the storage RFC
- For the funneling use case, see OpenData Buffer benchmarks