CN110347440A - 基于多进程并发和插件向数据库快速加载数据方法和系统 - Google Patents
基于多进程并发和插件向数据库快速加载数据方法和系统 Download PDFInfo
- Publication number
- CN110347440A CN110347440A CN201910549601.0A CN201910549601A CN110347440A CN 110347440 A CN110347440 A CN 110347440A CN 201910549601 A CN201910549601 A CN 201910549601A CN 110347440 A CN110347440 A CN 110347440A
- Authority
- CN
- China
- Prior art keywords
- data
- load
- plug
- unit
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 173
- 230000008569 process Effects 0.000 claims abstract description 149
- 230000006870 function Effects 0.000 claims description 61
- 238000012545 processing Methods 0.000 claims description 22
- 230000005856 abnormality Effects 0.000 claims description 8
- 230000007246 mechanism Effects 0.000 claims description 5
- 230000008878 coupling Effects 0.000 abstract description 5
- 238000010168 coupling process Methods 0.000 abstract description 5
- 238000005859 coupling reaction Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了基于多进程并发和插件向数据库快速加载数据方法和系统,包括数据加载工具和注册到数据库服务器的数据加载插件,所述数据加载插件包括一个写进程和多个解析进程;该方法包括以下步骤:所述数据加载工具负责读取配置文件,并连接和调用数据加载插件进行加载工作;所述数据加载插件接受连接的进程为写进程,写进程创建多个所述解析进程;每个所述解析进程分任务并行读取源数据文件中相关的数据并解析和组装成元组,将所述元组放入其对应的共享内存队列;所述写进程遍历所有所述共享内存队列,从中取出元组数据后直接写入目标数据文件中。本发明有益效果:增强了扩展性,降低了与数据库服务器的耦合性,提高了加载效率。
Description
技术领域
本发明涉及数据库技术领域,具体来说,涉及一种基于多进程并发和插件向数据库快速加载数据方法和系统,适用于批量数据加载。
背景技术
随着计算机技术的飞速发展,数据库的应用也越来越广泛,数据的加载效率是数据库的总体性能的一个非常重要的指标。
目前,数据库数据加载的主要技术如下:传统数据加载的流程首先从数据文件中读取一行数据,再进行解析,然后将解析后的数据组装成元组,最后将该元组写入到数据库中,即分析一行数据,往数据库写入一条数据记录。该方法主要缺点:分析数据和数据写入数据库不能同时进行;每次加载数据库系统通常都会执行多项事务检查,这些事务检查也会降低数据文件的写入效率;而且一次只能往数据库中写入一条数据记录,需要进行频繁的IO调用,并且写入数据文件的同时也需要写WAL日志,效率极其低下,不适合大批量数据的快速加载。
开源数据库PostgreSQL中的Copy命令针对批量数据加载流程进行了部分优化,将整个数据导入作为一个大事务,减少了事务的检查,并且将数据由每次写入变为批量写入,虽然减少了IO调用,但是还会存在写WAL日志,分析数据和写入数据也不能并行进行,虽然数据加载速度相对来说有所提高,但是提高有限。
在申请号为200910080927.X的中国专利申请中,公开了一种将数据批量导入数据库的方法及系统,在该技术方案中,分析数据文件中数据的过程和将分析后数据写入数据库的过程并行;数据经过分析后存入缓存,直到分析完毕;当缓存中的数据达到预设数据量时,将该数据一次性写入数据库,并将该数据从缓存中删除;当分析完毕后,将缓存中的所有数据一次性写入数据库;该技术方案相对前两种方案,加载速度有大幅提高,但是加载的数据分析线程和写入线程为一对一匹配,解析数据和写入数据的任务没有很好的分工,并且写数据时仍然通过数据库的写进程来进行的,需要同时写数据文件和日志文件,效率提升有限,并且该方案的实现是需要更改数据库内核,无法很好地将数据加载功能与整体架构解耦,整个发明中没有提到加载过程中的异常处理,可靠性较低。
综上所述,现有的数据库数据加载技术要不采用的单进程单线程的方式,要不采用的多进程(或多线程)方式时,进程(或线程)之间的工作任务分配不合理,并没有完全充分利用多核CPU,导致加载数据的效率较低,同时将现有的加载功能的实现方式直接嵌入到数据库中,无法将数据加载功能从数据库框架中剥离出来,耦合性较高,并且整个数据加载过程中缺乏精细的异常处理,可靠性较低。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的上述技术问题,本发明提出一种基于多进程并发和插件向数据库快速加载数据方法和系统,能够解决存在加载速度较低,并且严重依赖数据库的框架,耦合性较高问题。
为实现上述技术目的,本发明的技术方案是这样实现的:
一种基于多进程并发和插件向数据库快速加载数据方法,包括以下步骤:
所述数据库加载工具负责读取配置文件,与所述数据加载插件的写进程相连接,并调用数据加载插件进行数据加载工作;
所述写进程接收所述数据加载工具的连接后创建多个所述解析进程;
每个所述解析进程分任务并行读取源数据文件中相关的数据后进行数据解析,将解析后的数据组装成元组;
将所述元组放入其所对应的共享内存队列;
所述写进程遍历所有所述共享内存队列,从中取出元组数据后直接写入目标数据文件中。
进一步地,从所述共享内存队列中取出元组数据后直接写入目标数据文件中写入目标数据文件时,根据用户的配置参数决定是否创建索引。
进一步地,该方法还包括:在所述解析进程中采用异常捕获机制捕获出错信息进行异常处理,将所述出错信息进行分类处理并记入日志。
进一步地,所述数据加载工具包括:
所述数据加载工具解析命令行参数和配置文件,将解析后的配置信息存储到链表中,将所述链表中的配置选项转化成字符串;
将所述配置选项作为函数参数,调用所述数据加载插件的加载函数;
所述数据库服务器根据所述配置选项完成数据加载,并将加载的结果信息返回所述数据加载工具,所述数据加载工具接收后显示。
进一步地,所述调用所述数据加载插件的加载函数包括:
将所述数据加载插件的加载函数进行参数解析;
根据所述数据加载插件所对应的进程,分别创建不同的具体功能的Reader模块和Writer模块,并调用对应模块的初始化函数进行初始化;
循环判断已加载的数据条数是否小于限制数,若所述加载条数小于所述限制数,则通过所述Reader模块获取下一个元组,若下一个元组不为空,则通过所述Writer模块写入元组;否则,若所述加载条数超过受限范围或者获取元组为空就结束写入流程;
数据加载完成后,将加载的结果信息通过函数的返回值的形式返回。
本发明的另一方面,提供一种基于多进程并发和插件向数据库快速加载数据系统,其特征在于,包括数据加载工具和注册到数据库服务器的数据加载插件,其中,所述数据加载插件包括一个写进程和多个解析进程,所述数据加载工具与所述写进程相连接;
所述数据加载插件接收连接后创建多个解析进程。
进一步地,所述数据加载工具包括:
配置和参数解析模块,用于所述数据加载工具解析命令行参数和配置文件,将解析后的配置信息存储到链表中,将所述链表中的配置选项转化成字符串;
插件调用模块,用于将所述配置选项作为函数参数,调用所述数据加载插件的加载函数;
加载结果显示模块,用于所述数据库服务器根据所述配置选项完成数据加载,并接收和显示加载后的结果信息。
进一步地,所述写进程包括:
写进程的参数解析模块,用于写进程接收数据加载工具调用的函数参数解析;
写进程初始化模块:初始化READER模块和WRITER模块分别为元组读取模块和写目标数据文件模块,以及系统初始化;
元组读取模块:用于遍历所有所述共享内存队列,从所述共享内存队列中取出元组数据;
写数据文件模块:用于将从元组读取模块读取的元组数据直接写入目标数据文件中。
进一步地,所述解析进程包括:
解析进程的参数解析模块,用于所述解析进程接受调用的函数参数解析;
解析进程初始化模块:初始化READER模块和WRITER模块分别为源文件读取模块和写共享内存模块,以及系统初始化;
源文件读取模块:读取源数据文件,并解析源数据文件中的数据,然后将其组装成元组;
写共享内存模块:将源文件读取模块组装成的元组直接写入其所对应的共享内存中。
进一步地,该系统还包括异常捕获模块,用于在所述解析进程中采用异常捕获机制捕获出错信息进行异常处理,将所述出错信息进行分类处理并记入日志。
本发明的有益效果:
1、通过数据加载插件增强了其扩展性,降低了与数据库服务器的耦合性;
2、通过架构上并行开启多个解析进程进行数据解析,通过一个写进程直接写数据文件,从而减少中间处理流程提高了加载效率,其加载效率是单进程单线程的加载速度的几倍以上,具体的倍数取决于运行环境。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例所述的基于多进程并发和插件向数据库快速加载数据方法的流程示意图;
图2是根据本发明实施例所述的SYS_BULKLOAD SERVER中Parser及其子类之间的关系图;
图3是根据本发明实施例所述的SYS_BULKLOAD SERVER中Writer及其子类之间的关系图;
图4是根据本发明实施例所述的数据加载工具的流程图;
图5是根据本发明实施例所述的数据加载插件的流程图;
图6是根据本发明实施例所述的基于多进程并发和插件向数据库快速加载数据系统的架构图;
图7是根据本发明实施例所述的数据加载工具的示意图;
图8是根据本发明实施例所述的写进程的示意图;
图9是根据本发明实施例所述的解析进程的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
以下以CSV文件格式的加载到KingbaseES数据库服务器为例进行讲述。
如图1所示,根据本发明实施例所述的一种基于多进程并发和插件向数据库快速加载数据方法,包括以下步骤:
所述数据库加载工具负责读取配置文件,与所述数据加载插件的写进程相连接,并调用数据加载插件进行数据加载工作;
所述写进程接收所述数据加载工具的连接后创建多个所述解析进程;
每个所述解析进程分任务并行读取源数据文件中相关的数据后进行数据解析,将解析后的数据组装成元组;
将所述元组放入其所对应的共享内存队列;
所述写进程遍历所有所述共享内存队列,从中取出元组数据后直接写入目标数据文件中。
具体的,将所述数据加载插件注册到数据库系统,所述数据加载工具,是一个单独可执行文件,后续称之为SYS_BULKLOAD CLIENT,SYS_BULKLOADCLIENT主要功能如下:解析客户端参数和读取配置文件,并负责调用服务器数据快速加载函数SYS_BULKLOAD,进行数据加载;接收服务器加载结果信息并显示;
数据加载插件,是注册到数据库服务器的插件,后续称之为SYS_BULKLOADSERVER,SYS_BULKLOAD SERVER的主要功能:接收客户端连接和提供快速加载函数接口给客户端调用;通过读取数据文件并解析,然后进行一些约束检查后将其拼成元组,最后将元组写入数据库,完成数据加载的功能;统计加载的结果信息,并发送给客户端;其中,所述数据加载插件包括一个写进程和多个解析进程,从架构入手,提高程序的并行性,充分利用服务器资源,将最耗CPU的数据处理流程的文件读取、数据解析和组装成元组三个阶段,合并在一个进程处理,该进程后续称之为解析进程,将开启多个解析进程并行处理,其中,解析进程的个数根据用户的输入参数来决定,即解析进程的个数由用户通过配置参数进行指定,因为该参数严重依赖于运行的硬件设备和环境,从而让用户根据实际运行环境进行相关优化;而依赖IO的写数据阶段将由一个单独的进程来处理,后续称之为写进程,并且该写进程只有一个,如果存在多个写进程,写进程之间需要同时访问IO,这样写进程之间就需要加互斥锁,从而导致资源竞争反而导致效率下降,所述数据加载工具通过所述写进程与数据库服务器相连接;每个SYS_BULKLOAD SERVER插件主要包括两个功能模块:Reader模块和Writer模块,Reader模块主要是解析模块Parser和数据校验模块Checker组成,会根据进程的具体不同功能启动不同的具体Parser和Writer模块,主要功能模块的功能如下:TupleParser模块的主要功能是创建多个解析进程和从共享内存中读取元组;CSVParser模块的主要功能读取CSV文件,解析CSV文件,并形成元组,Parser及其子类之间的关系图如图2所示;DirectWriter模块的主要功能是将元组直接写入数据文件中;ParallelWriter模块的作用就是将元组写入共享内存中,Writer及其子类之间的关系图如图3所示。
对于一个数据文件会根据开始位置和读取的行数分别分配给不同的解析进程读取,将每个所述解析进程读取数据文件中相关的数据后进行数据解析;
将解析后的数据组装成元组,将所述元组放入其所对应的共享内存队列;
所述写进程遍历所有所述共享内存队列,从所述共享内存队列中取出元组数据后写入数据文件中;每个解析进程都有一个共享内存队列与写进程进行数据交互。
具体的,写进程通过TupleParser模块中的ParserRead函数遍历所有的共享内存队列读取元组;然后通过DirectWriter模块的writer_insert函数将元组直接写入数据文件中,写入文件时会根据用户的配置参数决定是否创建索引;最后通过将整个文件的加载信息作为sys_bulkload函数的返回值返回给客户端;解析进程的总体执行流程图也如图5所示,只是其实际进行解析和写数据的的具体功能模块为CSVParser模块和ParallelWriter模块,在解析进程中的CSVParser模块的ParserRead函数会按照接收到的Offset和Limit的参数,分别读取文件的不同内容,然后进行数据解析,并组装成元组;其次,通过ParallelWriter的writer_insert函数将数据写入共享内存中,等待写进程的TupleParser进行遍历读取;最后,处理完所有数据,将该解析进程的处理结果以函数返回值的形式返回给写进程,写进程接收完各个解析进程处理的结果汇总作为数据加载的处理结果返回给客户端。
在本发明的一个具体实施例中,为了减少不必要的中间处理流程,缩短每条数据的处理时间,对于有索引的数据加载,从所述共享内存队列中取出元组数据后直接写入目标数据文件中写入目标数据文件时,根据用户的配置参数决定是否创建索引,如果用户为了考虑加载数据的性能,而不需要创建索引,可以通过指定配置参数是否创建索引为否,提高数据加载的效率,如果用户要创建索引,则在加载过程中动态维护B-Tree,提高重建索引的效率。
在本发明的一个具体实施例中,为了提高数据库的数据加载的可靠性,该方法还包括:在所述解析进程中采用异常捕获机制捕获出错信息进行异常处理,将所述出错信息(错误)进行分类处理并记入日志,在加载过程中将错误分类:一种由于影响系统整体加载流程的严重错误,比如配置不合法等,直接报错提示并记入日志文件中,然后终止加载流程;另外一种错误对加载整体流程影响较小,比如数据某个字段类型不正确,或者违法主键约束等,这种错误只影响单条数据加载,不影响整体流程,对于这类错误记录在配置中指定的配置的错误日志文件中,并可根据配置指定出错条数,提前终止加载流程。
在本发明的一个具体实施例中,所述数据加载工具包括:
所述数据加载工具解析命令行参数和配置文件,将解析后的配置信息存储到链表中,将所述链表中的配置选项转化成字符串;
将所述配置选项作为函数参数,调用所述数据加载插件的加载函数;
所述数据库服务器根据所述配置选项完成数据加载,并将加载的结果信息返回所述数据加载工具,所述数据加载工具接收后显示。
具体的,SYS_BULKLOAD CLIENT的执行流程图如图4所示,首先,SYS_BULKLOADCLIENT读取命令行参数和配置文件,将解析后的配置信息统一放入一个链表中,并将该链表中的配置选项转化成一个字符串,以逗号作为各个参数选项的分隔符;其次,将配置选项作为函数的参数,调用插件SYS_BULKLOAD提供的sys_bulkload函数;最后,服务器根据配置选项完成数据加载,并将加载的结果信息返回给客户端,客户端接收后显示。
在本发明的一个具体实施例中,所述调用所述数据加载插件的加载函数包括:
将所述数据加载插件的加载函数进行参数解析;
根据所述数据加载插件所对应的进程,分别创建不同的具体功能的Reader模块和Writer模块,并调用对应模块的初始化函数进行初始化;
循环判断已加载的数据条数是否小于限制数,若所述加载条数小于所述限制数,则通过所述Reader模块获取下一个元组,若下一个元组不为空,则通过所述Writer模块写入元组;否则,若所述加载条数超过受限范围或者获取元组为空就结束写入流程;
数据加载完成后,将加载的结果信息通过函数的返回值的形式返回。
具体的,当SYS_BULKLOAD CLIENT连接到数据库服务器时,数据库服务器会专门启动一个进程与之相连,并负责处理相关的业务逻辑,这个进程为写进程,当数据库服务器接收到客户端调用sys_bulkload函数请求时,会调用SYS_BULKLOAD插件中的sys_bulkload函数,sys_bulkload函数的执行流程图如图5所示,主要流程如下:
首先,sys_bulkload函数会进行参数解析;
其次,在初始化时创建两个功能模块Reader模块和Writer模块,并调用对应模块的初始化函数完成初始化工作;
接着,判断已写入的条数是否达到写入条数的最大限制或者写入条数不受限制,最大限制写入条数通过参数Limit指定的,为0表示不限制,如果写入的条数在受限范围或者不受限制,则会通过所述Reader模块获取下一个元组,如果下一个元组不为空,则通过所述Writer模块写入元组,然后,循环判断是否写入元组的数量已达到受限数量或者不受限制,否则,超过受限范围或者获取元组为空就结束写入流程;
最后,将处理结果返回客户端,并释放资源。
写进程进行解析和写数据的具体功能模块为TupleParser模块和DirectWriter模块,在TupleParser模块中的初始化函数中会根据配置参数processor_count的个数创建多个解析进程及其进程交互的共享内存,TupleParser模块通过模拟成客户端与自身建立连接的方式创建进程,数据库服务器会专门启动一个进程与之相连,接着TupleParser模块再调用sys_bulkload函数让解析进程也进入SYS_BULKLOAD的函数中处理,通过采用这种方式启动多个解析进程;TupleParser模块:首先,读取配置参数开始读取文件行数的偏移量,用Offset表示开始读取文件的行数,接着,计算需要加载数据的总行数,用符号S表示,如果参数Limit的值不为0,则加载的总行数为参数Limit的值,即使文件的总行数小于Limit的值也不影响加载流程;如果Limit参数值为0,则读取CSV文件的总行数减去偏移量Offset,作为需要加载数据的总行数。将每个解析进程进行编号,用id标识,每个进程编号为0,1,……n-1,这样每个进程至少应该读取的行数为:S/n取整,用[S/n]标识,然后将剩余未处理的行数为S–[S/n]*n平均分配到进程id小于S%n的进程中,这些进程的每个进程将多处理一行数据,因此,每个进程需要处理数据的行数Countid为:
每个进程需要处理的开始行数StartIDid为:
例如:文件有1700行数据,用户指定从第3行开始,分为5个进程去读取,即offset为3,则需要读取数据的总行数S为1700-3=1697,并将其分为5个进程读取:1977/5≈339,因此,每个进程至少需要处理339行数据,但是,还剩1697-339*5=2行数据未处理,这样id为0和1的前2个进程每个进程需要多处理1行数据,最终,5个进程分别需要处理的数据行数为340,340,339,339,339条,处理数据的开始位置为3,343,683,1022,1361,将每个解析进程需要处理的行数的偏移量StartID和需要处理的行数Count分别作为调用sys_bulkload函数的Offset和Limit的参数形式传送给解析进程。
如图6所示,本发明的另一方面,提供一种基于多进程并发和插件向数据库快速加载数据系统,包括数据加载工具和注册到数据库服务器的数据加载插件,其中,所述数据加载插件包括一个写进程和多个解析进程,所述数据加载工具与所述写进程相连接;所述数据加载插件接收连接后创建多个解析进程,具体的,所述数据加载插件通过模拟成客户端的方式与所述数据库服务器自身建立连接的方式,创建多个解析进程。
如图7所示,在本发明的一个具体实施例中,所述数据加载工具包括:
配置和参数解析模块,用于所述数据加载工具解析命令行参数和配置文件,将解析后的配置信息存储到链表中,将所述链表中的配置选项转化成字符串;
插件调用模块,用于将所述配置选项作为函数参数,调用所述数据加载插件的加载函数;
加载结果显示模块,用于所述数据库服务器根据所述配置选项完成数据加载,并接收和显示加载后的结果信息。
如图8所示,在本发明的一个具体实施例中,所述写进程包括:
写进程的参数解析模块,用于写进程接收数据加载工具调用的函数参数解析;
写进程初始化模块:初始化READER模块和WRITER模块分别为元组读取模块和写目标数据文件模块,以及内存等系统初始化;
元组读取模块:用于遍历所有所述共享内存队列,从所述共享内存队列中取出元组数据;
写数据文件模块:用于将从元组读取模块读取的元组数据直接写入目标数据文件中。
在本发明的一个具体实施例中,所述写数据文件模块中写入数据文件时根据用户的配置参数决定是否创建索引。
如图9所示,在本发明的一个具体实施例中,所述解析进程包括:
解析进程的参数解析模块,用于所述解析进程接受调用的函数参数解析;
解析进程初始化模块:初始化READER模块和WRITER模块分别为源文件读取模块和写共享内存模块,以及内存等系统初始化;
源文件读取模块:读取源数据文件,并解析源数据文件中的数据,然后将其组装成元组;
写共享内存模块:将源文件读取模块组装成的元组直接写入其所对应的共享内存中。
在本发明的一个具体实施例中,该系统还包括异常捕获模块,用于在所述解析进程中采用异常捕获机制捕获出错信息进行异常处理,将所述出错信息进行分类处理并记入日志。
综上所述,借助于本发明的上述技术方案,通过数据加载插件增强了其扩展性,降低了与数据库服务器的耦合性;通过架构上并行开启多个解析进程进行数据解析,通过一个写进程直接写目标数据文件,将创建索引的流程作为配置选项让用户决定是否创建索引,从而减少中间处理流程提高了加载效率,其加载效率是单进程单线程的加载速度的几倍以上,具体的倍数取决于运行环境。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于多进程并发和插件向数据库快速加载数据方法,其特征在于,包括以下步骤:
所述数据库加载工具负责读取配置文件,与所述数据加载插件的写进程相连接,并调用数据加载插件进行数据加载工作;
所述写进程接收所述数据加载工具的连接后创建多个所述解析进程;
每个所述解析进程分任务并行读取源数据文件中相关的数据后进行数据解析,将解析后的数据组装成元组;
将所述元组放入其所对应的共享内存队列;
所述写进程遍历所有所述共享内存队列,从中取出元组数据后直接写入目标数据文件中。
2.根据权利要求1所述的基于多进程并发和插件向数据库快速加载数据方法,其特征在于,从所述共享内存队列中取出元组数据后直接写入目标数据文件中写入目标数据文件时,根据用户的配置参数决定是否创建索引。
3.根据权利要求1所述的基于多进程并发和插件向数据库快速加载数据方法,其特征在于,该方法还包括:在所述解析进程中采用异常捕获机制捕获出错信息进行异常处理,将所述出错信息进行分类处理并记入日志。
4.根据权利要求1-3任一项所述的基于多进程并发和插件向数据库快速加载数据方法,其特征在于,所述数据加载工具包括:
所述数据加载工具解析命令行参数和配置文件,将解析后的配置信息存储到链表中,将所述链表中的配置选项转化成字符串;
将所述配置选项作为函数参数,调用所述数据加载插件的加载函数;
所述数据库服务器根据所述配置选项完成数据加载,并将加载的结果信息返回所述数据加载工具,所述数据加载工具接收后显示。
5.根据权利要求4所述的基于多进程并发和插件向数据库快速加载数据方法,其特征在于,所述调用所述数据加载插件的加载函数包括:
将所述数据加载插件的加载函数进行参数解析;
根据所述数据加载插件所对应的进程,分别创建不同的具体功能的Reader模块和Writer模块,并调用对应模块的初始化函数进行初始化;
循环判断已加载的数据条数是否小于限制数,若所述加载条数小于所述限制数,则通过所述Reader模块获取下一个元组,若下一个元组不为空,则通过所述Writer模块写入元组;否则,若所述加载条数超过受限范围或者获取元组为空就结束写入流程;
数据加载完成后,将加载的结果信息通过函数的返回值的形式返回。
6.一种基于多进程并发和插件向数据库快速加载数据系统,其特征在于,包括数据加载工具和注册到数据库服务器的数据加载插件,其中,所述数据加载插件包括一个写进程和多个解析进程,所述数据加载工具与所述写进程相连接;
所述数据加载插件接收连接后创建多个解析进程。
7.根据权利要求6所述的基于多进程并发和插件向数据库快速加载数据系统,其特征在于,所述数据加载工具包括:
配置和参数解析模块,用于所述数据加载工具解析命令行参数和配置文件,将解析后的配置信息存储到链表中,将所述链表中的配置选项转化成字符串;
插件调用模块,用于将所述配置选项作为函数参数,调用所述数据加载插件的加载函数;
加载结果显示模块,用于所述数据库服务器根据所述配置选项完成数据加载,并接收和显示加载后的结果信息。
8.根据权利要求6所述的数据多进程并发和插件向数据库快速加载数据系统,其特征在于,所述写进程包括:
写进程的参数解析模块,用于写进程接收数据加载工具调用的函数参数解析;
写进程初始化模块:初始化READER模块和WRITER模块分别为元组读取模块和写目标数据文件模块,以及系统初始化;
元组读取模块:用于遍历所有所述共享内存队列,从所述共享内存队列中取出元组数据;
写数据文件模块:用于将从元组读取模块读取的元组数据直接写入目标数据文件中。
9.根据权利要求6所述的数据多进程并发和插件向数据库快速加载数据系统,其特征在于,所述解析进程包括:
解析进程的参数解析模块,用于所述解析进程接受调用的函数参数解析;
解析进程初始化模块:初始化READER模块和WRITER模块分别为源文件读取模块和写共享内存模块,以及系统初始化;
源文件读取模块:读取源数据文件,并解析源数据文件中的数据,然后将其组装成元组;
写共享内存模块:将源文件读取模块组装成的元组直接写入其所对应的共享内存中。
10.根据权利要求6-9任一项所述的基于多进程并发和插件向数据库快速加载数据系统,其特征在于,该系统还包括异常捕获模块,用于在所述解析进程中采用异常捕获机制捕获出错信息进行异常处理,将所述出错信息进行分类处理并记入日志。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910549601.0A CN110347440B (zh) | 2019-06-24 | 2019-06-24 | 基于多进程并发和插件向数据库快速加载数据方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910549601.0A CN110347440B (zh) | 2019-06-24 | 2019-06-24 | 基于多进程并发和插件向数据库快速加载数据方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110347440A true CN110347440A (zh) | 2019-10-18 |
CN110347440B CN110347440B (zh) | 2022-06-03 |
Family
ID=68182892
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910549601.0A Active CN110347440B (zh) | 2019-06-24 | 2019-06-24 | 基于多进程并发和插件向数据库快速加载数据方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110347440B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177484A (zh) * | 2019-12-09 | 2020-05-19 | 贵阳语玩科技有限公司 | 不同数据源及格式字符串资源文件的加载管理系统和方法 |
CN111414135A (zh) * | 2020-03-11 | 2020-07-14 | 国家海洋环境预报中心 | 一种高性能计算机系统的io效率优化方法 |
CN112380413A (zh) * | 2020-11-13 | 2021-02-19 | 平安普惠企业管理有限公司 | 基于Node.js的爬虫方法、装置、计算机设备及存储介质 |
CN113806593A (zh) * | 2020-06-17 | 2021-12-17 | 新疆金风科技股份有限公司 | 风电场的通信异常检测方法、装置以及场站控制器 |
CN115174941A (zh) * | 2022-07-06 | 2022-10-11 | 灵羲科技(北京)有限公司 | 基于多路视频流的实时运动表现分析及实时数据共享方法 |
US20230103087A1 (en) * | 2021-09-24 | 2023-03-30 | Sap Se | Cloud plugin for legacy on-premise application |
US11922163B2 (en) | 2021-09-24 | 2024-03-05 | Sap Se | Cloud version management for legacy on-premise application |
US12026496B2 (en) | 2021-09-24 | 2024-07-02 | Sap Se | Cloud upgrade for legacy on-premise application |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515291A (zh) * | 2009-03-26 | 2009-08-26 | 北京泰合佳通信息技术有限公司 | 一种将数据批量导入数据库的方法及系统 |
US20090319550A1 (en) * | 2008-06-23 | 2009-12-24 | Kickfire, Inc. | Fast bulk loading and incremental loading of data into a database |
CN103049533A (zh) * | 2012-12-23 | 2013-04-17 | 北京人大金仓信息技术股份有限公司 | 一种快速向数据库加载数据的方法 |
US20140222768A1 (en) * | 2013-02-04 | 2014-08-07 | Bank Of America Coporation | Multi-row database data loading for enterprise workflow application |
US20170293619A1 (en) * | 2016-04-11 | 2017-10-12 | Oracle International Corporation | Simulating data definition triggers in a database system |
CN108776710A (zh) * | 2018-06-28 | 2018-11-09 | 农信银资金清算中心有限责任公司 | 一种数据库数据的并发装载方法及装置 |
-
2019
- 2019-06-24 CN CN201910549601.0A patent/CN110347440B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090319550A1 (en) * | 2008-06-23 | 2009-12-24 | Kickfire, Inc. | Fast bulk loading and incremental loading of data into a database |
CN101515291A (zh) * | 2009-03-26 | 2009-08-26 | 北京泰合佳通信息技术有限公司 | 一种将数据批量导入数据库的方法及系统 |
CN103049533A (zh) * | 2012-12-23 | 2013-04-17 | 北京人大金仓信息技术股份有限公司 | 一种快速向数据库加载数据的方法 |
US20140222768A1 (en) * | 2013-02-04 | 2014-08-07 | Bank Of America Coporation | Multi-row database data loading for enterprise workflow application |
US20170293619A1 (en) * | 2016-04-11 | 2017-10-12 | Oracle International Corporation | Simulating data definition triggers in a database system |
CN108776710A (zh) * | 2018-06-28 | 2018-11-09 | 农信银资金清算中心有限责任公司 | 一种数据库数据的并发装载方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177484A (zh) * | 2019-12-09 | 2020-05-19 | 贵阳语玩科技有限公司 | 不同数据源及格式字符串资源文件的加载管理系统和方法 |
CN111414135A (zh) * | 2020-03-11 | 2020-07-14 | 国家海洋环境预报中心 | 一种高性能计算机系统的io效率优化方法 |
CN113806593A (zh) * | 2020-06-17 | 2021-12-17 | 新疆金风科技股份有限公司 | 风电场的通信异常检测方法、装置以及场站控制器 |
CN112380413A (zh) * | 2020-11-13 | 2021-02-19 | 平安普惠企业管理有限公司 | 基于Node.js的爬虫方法、装置、计算机设备及存储介质 |
US20230103087A1 (en) * | 2021-09-24 | 2023-03-30 | Sap Se | Cloud plugin for legacy on-premise application |
US11841731B2 (en) * | 2021-09-24 | 2023-12-12 | Sap Se | Cloud plugin for legacy on-premise application |
US11922163B2 (en) | 2021-09-24 | 2024-03-05 | Sap Se | Cloud version management for legacy on-premise application |
US12026496B2 (en) | 2021-09-24 | 2024-07-02 | Sap Se | Cloud upgrade for legacy on-premise application |
CN115174941A (zh) * | 2022-07-06 | 2022-10-11 | 灵羲科技(北京)有限公司 | 基于多路视频流的实时运动表现分析及实时数据共享方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110347440B (zh) | 2022-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110347440A (zh) | 基于多进程并发和插件向数据库快速加载数据方法和系统 | |
US7386577B2 (en) | Dynamic determination of transaction boundaries in workflow systems | |
Liu et al. | Dynamic synthesis for relaxed memory models | |
CN110362617A (zh) | 基于多并发技术从数据库快速导出批量数据方法和系统 | |
Benton et al. | Modern concurrency abstractions for C# | |
US20130227194A1 (en) | Active non-volatile memory post-processing | |
US9323505B2 (en) | Systems and methods for handling database deadlocks induced by database-centric applications | |
CN114116665B (zh) | 数据库中并行写入事务日志以提升处理效率的方法 | |
CN109635024A (zh) | 一种数据迁移方法及系统 | |
Gramoli et al. | On the input acceptance of transactional memory | |
CN111061762A (zh) | 分布式任务处理方法、相关设备、系统及存储介质 | |
CN117270960A (zh) | 一种应用系统架构的分析方法及装置 | |
DE112010004808T5 (de) | Gleichzeitige Ausführung einer Anforderungsverarbeitung und von Analysen von Anforderungen | |
Deng et al. | Testing database transaction concurrency | |
Akram et al. | Approximate lock: Trading off accuracy for performance by skipping critical sections | |
CN116628023B (zh) | 等待事件类型查询方法、装置、存储介质和电子设备 | |
Shalev et al. | Predictive log-synchronization | |
Kordic et al. | An approach to formal verification of python software transactional memory | |
Prinz et al. | Operational semantics of transactions | |
Huang et al. | VODCA: View-oriented, distributed, cluster-based approach to parallel computing | |
Bonetta et al. | Node. scala: Implicit parallel programming for high-performance web services | |
CN113641572B (zh) | 一种基于sql的海量大数据计算开发的调试方法 | |
Alonso | Database replication for enterprise applications | |
Wei et al. | LTPG: Large-Batch Transaction Processing on GPUs with Deterministic Concurrency Control | |
Šuštran et al. | Towards an Improved Implementation of Hardware Transactional Memory on Asymmetric Processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 100102 201, 2 / F, 101, No. 5 building, No. 7 Rongda Road, Chaoyang District, Beijing Patentee after: China Electronics Technology Group Jincang (Beijing) Technology Co.,Ltd. Country or region after: China Address before: 100102 201, 2 / F, 101, No. 5 building, No. 7 Rongda Road, Chaoyang District, Beijing Patentee before: BEIJING KINGBASE INFORMATION TECHNOLOGIES Inc. Country or region before: China |