Akumuli时间序列数据库——列存储,LSM,MVCC

时间:2024-01-13 13:11:20

Features

  • Column-oriented time-series database.
  • Log-structured append-only B+tree with multiversion concurrency control.
  • Crash safety.
  • Fast aggregation without pre-configured rollups or materialized views.
  • Custom compression algorithm (dictionary + entropy) with small memory overhead (about 2.5 bytes per element on appropriate data).
  • Compressed in-memory storage for recent data.
  • Can be used as a server application or an embedded library.
  • Simple query language based on JSON over HTTP.
  • Query results returned using chunked transfer encoding at rate about 50MB/second (about 1M data points/second) per core.
  • Data ingestion through TCP or UDP (over 1M data points/second).

Akumuli

- - -
主页 https://github.com/Akumuli/akumuli  
编写语言 C++  
License Apache License, Version 2.0  
项目创建时间 2014/12  
最新版 pre-release 2015/10/18
活跃度 活跃  
文档 简单  

Akumuli名称来自accumulate,是一个数值型时间序列数据库,可以存储、处理时序列数据。

它的特点如下:

  • 基于日志结构的存储
  • 支持无序数据
  • 实时压缩
  • 基于HTTP的JSON查询支持
  • 支持面向行和面向列的存储
  • 将最新数据放入内存存储
  • 通过metric和tag组织时序列数据,并且可以通过tag进行join操作。
  • Resampling (PAA transform),滑动窗口
  • 通过基于TCP或UDP的协议接收数据(支持百万数据点每秒)
  • Continuous queries (streaming)

Akumuli由两部分组成:存储引擎和服务程序。目前只有存储引擎被实现了,而且存储引擎可以在没有服务程序的情况下作为嵌入式数据库单独使用(类似sqlite),也就是说,你得通过自己编写程序使用它的API来实现数据读写。

Akumuli的数据协议基于Redis,它的数据格式也和前面看到的不太一样,比如:

 
+balancers.memusage host=machine1 unit=Gb
+20141210T074343.999999999
:31

每条数据由三部分组成,第一部分称为ID,可以是数值型(以“:”开始),或者是字符串(以“+”开始),比如这个例子中,cpu host=machine1 region= europe就是ID,它由两部分组成,cpu是metric,hostregion则被称为key。

数据的第二部分可以是时间戳(:1418224205),这里的格式为ISO 8601(+20141210T074343.999999)

第三部分为值部分。

类似上面的数据结构,它的query也比较容易理解:

 
{
"where": {
"region": [ "europe", "us-east" ]
},
"metric": "cpu",
"range": {
"from": "20160102T123000.000000",
"to": "20160102T123010.000000" }
}

Akumuli目前还处于开发状态,不适合在生产环境下使用。