pj_datastore/docs/REQUIREMENTS.md
Columnar time-series storage engine for PlotJuggler. Decouples data storage from UI, plugin formats, and transport protocols. Provides a single, type-safe data layer that all plugins write to and all consumers read from.
ensureField() is an optional optimization for the minority of sources with a fixed, fully-known schema. It enables the faster bound-write path (appendBoundRecord) and avoids mid-stream chunk sealing.The column set of a topic evolves during ingestion. This is the common case, not the exception — most real-world data sources produce a column count that is unknown at startup and changes as messages arrive:
repeated float data field is flattened to columns data[0], data[1], etc. The column count changes with every message that has a different sequence length. Nested messages containing sequences multiply the effect. Even a single ROS sensor_msgs/PointCloud2 can produce hundreds of dynamically-sized columns.Requirements:
ensureField() is an optimization for the fixed-schema case, not a prerequisite for writing data.