Time series feature design
I mentioned before that there is actually quite a lot that goes into a major feature, usually a lot more than would seem on the surface. I thought that this could serve as a pretty good example of a series of blog posts that we can use to show how we are actually sitting down and doing high level design of features in RavenDB.
I’ve actually already spoken, and we have seen an implementation of the backend, about time series data. But that was just the basic storage, and that was mostly to explore how to deal with Voron for more scenarios, to be honest.
Now, allow me to expand that into a full pledged feature design.
What we want: the ability to store time series data and work with it.
Time series data is a value (double) that is recorded at a specific time for a specific series. A good explanation on that can be found here: https://tempo-db.com/docs/modeling-time-series-data/
We have a bunch of sensors that report data, and we want to store it, and get it back, and get rollups of the information, and probably do more, but that is enough for now.
At first glance, we need to support the following operations:
- Add data (time, value) to a series.
- Add bulk data to a set of series.
- Read data (time,value) from a series or a set of them in a given range.
- Read rollup (avg, mean, max, min) per period (minutes, hour, day, month) in a given range for a set of series.
In the next few posts, I’ll discuss storage, network, client api, user interface and distribution design for this. I would truly love to hear from you about any ideas you have.