Storage Overview
Surgewave provides multiple storage backends optimized for different workloads.
Available Backends
| Backend | Persistence | Latency | Use Case |
|---|---|---|---|
| Memory | No | Lowest | Testing, caching |
| FileSystem | Yes | Low | General purpose |
| ZeroCopyWal | Yes | Very Low | High performance |
| Apache Arrow | Yes | Medium | Analytics, columnar |
| Parquet | Yes | Medium | Columnar storage, analytics export |
| RocksDb | Yes | Low | LSM-tree, high write throughput |
| Lmdb | Yes | Low | Memory-mapped B+ tree |
| DuckDb | Yes | Medium | Embedded OLAP analytics |
| Sqlite | Yes | Low | Lightweight embedded storage |
| NvmeDirect | Yes | Lowest | Direct NVMe I/O, ultra-low latency |
| S3 | Yes | High | Cloud object storage |
| Tiered | Yes | Variable | Cost optimization (S3/Azure/GCP) |
| Ephemeral | No (ring-buffer) | Lowest | Real-time distribution |
Selection Guide
flowchart TB
Q1{Need persistence?}
Q1 -->|No| Q2{Real-time pub/sub?}
Q2 -->|Yes| Eph["Ephemeral (ring-buffer)"]
Q2 -->|No, general testing| Mem[Memory]
Q1 -->|Yes| Q3{Primary workload?}
Q3 -->|Streaming| FS["FileSystem or ZeroCopyWal"]
Q3 -->|Analytics| Arrow[Apache Arrow]
Q3 -->|Mixed| ZCW[ZeroCopyWal]
Q3 --> Q4{Need long-term storage?}
Q4 -->|Yes| Tier["Tiered (S3/Azure/GCP) + local backend"]
Configuration
Set storage backend in appsettings.json:
{
"Surgewave": {
"StorageMode": "File"
}
}
Valid values:
Memory- In-memory storageFile- Traditional file-basedZeroCopyWal- Zero-copy WAL with mmapZeroCopyMemory- Zero-copy in-memory with poolingArrow- Apache Arrow columnar storageParquet- Parquet columnar storageRocksDb- RocksDB LSM-tree storageLmdb- LMDB memory-mapped B+ treeDuckDb- DuckDB embedded analyticsSqlite- SQLite embedded storageNvmeDirect- Direct NVMe I/OS3- Amazon S3 object storage
Performance Comparison
| Message Size | File | ZeroCopyWal | Memory |
|---|---|---|---|
| 100 bytes | 286K msg/s | 549K msg/s | 625K msg/s |
| 1 KB | 221K msg/s | 235K msg/s | 450K msg/s |
| 10 KB | 120K msg/s | 145K msg/s | 280K msg/s |
Storage Architecture
flowchart TB
Broker[Surgewave Broker]
Abs["ISurgewaveStorageEngine (abstraction)"]
subgraph Engines["Storage engines"]
E1[Memory]
E2[FileSystem]
E3[Arrow]
E4[Parquet]
E5[RocksDb]
E6[Lmdb]
E7[DuckDb]
E8[Sqlite]
E9[NvmeDirect]
E10[S3]
E11["Tiered (S3/Azure/GCP)"]
end
Buf["ISurgewaveBuffer (zero-copy interface)"]
Mgmt["Segment Management · Index Structures · Compaction"]
Broker --> Abs --> Engines --> Buf --> Mgmt
Common Settings
| Setting | Default | Description |
|---|---|---|
LogSegmentBytes |
1 GB | Max segment size |
LogRetentionHours |
168 (7 days) | Data retention |
LogRetentionBytes |
-1 (unlimited) | Max bytes per topic |
Next Steps
- Memory Storage - In-memory configuration
- FileSystem Storage - Persistent storage
- Apache Arrow - Columnar storage for analytics
- Tiered Storage - Cloud object storage integration