Schema设计&名词解释
Schema&名词解释
名词解释
度量(metric)
你所需要记录的一种数据项。随着时间的流失,会不断地在这个数据项中记录数据。比如你想监控某台机器的磁盘IO情况,那么可以定义metric = server01.disk.iops
。
标签(tag)
每个度量都至少需要一个标签,最多8个(建议1~3个),标签由{tagK,tagV}构成。还是使用上面的例子,假设其实你有多个磁盘, 那么你可以这样设计:server01.disk.iops{dev=vdb}
, server01.disk.iops{dev=vdc}
时间序列(Time Series)
度量 + 一组标签 的组合即为时间序列。也可以叫**时间线**。
数据点(DataPoint)
一条时间线上,是可以不断地插入新数据点,数据点就是时间戳+值。
分辨率(resolution)
数据点会包含时间戳,这个时间戳可以支持毫米级和秒级两种分辨率。
UID
metric,tagK,tagV这些在OpenTSDB内都是有一个UID来映射的,一个字符串到UID的映射。UID是有分配上限的,这三者的UID是独立的。
设计注意事项
度量上限
度量是有上限的,不能无限创建,因为UID分配是有上限的,所以一开始得规划好。云OpenTSDB大约是42亿这个上限,社区版本默认是1600万上限。
Tag上限
一条时间线至少要有1个tag,至多8个tag。建议不要设计太多tag,尽量设计简单少量的tag,1~3个即可。除了这个限制,整个TSDB能容纳多少个tag也是有上限的,这也取决于前面提到的UID。tagK和tagV分别有自己的UID,分配上限是42亿,社区默认是1600万。
时间线上限
你能创建多少条时间线,需要综合度量上限和Tag上限来看。这两者任意一个达到上限,都无法再创建新的时间线了。
分辨率建议
虽然我们支持毫秒级别的分辨率,但是不意味着你真的能1ms写入一个数据点进来。而且使用毫秒分辨率会占用更多存储空间。如果没有特殊需求,建议用秒级分辨率即可。1条时间线上的数据点尽量统一分辨率。timestamp=1543982710
,10位数表示秒级,13位表示毫秒级。秒级不能超过4294967295,毫秒级不能超过4294967295000。秒级分辨率更节省空间。
查询性能问题
由于OpenTSDB目前是按照{metric + timestamp + tagK0 + tagV0 + tagK1 + tagV1 ...}
这样的格式去设计的HBase rowKey,而且本身没有存一个metric有什么tag这样的元信息。 这意味着当你查询的时候,即便你指定清楚了tag,也不得不遍历所有tag的组合。即tag的笛卡尔积非常大时,查询会较慢,尤其是新的数据,还未压缩完成时。建议尽量少的tag,或者tag的value尽量少,也可以将tag信息合到metric里。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论