searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

时序数据库中的索引引擎

2023-10-07 09:52:44
5
0

啥是索引

一条数据存入到存储引擎中,如果要查找到它,需要全量遍历,但是如果我们有这条数据的索引,那么就能快速定位到这条数据,类似与书的目录

时序数据库的特点

一行数据是由time + tags +fields组成:

  1. time:时间数据,必须要有
  2. tags:不随时间变化的tag数据,比如机器编号之类的
  3. fields:随时间变化的数据

倒排索引

在多个文件中查找一个值,正常的查找流程是遍历一遍所有文件,如果这个值正好在最后一个文件,那就需要消耗很多资源,倒排索引就是反过来,先知道这个值大概在哪个文件,返回这个文件,再在这个文件中查找,这就很快了,本文中的时序数据库的索引设计就是倒排索引的思想。

索引引擎的设计

时序数据库有个很重要的特点:tags,用tags来做索引列是最优的选择,如何设计呢?

  1. 一行数据的索引serieskey组成:table_name + tags组成对应一个sid
  2. 这行数据的每个tag:table_name + tag 也对应这个sid
  3. 这个sid也可以对应这个serieskey,用于反向查询;

这样设计下,天然形成了一个聚合,因为tags是一般是固有信息,一般不变的,那么拥有相同tags的行都对应一个sid,sid再去对应field数据,因为每一行都有时间信息,根据时间得出这个sid对应的全部行的时间范围,再根据时间先后组织数据让数据按时间有序,我们看看这样设计下的查询操作(select * from table1 where time in (2023.01.01, 2023.02.02)):

  1. 首先根据projection生成serieskey查找到sid;
  2. 再根据sid查找到对应的所有行的fields数据;
  3. 再根据时间范围信息找到对应的数据。

这样的查询就非常的快了

索引的存储

可以看到serieskey的前缀都是以table_name开始的,对于这种有相同前缀的存储,最好的方式就是基数树,可以提供很好的查询效率和空间压缩;

0条评论
0 / 1000
Mr. 油
89文章数
0粉丝数
Mr. 油
89 文章 | 0 粉丝
原创

时序数据库中的索引引擎

2023-10-07 09:52:44
5
0

啥是索引

一条数据存入到存储引擎中,如果要查找到它,需要全量遍历,但是如果我们有这条数据的索引,那么就能快速定位到这条数据,类似与书的目录

时序数据库的特点

一行数据是由time + tags +fields组成:

  1. time:时间数据,必须要有
  2. tags:不随时间变化的tag数据,比如机器编号之类的
  3. fields:随时间变化的数据

倒排索引

在多个文件中查找一个值,正常的查找流程是遍历一遍所有文件,如果这个值正好在最后一个文件,那就需要消耗很多资源,倒排索引就是反过来,先知道这个值大概在哪个文件,返回这个文件,再在这个文件中查找,这就很快了,本文中的时序数据库的索引设计就是倒排索引的思想。

索引引擎的设计

时序数据库有个很重要的特点:tags,用tags来做索引列是最优的选择,如何设计呢?

  1. 一行数据的索引serieskey组成:table_name + tags组成对应一个sid
  2. 这行数据的每个tag:table_name + tag 也对应这个sid
  3. 这个sid也可以对应这个serieskey,用于反向查询;

这样设计下,天然形成了一个聚合,因为tags是一般是固有信息,一般不变的,那么拥有相同tags的行都对应一个sid,sid再去对应field数据,因为每一行都有时间信息,根据时间得出这个sid对应的全部行的时间范围,再根据时间先后组织数据让数据按时间有序,我们看看这样设计下的查询操作(select * from table1 where time in (2023.01.01, 2023.02.02)):

  1. 首先根据projection生成serieskey查找到sid;
  2. 再根据sid查找到对应的所有行的fields数据;
  3. 再根据时间范围信息找到对应的数据。

这样的查询就非常的快了

索引的存储

可以看到serieskey的前缀都是以table_name开始的,对于这种有相同前缀的存储,最好的方式就是基数树,可以提供很好的查询效率和空间压缩;

文章来自个人专栏
存储专栏
89 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0