全部产品
云市场

Schema设计&名词解释

更新时间:2018-12-20 11:45:25

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里。