A connected machine may produce vibration readings many times per second, temperature readings every few seconds, power measurements every minute, and state changes only when an event occurs.
All of these signals describe the same asset. They do not need to share the same sampling rate.
For developers, the challenge is to keep each stream faithful to its source while still making cross-sensor queries possible. This article presents a practical design and test framework for that problem, using Apache IoTDB as the time-series data foundation.
1. Model observations, not empty grid cells
Start with the observation that actually occurred:
device: motor-07
measurement: temperature
event_time: 2026-10-13T09:30:05Z
value: 62.4
The important fields are the device, the measurement, the event timestamp, and the value. Metadata such as units, sensor type, location, and quality flags may also be important to the application.
Do not begin by creating a universal timeline and treating every unoccupied cell as missing. If temperature is collected every five seconds, there is no missing temperature reading at each vibration timestamp between those observations. No reading was scheduled there.
This gives us the first rule:
Preserve the native observation timeline before creating a shared analytical timeline.
2. Write down the cadence of every signal
A simple inventory exposes the shape of the workload:
| Measurement | Expected cadence | Arrival pattern | Main use |
|---|---|---|---|
| vibration | high frequency | continuous, possibly buffered | inspect short events |
| temperature | every few seconds | mostly regular | monitor gradual change |
| power | every minute | regular or batch | compare operating periods |
| operating_state | event-driven | only on change | mark context |
These values are illustrative rather than a recommended configuration. The correct frequencies come from the sensors and the engineering use case.
For each measurement, record:
- the expected sampling cadence;
- whether arrival can be delayed or batched;
- the timestamp supplied by the source;
- how long native-resolution data must remain available;
- the queries that will use the signal.
This inventory prevents the fastest signal from defining the schema and retention policy for every other measurement.
3. Separate sampling time from arrival behavior
Multi-frequency data and out-of-order data are different problems, although they often appear together.
- Sampling frequency describes how often a source observes a value.
- Event time describes when the observation occurred.
- Arrival behavior describes when and in what order the platform received it.
A gateway may collect vibration and temperature locally, lose connectivity, and upload a batch later. The measurements still belong to their original event times. If the pipeline uses arrival order as the physical timeline, historical analysis can become misleading.
Keep any ingestion timestamp or pipeline timestamp separate from the event timestamp when the application needs both. One supports operational monitoring of the data path; the other represents the measured process.
4. Store native resolution before deriving common windows
It is tempting to resample every signal during ingestion. That can simplify one dashboard, but it also commits the whole system to one analytical choice.
A safer default is:
sensor observations
↓
native time-series storage
↓
query-specific alignment or aggregation
↓
dashboard / investigation / model input
This structure keeps the source observations available while allowing multiple derived views.
For example:
- A live dashboard might use one-minute aggregates.
- A vibration investigation might retain the original high-frequency samples.
- A weekly report might compare hourly summaries.
- A model pipeline might use a defined resampling interval and explicit missing-value policy.
The analytical interval is part of the query or downstream transformation, not a universal property of the asset.
5. Choose alignment semantics explicitly
When two signals are compared, define what it means for their timestamps to “match.” Several approaches are possible:
- aggregate observations into fixed windows;
- select the most recent observation before a boundary;
- use a nearest observation within an allowed tolerance;
- interpolate a value according to a documented method;
- keep the series separate and compare trends rather than individual points.
The right choice depends on the signal. Carrying a device state forward may be reasonable because the state remains active until it changes. Carrying a rapidly changing sensor value forward can be misleading. Interpolation may be useful for visualization but inappropriate when the application must distinguish measured values from estimates.
Every derived value should have clear semantics. If the application needs traceability, keep recorded observations distinguishable from aggregated or interpolated results.
6. Use Apache IoTDB as the time-series foundation
Apache IoTDB is an open-source, IoT-native time-series database for connected-device workloads. It supports multi-frequency and out-of-order ingestion, historical and real-time data management, timestamp alignment, aggregation, and time-series functions.
For a multi-frequency pipeline, these capabilities support a practical separation of concerns:
- Devices and gateways produce observations at their own cadences.
- Apache IoTDB stores the measurements with their device and time context.
- Queries or downstream applications create the alignment and aggregation needed for a specific task.
Apache IoTDB does not choose the engineering meaning of an aligned value. Developers still need to define windows, tolerances, interpolation rules, and quality handling according to the application.
Exact SQL syntax and available functions can vary by release and data model, so implementation examples should be checked against the documentation for the version being evaluated.
7. Build a small validation dataset
Before testing at scale, create a dataset whose correct result is easy to inspect.
Use three signals:
temperature: one observation every 5 seconds
power: one observation every 60 seconds
state: event-driven changes
Add a few realistic conditions:
- delay one temperature reading;
- upload one short batch after a simulated reconnect;
- omit a scheduled observation;
- include a state transition between two power readings;
- retain the expected output for each test query.
Then verify:
Native retrieval
Can each series be retrieved with its original event timestamps and values?
Windowed aggregation
Can temperature and power be summarized into a shared window without altering the stored source observations?
State context
Can the application determine which operating state applied during a selected time range?
Late data
Does a delayed reading appear in the time range where the event occurred?
Missing versus unscheduled
Can the application distinguish a missing scheduled temperature reading from the normal absence of temperature points between scheduled samples?
This small test catches semantic errors that a large throughput test can miss.
8. Review the design before production
Use this checklist before connecting a production source:
- [ ] Every measurement has a defined event timestamp.
- [ ] Expected sampling cadence is documented per signal.
- [ ] Unscheduled timestamps are not automatically classified as missing data.
- [ ] Arrival time is separated from event time where required.
- [ ] Native-resolution observations remain available for the required period.
- [ ] Aggregation windows match their operational questions.
- [ ] Interpolated and recorded values can be distinguished when necessary.
- [ ] Delayed and out-of-order data are included in validation tests.
- [ ] Version-specific Apache IoTDB behavior is checked before deployment.
Conclusion
Multi-frequency telemetry is a normal property of connected systems. A pipeline becomes easier to reason about when it preserves each sensor's native observations and creates shared timelines only for defined analytical purposes.
Apache IoTDB provides an open-source time-series foundation for ingesting, storing, and analyzing data that arrives at different frequencies and sometimes out of order. The most useful evaluation is one built from your actual signal cadences, event-time rules, and query patterns.
Explore the Apache IoTDB GitHub repository and start with a small multi-frequency dataset whose expected results you can verify.

Top comments (0)