Opentsdb的技术特点

[size=large]1 客户端[/size]
opentsdb的hbase客户端,使用了他们自己编写的异步非阻塞[url=https://github.com/OpenTSDB/asynchbase]hbase客户端[/url]
据说比hbase自带的客户端性能好很多.
下面是一个评测结果
[url]http://www.tsunanet.net/~tsuna/asynchbase/benchmark/viz.html[/url]

[size=large]2 opentsdb的数据存储[/size]

[size=medium]2.1 hbase宽列存储[/size]
假设一般关系型数据库存储某指标ABX在2014年5月1日08时左右的如下数据

[img]http://dl2.iteye.com/upload/attachment/0104/2191/06803ce1-b2b2-3bb1-9cd2-b75ddc24eca1.png[/img]

可以看出时间数据前缀有重复,在Hbase中可以通过提取共同前缀,达到减小存储空间,提高存储效率的目标.将上述时序数据在Hbase中以宽列形式存储,逻辑结构表示如下

[img]http://dl2.iteye.com/upload/attachment/0104/2193/8e5ce5b4-3413-3f49-b57e-732cd29f7a5b.png[/img]

Hfile中keyvalue的物理存储格式(略去column family和version部分)如下

[img]http://dl2.iteye.com/upload/attachment/0104/2195/2cad1401-087c-3aea-9f3c-db78ba8a761d.png[/img]

宽列存储的优势在于Hfile中的row(相同rowkey的keyvalue是一个row)数量会大大减少,提高查询效率,原因如下:
1)Hfile中meta block中会存储bloom filter,用来判定特定的rowkey是否在Hfile中.随着row数量的减少,bloom filter的体积会显著减小,因为bloom filter entry的生成是以row为单位.
2)Hbase中除了rowkey作为检索条件,还可以利用filter在rowkey,keyvalue,keyvalue的集合上进行过滤.在filter执行的早期阶段进行rowkey的比较,如果发现整个row不符合条件,能迅速跳过大量keyvalue,减少filter比对的次数.

[size=medium]2.2 opentsdb的宽列存储的二次compact[/size]
宽列存储的硬盘空间节省非常有限,因为keyvalue的数量受column qualifier数量影响.因此可以在宽列存储的基础上进行二次compact,将同一个row的多个column qualifier存储为一个column qualifier.

[img]http://dl2.iteye.com/upload/attachment/0104/2197/ef8f91ea-ccd8-3cb2-a630-14c260a029b9.png[/img]
其keyvalue物理存储格式(略去column family和version部分)为

[img]http://dl2.iteye.com/upload/attachment/0104/2199/f051e948-0f63-37e4-aefd-494433f0f4cd.png[/img]
进过二次compact的时序数据,在存储体积上也显著减小.配合其他压缩算法,可以极大的节省存储空间,提高访问效率.

Opentsdb在添加数据点的时候,把需要compact的row放到一个队列中,然后定时compact.

TSDB的addPointInternal方法中,调用scheduleForCompaction将row放入队列, CompactionQueue类中,启动Thrd这个线程来进行compact

但是有时候一个row已经被compact过了,这个row仍有可能插入数据,所以要对已经compact的row进行第二次compact,所以在scan的时候,仍然有可能进行compact.
ScannerCB类中,每次scan完成仍然调用compact方法进行数据compaction

下图表示一个已经compact的row,插入了新的数据后,又一次进行了compact

[img]http://dl2.iteye.com/upload/attachment/0104/2201/d0474e2b-77ef-3194-abdd-12264e752d1b.png[/img]


[size=large]3 opents中的tree[/size]
Opents中的监控指标都是metric,每个metric都互相独立,带有tag,由用户自定义metric和tag,但是可以通过自定义规则,将metric,tag分解为树的形式进行结构化展现.


[img]http://dl2.iteye.com/upload/attachment/0104/2203/195b1f0e-92ce-3c79-aaa1-83e4ef0bbd24.png[/img]
比如有上面的metric和tag,可以通过规则(提取tag value,正则表达式分解metric等),变换为如下的tree
先按照数据中心分级,然后按主机,然后按监控类型

[img]http://dl2.iteye.com/upload/attachment/0104/2205/ffca9bdc-1d90-3322-b26c-b7075ae648cc.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值