Data Model
Chronix uses a generic data model that can store all kinds of operational data.
The key element of the data model is called a record.
It stores an ordered chunk of time series data of an arbitrary type (n pairs of timestamp and value) in a binary large object (byte[])
.
There is also type information (e.g., metric, trace, or log) that defines the available type-specific functions, e.g., to filter a time series with logs by an Id, and the ways to store or access the data (serialization, compression, etc.).
A record also stores some technical fields, two timestamps for start and end of the time range in the chunk, and a set of user-defined attributes, for example to describe the origin of the operational data, e.g., host, process, sensor, etc.
Thus, so the data model is multi-dimensional.
record {
<!--payload-->
data:compressed{chunk of time series data}
<!--technical fields (storage dependent)-->
id: 3dce1de0-...-93fb2e806d19 //16 bytes
_version_: 1501692859622883300 //8 bytes
<!--logical fields-->
start: 1427457011238 <!--27.3.2015 11:51:00 8 bytes-->
end: 1427471159292 <!--27.3.2015 15:45:59 8 bytes-->
type: metric <!--Data types: metric, log, trace etc.-->
<!--optional dimensions-->
host: prodI5
process: scheduler
group: jmx
metric: heapMemory.Usage.Used
<!--optional attributes-->
description: Benchmark
version: v1.0-RC
}
The Listing above is a record for a metric (type) time series, with dimensions for the host name, process, group (a logical group of metrics), and metric. Its optional attributes are a description and a version. With the optional attributes you can tailor the data model to your needs.
Minimal required fields
You can extend the data model with arbitrary user-defined fields. You have to take the minimal required fields into account. Chronix API defines the minimal required fields.
Field Name | Value Type |
---|---|
start | Long |
end | Long |
metric | String |
type | String |
data | Byte[] |
Chronix TimeSeries
Chronix TimeSeries is a library to work with time related data. It implements the Chronix API. Thus i can be plugged into Chronix. Chronix TimeSeries is divided into different time series classes and its belonging converters. The time series classes have no dependencies (only the converter) to other Chronix related libraries.