一种基于openGauss数据库的多线程批量文件加载方法技术

技术编号:37468289 阅读:17 留言:0更新日期:2023-05-06 09:45
本发明专利技术涉及数据加载技术领域,提供一种基于openGauss数据库的多线程批量文件加载方法,包括:根据文件数量和系统资源拉起加载线程,通过加载线程将文件数据读取至内存;计算线程期望处理数据量,在内存中根据线程期望处理数据量将文件的数据量拆分为第一数据量组和第二数据量组;将第二数据量组中每个数据量的部分数据进行预先分配,将第一数据量组与经过预先分配的第二数据量组合并为第三数据量组;将第三数据量组中当前最大数据量对应的数据块下发至当前线程,采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配。本发明专利技术通过启用多线程加载文件,在负载尽可能平均的前提下,实现数据的高速加载。的高速加载。的高速加载。

【技术实现步骤摘要】
一种基于openGauss数据库的多线程批量文件加载方法


[0001]本专利技术涉及数据加载
,尤其涉及一种基于openGauss数据库的多线程批量文件加载方法。

技术介绍

[0002]数据库为了能够快速导入数据,一般都有自己的批量加载方法,采用相应的批量加载方法将数据读入内存,在内存中将数据组装为适配自身要求的二进制格式,通常还能提供直接写入的方式进一步加快吞吐量。
[0003]目前,尚没有针对openGauss数据库批量加载方法,无法简单高效的将来自文本文件(尤其是常见的CSV格式)加载到openGauss数据库中。当用户不断产生大量待导入openGauss数据库的文本文件,需要尽快将其加载至openGauss数据库,以避免发生堆积而可能导致的磁盘耗尽,最终严重影响系统的可用性。在实际应用中,现代计算机拥有多路、多核、大内存等资源,用户需要对计算机资源进行充分利用,以产生尽量高的处理速度。
[0004]但是在实际应用中,来自于用户的文件大小和数量无法预知,如何根据用户的文件数据源拉起合适数量的加载线程,并且让各线程做到尽可能同时结束,让加载全程保持一个比较稳定的速度,是当下面对的难题。即使是在比较理想的状态,文件大小均匀,数量恰好是预期加载线程数的整倍数,数据分配也会因为受线程资源影响,某个或某几个线程会晚于其他线程结束,导致这段时间内无法发挥多线程加载的优势,拉低整个加载过程的平均速度。
[0005]因此,如何提前对用户提供的数据源文件进行规划,合理分配到多个加载线程,在加载过程中实时监控各线程的加载进度,实现整个过程中加载速度曲线的稳定平滑,通过动态调整使数据分配基本一起结束,成为亟待解决的技术问题。

技术实现思路

