Summit 2026
11:20 AM PT · 20 min
Real-time features without streaming using RonDB

Online feature store model · today: shift left
A feature vector is a batch of key lookups
The pipeline computes every aggregate before anyone asks for it.
A feature group is a RonDB table, keyed by entity key.
A feature view combines feature groups, joined on the entity key.
RDRS reads the Hopsworks metadata, then does a batched key lookup in the feature group tables.
RonDB benchmark · Graviton 4
Throughput optimized · batch size 150
key lookups per second
Latency optimized · batch size 100 keys
key lookups per second
What if the aggregate ran when the request arrives?
No streaming pipeline. The latest events count.
Online feature store model · shift left vs shift right
Shift left
- Precompute all aggregates
- Reduce latency of online operations
- Requires a streaming pipeline
- Requires continuous recompute of aggregates
Shift right
- Compute aggregates as online aggregate queries
- No need for streaming pipelines (reduced complexity)
- Fresh aggregate results: take into account the latest events
- React faster to a changing environment
Shift Right
• Removes the complexity of streaming pipelines
• Better Feature Freshness
Now let's look at how we achieve that.
Requirements · from shift right
The Online Feature Store now has to handle:
Generic feature queries, not just simple key lookups.
Example · four windowed features on one customer
Each tick is a row: new rows arrive at the right, at now, and move left as they age. Four features, four windows, four row limits.
Shift left: 4 different precomputed features, no feature freshness.
Shift right: keep the last 500 rows, at most 12 hours. 4 features, 4 SQL queries, always fresh.
TTL and ring buffer · in RonDB
Insert on arrival. RonDB does every delete.
Ring buffer: a limit on how many rows per entity key are stored. Overflow rows are overwritten.
TTL: a limit on how long rows stay visible. Old rows are purged; a minimum number of rows can be retained.
- TTL only stores too many rows for active entities: every event within the TTL is kept, far more rows than the statistics need.
- Ring Buffer only keeps too many rows for non-active entities: their last rows stay, long after they stopped being relevant.
The combination minimises the storage volume needed to get the proper statistics.
TTL and ring buffer · in RonDB
Together: rows older than 6 hours are purged, new rows fill the free slots, and once the ring is full the oldest row is overwritten.
RonSQL: the query goes to the data
Low-latency SQL for feature stores. Not a generic SQL engine.
RonSQL · pushdown
Supports joins, CTEs, aggregation. No cost optimizer: the feature store knows its data model.
Any query RonSQL accepts is pushed down to the RonDB data nodes.
The data nodes parallelize it automatically.
MySQL handles the rest, without a guarantee of pushdown.
RonSQL examples · 1 / 3
Two windowed features, one request
The last 10 transactions, and the last hour limited to 50. The two CTEs do not depend on each other, so RonDB computes them in parallel on the data nodes, each as an ordered scan of the primary key that stops at its limit. Two more CTEs aggregate them, and the main query joins their single rows.
RonSQL examples · 2 / 3
Snowflake schema: card to account to customer
Start from one card, walk two joins out to the account and the customer, return the features of each.
RonSQL examples · 3 / 3
Complex features: AVRO() decodes them
Arrays and structs are stored Avro-encoded. AVRO() decodes them with the feature store schema that the REST API server holds, so the query goes through RDRS.
Shift Right
• Removes the complexity of streaming pipelines
• Better Feature Freshness
The combination of RonSQL, TTL and Ring Buffer is what removes the complexity of streaming pipelines.
RonDB 26.10 · and the rest of the release
Scale
- Up to 8191 API nodes
- Up to 144 RonDB data nodes
- RDMA as communication media
- 2-level hashing for faster scans
- Many small scaling improvements
Operations
- Synchronized node restart
- Rate limits per project and per user
- Quotas per project
- Deadlock detection algorithm
- Memory booking subsystem
- cgroup v1 in automatic thread configuration
- Improved security functions
Interfaces
- Vector scan searches, exact distance functions
- Writes through the REST API
- New RonDB client
- Extended Redis support in Rondis
- JIT compiler for the RonDB interpreter
RonDB · in production