Why capacity and latency collide
Feature capacity multiplies along several axes at once: entity count, feature width, freshness windows, and concurrently served model versions. The active population can shift faster than a small hot set can stabilize, particularly during launches or broad candidate retrieval.
Moving less-used features to a storage tier saves memory, but one late lookup can hold up an inference request. Measure the distribution of complete feature-vector assembly time, including cold entities and missing features; a store-wide average is not the model's serving budget.
DESIGN FOR THIS DATA PATH
Where Lavik fits
Store the online feature values your pipeline produces in Lavik. Keep feature definitions, event-time processing and training datasets in your existing pipeline; use Lavik for the key-based reads and updates on the serving path. Separating value capacity from DRAM makes wider records and more retained entities affordable.
Best for: Precomputed, reconstructable feature values with substantial payload per entity and a clear materialization pipeline.
Design decisions that determine the outcome
Make the serving contract versioned
Choose packed strings or hashes based on the operations your client actually uses. Include schema/model version and an as-of timestamp in the record. Define defaults for absent fields and a freshness cutoff independently of storage expiry.
Account for the entire lookup fan-out
Budget entity reads, feature decoding, joins, and inference separately. Benchmark bounded HMGET/MGET requests with the real feature width. Atomic writes to a record do not by themselves provide an event-time-consistent snapshot across all entities.
Test your connector, not just its command names
Map connector initialization, Lua calls, pipelines, field expiry, and serialization to the versioned command reference. The verified client examples are useful starting points; they do not certify Feast or another feature-store connector. Plan backfill throttling and reconciliation after lag.
Try this command pattern
Redis-compatible commandsStart Lavik 0.2.0 with the quick start, then use these example keys to try the basic operations. Each command links to its options and return values.
Show example commands
redis-cli HSET features:model7:user42 schema 7 as_of 2026-09-21T00:00:00Z visits_7d 12
redis-cli HMGET features:model7:user42 schema visits_7d missing_feature
redis-cli HGET features:model7:user42 as_of
redis-cli EXPIRE features:model7:user42 600What should decide the migration?
Write down the application budgets before replaying traffic. Validate these criteria in your own system; published benchmarks are a starting point.
Cold-entity inference
Replay production entity distributions plus a uniform-access stress case at full feature width.
Feature-assembly p99 fits its portion of the inference budget; missing/stale feature rates remain acceptable.
Backfill during serving
Read while refreshing or backfilling a second model version; retain application timestamps.
Read deadlines and freshness objectives hold together; the publisher cannot overwrite a newer version with an older event.
Connector correctness
Exercise actual connector calls, partial records, absent entities, reconnects, and deserialization failures.
Returned values and fallback decisions match the existing serving contract before routing inference traffic.
Start with one feature family, preserving its freshness contract and missing-value defaults. Measure the complete feature-fetch budget alongside the model request.
Translate business scale into capacity
Value payload ≈ entities × serialized feature bytes × simultaneously served versions
lower value-capacity cost
At a 20:1 DRAM/NVMe SSD price per GiB, the same value capacity costs 95% less in media. Plan the complete budget with your actual prices, index memory and replicas.
Calculate your capacity cost →