4.7 KiB
Roadmap and Research
Issue states change. Re-read each tracker before planning work and preserve human ownership of issue and checklist state.
Guiding Roadmap
- piker #270: typed, stream-composable FSP graph and DSL direction.
- piker #107: cross-actor shared memory tick/ring-buffer direction.
- piker #216: exposing FSP output through feed-like interfaces.
- piker #325: faster streaming y-range computation and overlap with FSP reductions.
- piker #536: Arrow/Parquet data ingest and columnar boundaries.
- piker #98: older realtime feed architecture discussion. Treat it as likely superseded; compare every idea against current
Flume, feed-bus, history, and sampler code. - Tractor #339: shared-memory array and localhost IPC evolution.
- hotbaud issues: experimental high-throughput local transport and ring-buffer work.
Near-Term Protocol Research
Prototype an explicit source revision envelope and measure it with two FSPs and two overlaid feeds. The prototype should prove source-specific wakeups, coalescing of consecutive prepends, stale-result rejection, and targeted UI range updates. Keep the protocol independent of the final IPC transport.
Characterize historical repair strategies:
- Full replay from the new first bound.
- Prefix-only calculation for pointwise operators.
- Replay from an operator checkpoint for stateful recurrences.
- Bounded overlap repair for finite-window operators.
An FSP declaration eventually needs repair metadata describing locality, state checkpointability, warm-up/overlap, and whether old inputs can alter all later outputs.
Candidate Libraries
Candidates are experiments, not dependency recommendations.
Bounded Near-Term Prototypes
- Bottleneck: compare rolling min/max, rank, and moving-window kernels against NumPy/Numba for chart y-ranges and finite-window FSPs.
- River: study stateful online estimator APIs, drift detectors, and reference semantics. Do not assume its object model belongs in the hottest tick path.
- nanoarrow: evaluate lightweight Arrow C data interfaces at native/process boundaries already motivated by
pyarrowand piker #536. - DuckDB: use for historical Parquet query, replay slicing, and validation, outside realtime tick execution.
Watchlist
- hotbaud: track API and correctness maturity for localhost SHM/ring transport.
- iceoryx2: study zero-copy pub/sub ownership and lifecycle, but avoid competing with Tractor without a narrow adapter benchmark.
- DataFusion Python: Arrow-native historical query and expression execution if existing Polars paths cannot meet a demonstrated need.
- Feldera: study DBSP/incremental-view semantics for revision-aware graphs; its service/SQL runtime is not a direct piker integration target.
- Bytewax and Arroyo: study dataflow semantics, watermarking, and recovery, not as replacements for the actor tree.
GPU stacks such as JAX and CuPy are poor defaults for low-batch per-tick work because transfer, compilation, and scheduling can dominate. Reconsider only for measured large-batch research or many-market matrix workloads.
Benchmark Design
Report separate distributions for:
- provider decode and normalization;
- source SHM write and bound publication;
- historical kernel and realtime recurrence;
- actor notification and stream fan-out;
- destination publication;
- visible-range formatting and Qt paint.
Use p50, p95, p99, maximum, allocation rate, and resident-memory growth. Test steady state, burst load, backfill overlap, cancellation, and slow consumers. Throughput without event-time correctness and bounded teardown is not a win.
Medium-Term Sequence
First establish revisioned range messages and operator repair semantics. Then decouple FSP orchestration from chart ownership and expose destination flows through feed-like subscriptions. Next benchmark localhost transport adapters behind the same protocol. Only after those contracts stabilize should graph placement, fusion, worker scaling, and remote partitioning be automated.