DTCC 2019 | 阿里云TSDB: 教你解锁时序时空数据库的种种黑科技(12)

如下图所示的是时间线的生命周期 , 如果用户想要查询T2-T3时间范围内的数据 , 肯定不希望数据中包含T0-T2已经消亡或者说不再有新的数据进来的时间线 , 所以这部分也是时序索引可以进一步研究的地方 。

对于时序索引而言 , 还需要支持模糊查询 , 所谓模糊查询就是给出的并不是一个完整的时间序列定义 , 而可能是Tag的全量匹配 , 或者基于Tag或者Tag Value的模糊查询 , 需要能够找到相应的时间线 , 此时就需要基于Tag Key或者Tag Value做一个倒排索引 。 在时间序列生命周期的启发下 , 在倒排索引技术基础之上 , TSDB增加了时间序列生命周期的倒排索引 。 同时加上对于生命周期的进一步过滤 , 最终得到相对较少的时间线 。 将这些相对较少的时间线扔给下一层进行计算的时候就会带来一个好处就是减少了IO , 提供了极致的查询性能 。 除了上述优化工作之外 , TSDB还将整个倒排索引持久化到存储层 , 这使得索引节点可以处于无状态的结构 , 并且使得水平扩展变得非常容易 , 对于时间线数据实现TTL 。

在时序索引模块中还实现了一个评估器 , 评估器会以自己认为的最合适的方式计算时间线 , 因为当查询条件非常复杂的时候 , 计算时间线的方式有很多种 , 就好比在关系型数据库中做Join也有很多种方法 。 评估器会根据几个相应的来源做评估 , 分别是HHL技术器、BloomFilter以及时序索引缓存 。 HHL计数器所记录的就是倒排索引中命中的时间线数量 , BloomFilter记录的是时间线是否还真实存在的情况 , 这两部分数据并不是非常精确的 , 它们是在过去写入查询的过程中所得到的粗略统计数据 。 但是当时间线本身出现量级差异的时候 , 这样的评估就会变得非常有意义 , 其能够以最优化的代价来获取时间线 。 因此 , 评估器的作用就类似于关系型数据库中的CBO (Cost-based Optimizer) 。

推荐阅读