[0006]有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种基于openGauss数据库的多线程批量文件加载方法。
[0007]本专利技术提供一种基于openGauss数据库的多线程批量文件加载方法,包括:
[0008]步骤S1:根据文件数量和系统资源拉起加载线程,通过加载线程将文件数据读取至内存;
[0009]步骤S2:计算线程期望处理数据量,在内存中根据线程期望处理数据量将文件的数据量拆分为第一数据量组和第二数据量组;
[0010]步骤S3:将第二数据量组中每个数据量的部分数据进行预先分配,将第一数据量组与经过预先分配的第二数据量组合并为第三数据量组;
[0011]步骤S4:将第三数据量组中当前最大数据量对应的数据块下发至当前线程,采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配。
[0012]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法的步骤S2包
括:
[0013]根据文件数量以及每个文件的数据量计算线程期望处理数据量;
[0014]根据计算所得的线程期望处理数据量将文件的数据量拆分为第一数据量组和第二数据量组,其中,第一数据量组中每个数据量均小于线程期望处理数据量,第二数据量组中每个数据量均不小于线程期望处理数据量。
[0015]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法,步骤S2中根据文件数量以及每个文件的数据量计算线程期望处理数据量,包括:将所有文件的数据量的和与文件的数量比值作为线程期望处理数据量。
[0016]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法的步骤S3包括:
[0017]步骤S31:遍历第二数据量组中的每个数据量,通过将每个数据量与线程期望处理数据量的比值向下取整,获得每个数据量对应的取整分配值;
[0018]步骤S32:将第二数据量组中每个数据量的部分数据预先分配至与取整分配值相等数量的线程,所述部分数据为每个数据对应的取整分配值与线程期望处理数据量的乘积,更新空闲线程;
[0019]步骤S33:将第一数据量组与经过预先分配的第二数据量组合并,按降序对合并后的数据量组进行排序,得到第三数据量组,采用平衡搜索二叉树的方式对第三数据量组进行存储。
[0020]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法,步骤S33中将第一数据量组与经过预先分配的第二数据量组合并,包括:在将第一数据量组与经过预先分配的第二数据量组进行合并时,通过加值处理对等值的数据量进行区分。
[0021]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法的步骤S4包括:
[0022]将第三数据量组中当前最大数据量对应的数据块下发至当前线程,计算当前线程的分配期望差,所述当前线程的分配期望差等于线程期望处理数据量与实际分配数据量的差值;
[0023]当所述当前线程的分配期望差等于零,结束对当前线程的数据分配,对下一线程进行数据分配;
[0024]当所述当前线程的分配期望差不等于零,计算当前线程分配结果对整体分配的影响值,所述当前线程分配结果对整体分配的影响值等于当前线程的分配期望差的平方;
[0025]从第三数据量组中查找与当前线程的分配期望差的右侧最接近值与左侧最接近值,根据查找结果并采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配,将已参与分配的数据量从第三数据量组中删除,对下一线程进行数据分配。
[0026]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法中,从第三数据量组中查找与当前线程的分配期望差的右侧最接近值与左侧最接近值,根据查找结果并采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配,将已参与分配的数据量从第三数据量组中删除,对下一线程进行数据分配,包括:当所述右侧最接近值与左侧最接近值均不存在时,结束对所有线程的数据分配。
[0027]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法中,从第三数据量组中查找与当前线程的分配期望差的右侧最接近值与左侧最接近值,根据查找结果并采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配,将已参与分配的数据量从第三数据量组中删除,对下一线程进行数据分配,包括:当所述右侧最接近值存在但左侧最接近值不存在时,将右侧最接近值对应的数据块下发至当前线程,在当前线程数据分配结束后,对下一线程进行数据分配。
[0028]进一步地,本专利技术基于openGauss数据库的多线程批量文件加载方法中,从第三数据量组中查找与当前线程的分配期望差的右侧最接近值与左侧最接近值,根据查找结果并采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配,将已参与分配的数据量从第三数据量组中删除,对下一线程进行数据分配,包括:
[0029]当所述左侧最接近值存在但右侧最接近值不存在时,将左侧最接近值对应的数据块下发至当前线程,更新当前线程的分配期望差,所述更新后当前线程的分配期望差等于更新前本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于openGauss数据库的多线程批量文件加载方法,其特征在于,所述方法包括:步骤S1:根据文件数量和系统资源拉起加载线程,通过加载线程将文件数据读取至内存;步骤S2:计算线程期望处理数据量,在内存中根据线程期望处理数据量将文件的数据量拆分为第一数据量组和第二数据量组;步骤S3:将第二数据量组中每个数据量的部分数据进行预先分配,将第一数据量组与经过预先分配的第二数据量组合并为第三数据量组;步骤S4:将第三数据量组中当前最大数据量对应的数据块下发至当前线程,采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配。2.根据权利要求1所述的基于openGauss数据库的多线程批量文件加载方法,其特征在于,步骤S2包括:根据文件数量以及每个文件的数据量计算线程期望处理数据量;根据计算所得的线程期望处理数据量将文件的数据量拆分为第一数据量组和第二数据量组,其中,第一数据量组中每个数据量均小于线程期望处理数据量,第二数据量组中每个数据量均不小于线程期望处理数据量。3.根据权利要求2所述的基于openGauss数据库的多线程批量文件加载方法,其特征在于,步骤S2中根据文件数量以及每个文件的数据量计算线程期望处理数据量,包括:将所有文件的数据量的和与文件的数量比值作为线程期望处理数据量。4.根据权利要求1所述的基于openGauss数据库的多线程批量文件加载方法,其特征在于,步骤S3包括:步骤S31:遍历第二数据量组中的每个数据量,通过将每个数据量与线程期望处理数据量的比值向下取整,获得每个数据量对应的取整分配值;步骤S32:将第二数据量组中每个数据量的部分数据预先分配至与取整分配值相等数量的线程,所述部分数据为每个数据对应的取整分配值与线程期望处理数据量的乘积,更新空闲线程;步骤S33:将第一数据量组与经过预先分配的第二数据量组合并,按降序对合并后的数据量组进行排序,得到第三数据量组,采用平衡搜索二叉树的方式对第三数据量组进行存储。5.根据权利要求4所述的基于openGauss数据库的多线程批量文件加载方法,其特征在于,步骤S33中将第一数据量组与经过预先分配的第二数据量组合并,包括:在将第一数据量组与经过预先分配的第二数据量组进行合并时,通过加值处理对等值的数据量进行区分。6.根据权利要求1所述的基于openGauss数据库的多线程批量文件加载方法,其特征在于,步骤S4包括:将第三数据量组中当前最大数据量对应的数据块下发至当前线程,计算当前线程的分配期望差,所述当前线程的分配期望差等于线程期望处理数据量与实际分配数据量的差值;当所述当前线程的分配期望差等于零,结束对当前线程的数据分配,对下一线程进行
数据分配;当所述当前线程的分配期望差不等于零,计算当前线程分配结果对整体分配的影响值,所述当前线程分配结果对整体分配的影响值等于当前线程的分配期望差的平方;从第三数据量组中查找与当前线程的分配期望差的右侧最接近值与左侧最接近值,根据查找结果并采用与当前线程分配结果对整体分配的最小影响值对应的分配方式对当前线程进行数据分配,将已参与分配的数据量从第三数据量组中删除,对下一线程进行数据分配。7.根据权利要求6所述的基于openGauss数据库的多线程批量文件加载方法,其特征在于,从第三数据量组中查找与当前线程的分配期望差的右侧最接近值与左侧...

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

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

1