0.9.8 - Ceres: A DB library to replace whisper
Whisper has served me well over the years but it's very simple design (~500 lines of code) has led to some limitations that are in dire need of being overcome. This past summer I wrote a new database library called Ceres that is more flexible and efficient than whisper. Here are some of the issues Ceres resolves:
- Whisper requires a contiguous block of time to be stored in a single fixed-size file. If you wanted to store a single datapoint for 1-year ago, you'd have to allocate an entire year of space in one file. Ceres does not use space for time periods which contain no datapoints (except for very short gaps).
- Whisper stores timestamps for each datapoint, Ceres only stores values and calculates timestamps, using 33% less disk space for the same data.
- With whisper, it is not feasible from a performance standpoint for Graphite to allow datapoints for a single metric to be spread across multiple servers. With Ceres, you will be able to store the datapoints across multiple servers (making it much easier to balance load and to move metrics around). Graphite will be able to retrieve the datapoints from each server efficiently.
- With Whisper, once you've got a metric it is going to sit in your namespace until you delete it. This is annoying when you have metrics that are no longer applicable but should be kept for historical purposes (ie. server name changes). With Ceres, the act of browsing the metric hierarchy will involve a time parameter, you'll be able to browse data that is only active recently, or only data that was active in a certain time range, etc.
This functionality has already been implemented at a prototype level on a private branch. I need to merge in some recent changes from trunk and do some more testing, once that is done I will publish the branch and work on merging it into trunk for 0.9.8. This work is expected to begin in February.
0.9.9 - Interactive Graphs, client-side rendering
Lucio Torre has already implemented a branch using flot (https://code.launchpad.net/~lucio.torre/graphite/add-flot/+merge/39768) and I will investigate that as a possible implementation. After Ceres, the next major change to Graphite will be the addition of a reusable client-side graphing widget.
1.0 - A more mature API
The final major change I want to make to Graphite before christening it "1.0" is to clean up the APIs. Currently the URL API consists of a hodge-podge of functions and options lacking an overall sense of consistency.