Docs / Configuration Build
Storage
Fact-engine, SQLite, partitioned and distributed layouts, and how to choose.
| Layout | When | Notes |
|---|---|---|
| Fact engine (RFC 0016) | default for new workspaces | tantivy + mmap, sealed segments, provenance sidecar |
| SQLite (v1/v2) | pre-existing workspaces | keeps working unchanged; v2 is zstd-compact; migrate with ekos ledger migrate (--v3 for the fact engine) |
| Partitioned (RFC 0111) | very large single-machine ledgers | one partition per dimension value and time bucket |
| Distributed (RFC 0113) | multiple machines | coordinator, compile workers, query workers, gateway |
An existing SQLite workspace is never switched automatically.
Containers
[storage]
active-container = "main"
[[storage.containers]]
name = "main"
path = "/data/ekos/main"
With no [storage] section, the index is <cwd>/.ekos.
Partitioning
[storage.partition]
dimension = "source" # unset = no partitioning
time-bucket = "monthly" # default
segment-backend-url = "s3://bucket/prefix" # optional object store; needs the `distributed` build feature
Distributed reads
[storage.distributed]
coordinator = "10.0.0.5:7400"
query-workers = ["10.0.0.6:7401", "10.0.0.7:7401"]
Search fans out to shards, merges per-shard IDF, and fuses with reciprocal-rank fusion. Object-store reads require building with --features distributed. See Operations → Storage.