通常人们谈论时间序列数据库的时候指代的就是这一类存储。按照底层技术不一样能够划分为三类。mysql
另一类数据库其表结构是:git
[timestamp] [d1] [d2] .. [dn] [v1] [v2] .. [vn]github
其优化的查询方式不限于查询原始数据,而是能够组合查询条件而且作聚合计算,好比:算法
SELECT d2, sum(v1) / sum(v2) FROM metric WHERE d1 = “A” AND timestamp >= B AND timestamp < C GROUP BY d2
咱们但愿时间序列数据库不单单能够提供原始数据的查询,并且要支持对原始数据的聚合能力。这种聚合能够是在入库阶段完成的,所谓物化视图。也能够是在查询阶段完成,所谓实时聚合。根据实际状况,能够在这两种方式中进行取舍。sql
想要在在查询阶段作数据的聚合和转换,须要可以支持如下三点。数据库
要想尽量快的完成整个查询过程,须要在三个环节上都有绝招。传统上说,这三个步骤是三个不一样的技术领域。apache
前面提到的时间序列库(好比opentsdb)有很多从功能上来讲是没有问题。它们都支持过滤,也支持过滤以后的聚合计算。在数据量小的时候勉强是可用的。可是若是要实时从十亿条里取百万记录出来,再作聚合运算,对于这样的数据量可能就勉为其难了。知足海量数据实时聚合要求的数据库很少,比较常见的有这么几种:数据结构
摘自:http://www.infoq.com/cn/articles/database-timestamp-01数据结构和算法