System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 在openGauss数据库上并行创建列存表btree索引的方法和系统技术方案_技高网

在openGauss数据库上并行创建列存表btree索引的方法和系统技术方案

技术编号:40246246 阅读:5 留言:0更新日期:2024-02-02 22:42
本发明专利技术涉及btree索引创建技术领域,提供一种在openGauss数据库上并行创建列存表btree索引的方法和系统,包括:获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度;通过主线程创建上下文对象,根据列存表的规模信息对创建的上下文对象进行初始化;根据子线程并行创建的启动阈值和并发度启动对应数量的子线程,将初始化后的上下文对象分发给所述子线程,子线程根据接收的上下文对象执行列存表索引的创建;主线程通过上下文对象对每个子线程创建的列存表索引进行归并排序,获得完整的列存表索引。本发明专利技术可以在openGauss数据库上并行创建列存表btree索引,减少大量的开发工作,提高创建btree索引的性能。

【技术实现步骤摘要】

本专利技术涉及btree索引创建,尤其涉及一种在opengauss数据库上并行创建列存表btree索引的方法和系统。


技术介绍

1、btree全称为“平衡树”,是一种多叉树,btree的每个节点可以有多个子节点。btree索引通常是指b+tree索引,是一种将数据以有序的方式存储起来的树状数据结构,其本质是一种在磁盘上构建的平衡树,用于快速检索数据,并且将数据按照索引列的值排序存储。b+tree索引的特点是数据存储在叶子节点上,通过非叶子节点进行索引。

2、opengauss数据库支持btree索引,但是当前创建索引的方法主要是针对行存表特性优化的,而列存表的数据存储特性和扫描方式与行存表完全不同,不能简单的复用现有创建索引的优化方法,主要通过基本的全表扫描方式来实现。在实际应用中,opengauss数据库只支持单线程方式创建索引,当列存表数据量很大的时候,创建索引的耗时特别长。

3、因此,如何提供一种高效的在opengauss数据库上并行创建列存表btree索引的方法,成为亟待解决的技术问题。


技术实现思路

1、有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种在opengauss数据库上并行创建列存表btree索引的方法和系统。

2、根据本专利技术的第一方面,提供一种在opengauss数据库上并行创建列存表btree索引的,包括:

3、获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度;

4、通过主线程创建上下文对象,根据列存表的规模信息对创建的上下文对象进行初始化;

5、根据子线程并行创建的启动阈值和并发度启动对应数量的子线程,将初始化后的上下文对象分发给所述子线程,子线程根据接收的上下文对象执行列存表索引的创建;

6、主线程通过上下文对象对每个子线程创建的列存表索引进行归并排序,获得完整的列存表索引。

7、优选地,本专利技术在opengauss数据库上并行创建列存表btree索引的方法中,获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度,包括:

8、从运行系统目录表中获取列存表索引key对应列的cu数据块总数、cu数据块平均大小值和cu数据总量;

9、根据获取的cu数据块总数和cu数据块平均大小值设置子线程并行创建的启动阈值;

10、根据获取的cu数据总量、运行系统的cpu数量和io并发支持参数确定子线程并行创建的并发度。

11、优选地,本专利技术在opengauss数据库上并行创建列存表btree索引的方法中,获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度,还包括:根据获取的cu数据块平均大小值设置子线程步长,所述子线程步长等于每次获取的cu数据块数量。

12、优选地,本专利技术在opengauss数据库上并行创建列存表btree索引的方法中,上下文对象包括任务调度信息和中间结果信息,其中,任务调度信息包括列存表索引列对应列的cu数据块总数、cu数据块起始cuid、cu数据块cuid计数器、保护cu数据块cuid计数器更新的锁以及子线程步长,中间结果信息包括每个子线程的运行状态信息和执行结果信息。

13、优选地,本专利技术在opengauss数据库上并行创建列存表btree索引的方法中,通过主线程创建上下文对象,根据列存表的规模信息对创建的上下文对象进行初始化,包括:

14、通过主线程从目录表中获取列存表索引key对应列的cu数据块总数和cu数据块起始cuid;

15、根据获取的获取列存表索引key对应列的cu数据块总数和cu数据块起始cuid初始化一个cu数据块cuid计数器;

16、创建用于保护cu数据块cuid计数器更新的锁并指定子线程步长。

17、优选地,本专利技术在opengauss数据库上并行创建列存表btree索引的方法中,所述cu数据块cuid计数器用于记录下一批要处理的cu数据块的起始cuid。

18、优选地,本专利技术在opengauss数据库上并行创建列存表btree索引的方法中,子线程根据接收的上下文对象执行列存表索引的创建,包括:

19、子线程通过上下文对象中的cu数据块cuid计数器获取要处理的cu数据块起始cuid,原子地将cu数据块cuid计数器增加子线程的步长;

20、根据要处理的cu数据块起始cuid和子线程的步长确定当前批次要处理的cu数据块;

21、通过遍历每个cu数据块的cudesc记录获取cu数据块的位置信息,根据cu数据块的位置信息读取cu数据块;

