docs/internals/adr/gaps/010-no-data-caching-or-query-affinity.md
Status: Open Discovered: 2026-02-19 Context: Cloud-native storage characteristics analysis (data caching, query affinity). Split from GAP-007, which now focuses on metadata caching only.
Beyond metadata caching (GAP-007), Quickwit lacks the higher-level caching infrastructure that production observability systems use to hide object storage latency and reduce repeated computation:
Query affinity (characteristic C6) exists partially — Quickwit uses rendezvous hashing on split_id to assign splits to searcher nodes, which promotes cache locality. However, without the caches themselves, affinity provides no benefit. And without exactly-once semantics (GAP-005), query-time deduplication may require scatter-gather across nodes, undermining the affinity pattern.
Quickwit's search path (quickwit-search) downloads split data from object storage on each query. There is a split cache for warming (report_splits()), but no columnar data cache, no predicate cache, and no query result cache.
At production scale, a single S3 download thread delivers ~90 MiB/s. Without caching and parallelization, query latency is dominated by object storage round-trips. For monitor workloads that re-evaluate the same query every 15 seconds, the lack of any result or predicate caching means the full cost is paid on every cycle.
(split_id, column_name, page_range). Combined with existing rendezvous hashing for affinity.All signals equally affected. Columnar data caching benefits metrics (Parquet) and logs/traces (Tantivy segments) alike. Predicate and query result caching is signal-agnostic.
quickwit-search, quickwit-storage, query planner