虽说有如许那样的问题,然则OpenTSDB照样针对存储模型做了两个方面的优化:
- 优化一:timestamp并不是想象中细粒度到秒级或毫秒级,而是精确到小时级别,然后将小时中每一秒设置到列上。 如许一行就会有3600列,每一列表示一小时的一秒。如许设置据说可以有效的掏出一小时整的数据。
- 优化二:所有metrics以及所有标签信息(tags)都应用了全局编码将标签值编码成更短的bit,削减rowkey的存储数据量。 上文分析HBase这种存储方法的弊病是说道会存在大年夜量的数据源(tags)冗余以及指标(metric)冗余,有冗余是吧,那我就搞个编码,将string编码成bit,尽最大年夜尽力削减冗余。虽嗣魅如许的全局编码可以有效降低数据的存储量,然则因为全局编码字典须要存储在内存中,是以在很多时刻(海量标签值),字典所需内存都邑异常之大年夜。
上述两个优化可以参考OpenTSDB这张经典的示意图:
Druid时序数据存储模型设计
和HBase和Kudu这类KV数据库不合,Druid是另一种弄法。Druid是一个不折不扣的列式存储体系,没有HBase的主键。上述时序数据在Druid中表示是下面这个样子的:
Druid是一个列式数据库,所以每一列都邑自力存储,比如Timestamp列会存储在一路形成一个文件,publish列会存储在一路形成一个文件,以词攀类推。细心的童鞋就会说了,如许存储,依然会稀有据源(tags)大年夜量冗余的问题。针对冗余这个问题,Druid和HBase的处理方法一样,都是采取编码字典对标签值进行编码,将string类型的标签值编码成int值。但和HBase不一样的是,Druid编码是局部编码,Druid和HBase都采取LSM构造,数据先写入内存再flush到数据文件,Druid编码是文件级其余,局部编码可以有效减小对内存的巨大年夜压力。除此之外,Druid的┞封种列式存储模式还有如下好处:
数据存储紧缩率高。每列自力存储,可以针对每列进行紧缩,并且可认为每列设置对应的紧缩策略,比如时光列、int、fload、double、string都可以分别进行紧缩,紧缩效不雅更好。
支撑多维查找。Druid为datasource的每个列分别设置了Bitmap索引,应用Bitmap索引可以有效实现多维查找,比如用户想查找20110101T00:00:00这个时光点所有宣布在USA的所有告白的浏览量,可以根据country=USA在Bitmap索引中找到要找的行号,再根据行号定位待查的metrics。
然而,如许的存储模型也有一些问题:
- 数据依然存在冗余。 和OpenTSDB一样,tags存在大年夜量的冗余。
- 指定命据源典范围查找并没有OpenTSDB高效。 这是因为Druid会将数据源拆开成多个标签,每个标签都走Bitmap索引,再最后应用与操作找到知足前提的行号,这个过程须要必定的开销。而OpenTSDB中直接可以根据数据源拼成rowkey,查找走B+树索引,效力必定会更高。
内存中实际上就是一个Map:>,Map一一个SeriesKey对应一个List,List中存储时光线数据。数据进来之后根据datasource(tags)+metric拼成SeriesKey,再将Timestamp|Value组合值写入时光线数据List中。内存中的数据flush的文件后,同样会将同一个SeriesKey中的时光线数据写入同一个Block块内,即一个Block块内的数据都属于同一个数据源下的一个metric。
InfluxDB时序数据存储模型设计
比拟OpenTSDB以及Druid,可能很多童鞋对InfluxDB并不特别熟悉,然而在时序数据库排行榜单上InfluxDB倒是遥遥领先。InfluxDB是一款专业的时序数据库,只存储时序数据,是以在数据模型的存储上可以针对时序数据做异常多的优化工作。
为了包管写入的高效,InfluxDB也采取LSM构造,数据先写入内存,当内存容量达到必定阈值之后flush到文件。InfluxDB在时序数据模型设计方面提出了一个异常重要的概念:seriesKey,seriesKey实际上就是datasource(tags)+metric,时序数据写入内存之后按照seriesKey进行组织:
这种设计我们认为是将时光序列数据按照时光线挑了出来。先来看看如许设计的好处:
- 好处一:同一数据源的tags不再冗孑遗储。一个Block内的数据都共用一个SeriesKey,只须要将这个SeriesKey写入这个Block的Trailer部分就可以。 大年夜大年夜降低了时序数据的存储量。
- 好处二:时光序列和value可以在同一个Block内分开自力存储,自力存储就可以对时光列以及数值列分别进行紧缩。InfluxDB对时光列的存储借鉴了Beringei的紧缩方法,应用delta-delta紧缩方法极大年夜的进步了紧缩效力。而对Value的紧缩可以针对不合的数据类型采取雷同的紧缩效力。
- 好处三:对于给定命据源以及时光范围的数据查找,可以异常高效的进行查找。这一点和OpenTSDB一样。
细心的同窗可能会问了,将datasource(tags)和metric拼成SeriesKey,不是也不克不及实现多维查找。确切是如许,不过InfluxDB内部实现了倒排索引机制,即实现了tag到SeriesKey的映射关系,如不雅用户想根据某个tag查找的话,起首根据tag在倒排索引中找到对应的SeriesKey,再根据SeriesKey定位具体的时光线数据。 InfluxDB的┞封种存储引擎称为TSM,全称为Timestamp-Structure Merge Tree,基来源基本理类似于LSM。后期笔者将会对InfluxDB的数据写入、文件格局、倒排索引以及数据攫取进行专题介绍。
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 一个有趣的问题:为什么大年夜部分AI机械人、语音助手等都是女性身份或女性设定,如Siri,Cortana,Alexa>>>详细阅读
本文标题:时序数据库技术体系-时序数据存储模型设计
地址:http://www.17bianji.com/lsqh/39030.html
1/2 1