Doris数据库BE——rowset版本追踪

Doris数据库BE——rowset版本追踪_第1张图片

rowset代码位置be/src/olap/version_graph.cpp,字面意思行集合,由一行或多行组成。rowset版本简单理解为rowset编号,每次导入生成一个rowset,比如insert执行10次会生成10个rowset,一次streamload生成一个rowset。

版本的格式为:version=[start_version,end_version] ,比如你执行10次insert into my_table values(“a”,“b”,“c”); 那么会生成10个rowset,rowset从1到10编号分别[0-0],[1-1],[2-2],[3-3],[4-4],[5-5],[6-6],[7-7],[8-8],[9-9],[10,10]。随后doris会根据表的模型对会这些rowset进行合并,合并的过程在doris内部称为compaction

原始版本:[0-0],[1-1],[2-2],[3-3],[4-4],[5-5],[6-6],[7-7],[8-8],[9-9],[10,10]

第一次合并后:[0-2],[3-6],[7-10]

第二次合并 : [0-10]

Doris构建一个版图来为维护上述版本的变更过程,实现过程:[0-0],[1-1],[2-2],[3-3],[4-4],[5-5],[6-6],[7-7],[8-8],[9-9],[10,10]。每个版本的start,end_version+1作为一个图的一个顶点,顶点保存在数组中,顶点的边的值表示end_version+1对应顶点在数组中的下标。如0-1,有一条边1表示start_version为0,end_version的在下标为1的位置再减去1,即存在[0-0]这个版本其他节点类推。
Doris数据库BE——rowset版本追踪_第2张图片
第一次合并后图变为:如0-3,有一条边3表示start_version未0,end_version在下表未3的位置在减去1,即存在[0-2]这个版本。
Doris数据库BE——rowset版本追踪_第3张图片
第二次合并后:
Doris数据库BE——rowset版本追踪_第4张图片

给定一个版本怎么知道合并路径,比如[0-10]这个版本是怎么合并过来的?

首先找到节点0发现边有三条边11,3,1,那么意味着节点0有3次变更,首先最大开始。下标11对应的节点为11,那么对应end_version=11-1=10 ,刚是[0-10]所以最后一次合并版本为[0-10]。下标3对应节点为3,那么对应end_version=3-1=2,即[0-2],start_version在从3开始,发现版本[3-6],start_version再从7开始,发现[7-10] ,依次类推。按照这个过程会得到一个版本合并树,从而了解整个的合并过程。
Doris数据库BE——rowset版本追踪_第5张图片

给定一个版本如何找到最少的连续rowset,比如我要找版本为[0-10] 连续rowset 就是[0-10],最少意味着查询的时候最快?

给定[0-10],从节点0开始,从下标最大的边开始,发现[0-10] 就是我们要找的最小的连续一致的rowset。

对于单一的数据分片(Tablet),新的数据先写入内存结构,随后刷入磁盘,形成一个个不可变更的数据文件,这些数据文件保存在一个rowset中。而Doris的Compaction机制主要负责根据一定的策略对这些Rowset进行合并,将小文件合并成大文件,进而提升查询性能。
每一个rowset都对应一个版本信息,表示当前rowset的版本范围,版本信息中包含了两个字段first和second,first表示当前rowset的起始版本(start version),second表示当前rowset的结束版本(end version)。每一次数据导入都会生成一个新的数据版本,保存在一个rowset中。未发生过compaction的rowset的版本信息中first字段和second字段相等;执行compaction时,相邻的多个rowset会进行合并,生成一个版本范围更大的rowset,合并生成的rowset的版本信息会包含合并前的所有rowset的版本信息。Compaction分为两种类型:base compaction和cumulative compaction。其中cumulative compaction则主要负责将多个最新导入的rowset合并成较大的rowset,而base compaction会将cumulative compaction产生的rowset合入到start version为0的基线数据版本(Base Rowset)中,是一种开销较大的compaction操作。这两种compaction的边界通过cumulative point来确定。base compaction会将cumulative point之前的所有rowset进行合并,cumulative compaction会在cumulative point之后选择相邻的数个rowset进行合并,如图1-2所示。
Doris数据库BE——rowset版本追踪_第6张图片

你可能感兴趣的:(Doris,数据库)