22、解析子线程所有读取的cu数据块并构建索引元组,对构建的索引元组进行排序,并将子线程的执行结果保存在上下文对象中;

23、继续获取下一批要处理cu数据块,直到子线程完成所有执行,更新上下文对象的状态并结束子线程。

24、优选地,本专利技术在opengauss数据库上并行创建列存表btree索引的方法中,主线程通过上下文对象对每个子线程创建的列存表索引进行归并排序,获得完整的列存表索引,包括:当主线程通过上下文对象检测到所有子线程执行结束后,从上下文对象中获取每个子线程的执行结果,对各个子线程创建的索引元组进行归并排序,并通过创建列存表索引的数据字典信息创建完整的列存表索引。

25、根据本专利技术的第二方面,提供一种在opengauss数据库上并行创建列存表btree索引的系统,该系统包括索引并行创建服务端,该索引并行创建服务端用于获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度;通过主线程创建上下文对象,根据列存表的规模信息对创建的上下文对象进行初始化;根据子线程并行创建的并发度启动对应数量的子线程,将初始化后的上下文对象分发给所述子线程,子线程根据接收的上下文对象执行列存表索引的创建;主线程通过上下文对象对每个子线程创建的列存表索引进行归并排序,获得完整的列存表索引。

26、根据本专利技术的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本专利技术第一方面所述的方法。

27、本专利技术在opengauss数据库上并行创建列存表btree索引的方法和系统,可以有效利用opengauss数据库中的多线程机制,以及列存表扫描数据、构建索引元组、排序等功能模块,减少大量的开发工作;通过采用多线程并行方式,让创建索引过程中扫描数据、排序并行起来,充分利用系统的io、cpu资源,提高创建索引的性能。

本文档来自技高网...

【技术保护点】

1.一种在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度,包括:

3.根据权利要求2所述的在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度,还包括:根据获取的CU数据块平均大小值设置子线程步长,所述子线程步长等于每次获取的CU数据块数量。

4.根据权利要求1所述的在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,上下文对象包括任务调度信息和中间结果信息,其中,任务调度信息包括列存表索引列对应列的CU数据块总数、CU数据块起始cuid、CU数据块cuid计数器、保护CU数据块cuid计数器更新的锁以及子线程步长,中间结果信息包括每个子线程的运行状态信息和执行结果信息。p>

5.根据权利要求1所述的在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,通过主线程创建上下文对象,根据列存表的规模信息对创建的上下文对象进行初始化,包括:

6.根据权利要求5所述的在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,所述CU数据块cuid计数器用于记录下一批要处理的CU数据块的起始cuid。

7.根据权利要求1所述的在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,子线程根据接收的上下文对象执行列存表索引的创建,包括:

8.根据权利要求1所述的在openGauss数据库上并行创建列存表btree索引的方法,其特征在于,主线程通过上下文对象对每个子线程创建的列存表索引进行归并排序,获得完整的列存表索引,包括:当主线程通过上下文对象检测到所有子线程执行结束后,从上下文对象中获取每个子线程的执行结果,对各个子线程创建的索引元组进行归并排序,并通过创建列存表索引的数据字典信息创建完整的列存表索引。

9.一种在openGauss数据库上并行创建列存表btree索引的系统,其特征在于,所述系统包括索引并行创建服务端,所述索引并行创建服务端用于获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度;通过主线程创建上下文对象,根据列存表的规模信息对创建的上下文对象进行初始化;根据子线程并行创建的并发度启动对应数量的子线程,将初始化后的上下文对象分发给所述子线程,子线程根据接收的上下文对象执行列存表索引的创建;主线程通过上下文对象对每个子线程创建的列存表索引进行归并排序,获得完整的列存表索引。

10.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1-8中任一项所述方法的步骤。

...

【技术特征摘要】

1.一种在opengauss数据库上并行创建列存表btree索引的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的在opengauss数据库上并行创建列存表btree索引的方法,其特征在于,获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度,包括:

3.根据权利要求2所述的在opengauss数据库上并行创建列存表btree索引的方法,其特征在于,获取列存表的规模信息,根据列存表的规模信息和运行系统资源设置子线程并行创建的启动阈值和并发度,还包括:根据获取的cu数据块平均大小值设置子线程步长,所述子线程步长等于每次获取的cu数据块数量。

4.根据权利要求1所述的在opengauss数据库上并行创建列存表btree索引的方法,其特征在于,上下文对象包括任务调度信息和中间结果信息,其中,任务调度信息包括列存表索引列对应列的cu数据块总数、cu数据块起始cuid、cu数据块cuid计数器、保护cu数据块cuid计数器更新的锁以及子线程步长,中间结果信息包括每个子线程的运行状态信息和执行结果信息。

5.根据权利要求1所述的在opengauss数据库上并行创建列存表btree索引的方法,其特征在于,通过主线程创建上下文对象,根据列存表的规模信息对创建的上下文对象进行初始化,包括:

6.根据权利要求5所述的在opengauss数据库上并行创建列存表btree索引的方法,其特征在于,所述cu数据块cuid计数器用于记录下一批...

【专利技术属性】
技术研发人员:那海涛刘惠
申请(专利权)人:广州海量数据库技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1