因为工做上的关系,最近看了一些关于时序列数据库的东西,固然,我所看的也都是以开源方案为主。数据库
趁着这股热劲还没退,但愿能整理一些资料出来。若是正好你也有这方面的需求,那么但愿这一系列的介绍可以帮助到你。缓存
一听到时序列数据库,若是只是稍有耳闻的人,可能马上会联想到运维和监控系统。服务器
没错,确实是不少运维、监控系统都采用了TSDB做为数据库系统来存储海量的、严格按时间递增的、在必定程度来讲结构很是简单的各类指标(英文可能为metric、measurement或者相似的其余单词)数据。数据结构
这是维基百科上的解释:运维
A time series database (TSDB) is a software system that is optimized for handling time series data, arrays of numbers indexed by time (a datetime or a datetime range).分布式
翻译过来就是“时序列数据库用来存储时序列(time-series)数据并以时间(点或区间)创建索引的软件。”函数
其中,时序列数据能够定义以下:性能
通常时序列数据都具有以下两个特色:大数据
所谓的结构简单,能够理解为某一度量指标在某一时间点只会有一个值,没有复杂的结构(嵌套、层次等)和关系(关联、主外键等)。优化
数据量大则是另外一个重要特色,这是因为时序列数据由所监控的大量数据源来产生、收集和发送,好比主机、IoT设备、终端或App等。
TSDB做为一种专为时序列数据优化而设计的数据库,在不少方面都和传统的RDBMS和NoSQL数据库不太同样,好比它不关心范式和事务。
其余方面TSDB的特色主要有如下几点,这里简单罗列了一下。
TSDB在数据写入方面,具备以下特色:
95%-99%的操做都是写操做
因为是时间序列数据,所以数据多为追加式写入,并且几乎都是实时写入,不多会写入几天前的数据。
数据写入以后,不会更新
基本没有随机删除,多数是从一个时间点开始到某一时间点结束的整段数据删除。好比删除上个月,或者7天前的数据。不多出现删除单独某个指标的数据,或者跳跃时间段的数据。
区块删除很容易进行优化,好比能够按区块来分开存储到不一样的文件,这样删除一个区块只须要删除一个文件就能够了,成本会比较低。
相对于写入操做,TSDB的读取操做特色以下:
基本都是按照时间顺序读取一段时间内的数据。
基本数据大,超过内存大小,要选取的只是其一小部分,且没有规律,缓存几乎不起任何做用。
TSDB应该天生就要考虑到分布式和分区等特性,将存储和查询分发到不一样的服务器,以支撑大规模的数据采集和查询请求。
TSDB的数据是用来分析的,因此TSDB还会提供作数据分析所必须的各类运算、变换函数。好比能够方便的对时序列数据进行求和、求平均值等操做,就像传统的RDBMS同样。
虽然每一个人的场景不太同样,不过我以为如下的大部分因素,都值得你们好好考量一下。除了功能上能知足、性能上撑得住,运(售)维(后)等也是咱们准备长期使用所必须面临的问题。
我本身总结的评价因素主要有以下几点:
主要就是读和写的性能,在前面TSDB的特色中咱们已经讲过了。
经过前面的说明,咱们也知道TSDB 99.9%都是读少写多,所以写入性能必须能跟得上、无延时,而且不能阻塞读操做,且读操做能快速返回最新的数据。
还有一点必须注意的是,如今不少用户的数据都跑在云主机上,那么IOPS则是一个你必需要注意的因素,超了Plan限制的话很难找出问题缘由。
存储方案主要会影响到读写性能、集群扩展容易程度、以及运维的复杂度。典型的存储方案有HDFS、HBase、Cassandra、LevelDB等。
通常来讲,集群主要集中为存储和查询的集群功能,也表明其可扩展性,由于时序列数据库的数据量极可能很大,而且增加趋势不可预测,尤为是随着大数据和物联网的兴起,GB已经算入门,TB也是刚起步。
若是你须要定制,或者只是使用TSDB作存储,本身写入数据并经过查询接口进行数据展现,那么API的完善程度将是一个很重要的评判因素。
还好大部分TSDB都提供了HTTP API,除了简单的文本格式,有不少还支持JSON格式的输入、输出。
Client Library也是一个加分项,有一个好用的、你熟悉的语言的SDK包的话应该会更方便你作开发。
若是能经过相似传统SQL的select mean(value) from metric where role='user' and time >= xxx and time <= yyy group by dc
来查询metric的话,是否是刚接触到TSDB的人更容易上手和理解呢?
可能这看起来比较酷,不过对我来讲这只能算是个加分项而已。由于咱们只会经过API来读写数据,并且查询模式很是固定、数量很少。
可是不少常常出报表的人,可能更喜欢这一特色了,由于老板、运营可能会按期或者随时找他们出统计数据。
咱们先来看一下DB-Engines中关于时序列数据库的排名
这是当前(2016年2月的)排名状况:
摘自:http://liubin.org/blog/2016/02/18/tsdb-intro/