CN110362617B - 基于多并发技术从数据库快速导出批量数据方法和系统 - Google Patents

基于多并发技术从数据库快速导出批量数据方法和系统 Download PDF

Info

Publication number
CN110362617B
CN110362617B CN201910549011.8A CN201910549011A CN110362617B CN 110362617 B CN110362617 B CN 110362617B CN 201910549011 A CN201910549011 A CN 201910549011A CN 110362617 B CN110362617 B CN 110362617B
Authority
CN
China
Prior art keywords
data
export
module
file
data processing
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.)
Active
Application number
CN201910549011.8A
Other languages
English (en)
Other versions
CN110362617A (zh
Inventor
袁远松
王建华
杜春魁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kingbase Information Technologies Co Ltd
Original Assignee
Beijing Kingbase Information Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Kingbase Information Technologies Co Ltd filed Critical Beijing Kingbase Information Technologies Co Ltd
Priority to CN201910549011.8A priority Critical patent/CN110362617B/zh
Publication of CN110362617A publication Critical patent/CN110362617A/zh
Application granted granted Critical
Publication of CN110362617B publication Critical patent/CN110362617B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了基于多并发技术从数据库快速导出批量数据方法和系统,该系统包括数据导出工具和注册到数据库服务器的数据导出插件,数据导出插件包括一个写文件进程和多个数据处理进程;该方法包括以下步骤:数据导出工具负责读取配置文件连接和调用数据导出插件进行导出工作;所述数据导出插件接收连接的进程为写文件进程,写文件进程创建多个数据处理进程;每个数据处理进程读取对应数据块的数据进行元组解析;将解析后的所述元组转化为目标格式数据后存入共享内存队列;写文件进程遍历所有所述共享内存队列,从中取出目标格式数据后批量写入目标数据文件。本发明有益效果:增强了扩展性,降低了与数据库服务器的耦合性,提高了导出效率。

Description

基于多并发技术从数据库快速导出批量数据方法和系统
技术领域
本发明涉及数据库技术领域,具体来说,涉及一种基于多并发技术从数据库快速导出批量数据方法和系统,适用于批量数据导出。
背景技术
随着计算机技术的飞速发展,数据库的应用也越来越广泛,数据的导入和导出效率是数据库的总体性能的一个非常重要的指标。数据导出主要是将数据库的数据导出成CSV、二进制和文本文件格式,也有将数据导出到EXCEL或者其他数据库中。
目前,从数据库中导出数据的主要技术如下:
一种通过实现一个外部工具连接到数据库,根据设置的数据导出配置,将导出数据存储在内存中并转换为目标格式,最后将其保存为目标文件。例如:申请号为CN201610834990的中国专利申请中就采用该技术,这种导出方式首先要通过数据库的查询接口查询出数据,网络传输给导出工具,然后导出工具再进行格式转换为目标格式,整个导出流程复杂,耗时长,并且整个导出过程为单进程,导致导出的效率极其低下,同时通过该方式在某种情况下,导出数据的数据量也受到限制。
另一种通过关系数据库中自带的函数或者命令的方式导出为目标格式的文件。例如:在开源数据库PostgreSQL中,就可以通过命令Copy To将数据库中的数据导出为CSV、二进制和文本文件格式,该方式在数据库内核中实现,将整个数据导出作为一个大事务,减少了事务的检查,并且将数据按块批量读出,在内存中直接转化为目标格式,然后批量写入目标文件中。整个过程中减少不必要的网络传输和内存拷贝等中间流程,效率相对外部工具来说有所提升,但是,由于整个流程采用单进程的方式实现的,导出的效率还是偏低,并且该方式直接修改数据库内核,会严重依赖数据库的架构。
综上所述,现有的数据库数据导出技术,无法充分利用多核CPU,普遍存在导出效率较低的问题,并且在整个数据导出过程中缺乏精细的异常处理,可靠性较低。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的上述技术问题,本发明提出一种基于多并发技术从数据库快速导出批量数据方法和系统,能够解决导出速度较低或者依赖于数据库的框架,耦合性较高,导出时缺乏相关异常处理,可靠性较低等问题。
为实现上述技术目的,本发明的技术方案是这样实现的:
一种基于多并发技术从数据库快速导出批量数据方法,包括以下步骤:
数据导出工具负责读取配置文件,与所述数据导出插件的写文件进程相连接,并调用所述数据导出插件进行数据导出工作;
每个所述写文件进程接收所述导出工具的连接后创建多个数据处理进程;
每个所述数据处理进程分任务并行读取对应数据块的数据后进行元组解析;
将解析后的所述元组转化为目标格式数据后存储于共享内存队列;
所述写文件进程遍历所有所述共享内存队列,从其取出目标格式数据后写入到目标数据文件。
进一步地,该方法还包括:在写文件进程的初始化函数中获取当前快照并存储,并将保存的快照名传给所述数据处理进程,数据处理进程根据快照名读取相应的快照。
进一步地,该方法还包括:在所述数据处理进程中采用异常捕获机制捕获出错信息进行异常处理,将错误进行分类处理并记入日志。
进一步地,所述数据导出工具包括:
在所述数据导出工具读取命令行参数和解析配置文件;
将解析后的配置信息存储于链表,并将所述链表中的配置选项转化成字符串;
将配置选项作为函数的参数,调用数据导出插件中快速导出函数;
所述数据库服务器根据配置选项导出数据。
进一步地,调用数据导出插件中快速导出函数包括:
将快速导出函数进行参数解析;
创建两个功能模块第一Reader和第一Writer,并调用对应模块的初始化函进行数初始化;
循环判断已导出的条数是否小于限制数,若导出的条数小于所述限制数,则通过所述第一Reader模块获取下一个元组,如果下一个元组不为空,则通过所述第一Writer模块导出元组;否则,若导出的条数超过受限范围或者获取元组为空就结束导出流程;
数据导出完成后,将导出的结果信息通过函数的返回值的形式返回。
本发明的另一方面,提供一种基于多并发技术从数据库快速导出批量数据系统,其特征在于,包括数据导出工具和注册到数据库服务器的数据导出插件,其中,所述数据导出插件包括一个写文件进程和多个数据处理进程,所述数据导出工具与所述写文件进程相连接;
所述数据导出插件接收连接后创建多个数据处理进程。
所述数据导出工具包括:
配置和参数解析模块,用于在所述数据导出工具读取命令行参数和解析配置文件,将解析后的配置信息存储于链表,并将所述链表中的配置选项转化成字符串;
插件调用模块,用于将配置选项作为函数的参数,调用数据导出插件中快速导出函数;
导出结果显示模块,用于所述数据库服务器根据配置选项完成数据导出,并接收和显示导出后的结果信息。
进一步地,所述写文件进程包括:
写文件进程的参数解析模块,用于写文件进程接收数据导出工具调用的函数参数解析;
写文件进程初始化模块:初始化第二READER模块、第二WRITER模块和第二系统,其中,所述第二READER模块和所述第二WRITER模块分别为元组读取模块和写目标数据文件模块;
目标数据读取模块:用于遍历所有所述共享内存队列,从所述共享内存队列中取出目标数据;
写数据文件模块:用于将从目标数据读取模块读取的目标数据直接批量写入目标数据文件中。
进一步地,所述数据处理进程包括:
数据处理进程的参数解析模块,用于所述数据处理进程接受调用的函数参数解析;
数据处理进程的初始化模块:初始化第一READER模块和第一WRITER模块分别为数据文件块读取模块和写共享内存模块,以及内存等系统初始化;
数据处理模块:用于每个所述数据处理进程读取对应数据块的数据进行元组解析,将解析后的所述元组转化为目标格式数据;
存入共享内存模块:将转化后的目标格式数据存入共享内存队列中。
进一步地,该系统还包括异常捕获模块:用于在所述数据处理进程中采用异常捕获机制捕获出错信息进行异常处理,将错误进行分类处理并记入日志。
本发明的有益效果:
1、通过数据导出插件增强了其扩展性,降低了与数据库服务器的耦合性;
2、通过在架构上并行开启多个数据处理进程进行并行处理,通过一个写文件进程直接批量写数据文件的方式,减少中间处理流程,提高了导出的效率,其导出效率是单进程单线程的几倍以上。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例所述的基于多并发技术从数据库快速导出批量数据方法的流程示意图;
图2是根据本发明实施例所述的SYS_BULKEXPORT SERVER中Parser及其子类之间的关系图;
图3是根据本发明实施例所述的SYS_BULKEXPORT SERVER中Writer及其子类之间的关系图;
图4是根据本发明实施例所述的数据导出工具的数据处理流程图;
图5是根据本发明实施例所述的数据导出插件的数据处理流程图;
图6是根据本发明实施例所述的基于多并发技术从数据库快速导出批量数据系统的架构图;
图7是根据本发明实施例所述的数据导出工具的结构示意图;
图8是根据本发明实施例所述的写文件进程的结构示意图;
图9是根据本发明实施例所述的数据处理进程的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
以下以从KingbaseES数据服务器导出CSV文件为例进行阐述。
如图1所示,根据本发明实施例所述的基于多并发技术从数据库快速导出批量数据方法,包括以下步骤:
数据导出工具负责读取配置文件,与所述数据导出插件的写文件进程相连接,并调用所述数据导出插件进行数据导出工作;
每个所述写文件进程接收所述导出工具的连接后创建多个数据处理进程;
每个所述数据处理进程分任务并行读取对应数据块的数据后进行元组解析;
将解析后的所述元组转化为目标格式数据后存储于共享内存队列;
所述写文件进程遍历所有所述共享内存队列,从其取出目标格式数据后写入到目标数据文件。
具体的,将数据导出插件注册到数据库服务器,所述数据导出插件包括写文件进程,所述写文件进程创建多个数据处理进程,其中,将最耗CPU的数据处理流程的元组读取、元组解析和数据转换三个阶段,合并在一个进程处理,该进程后续称之为数据处理进程,整个系统中将开启多个数据处理进程并行处理,数据处理进程的具体个数会根据用户的输入参数来决定,因为该参数严重依赖于运行的硬件设备和环境,从而让用户根据实际运行环境进行相关优化,而依赖IO的写数据文件阶段将由一个单独的进程来处理,后续称之为写文件进程,并且写文件进程只有一个,如果存在多个写文件进程,其相互之间需要同时访问IO,这样写文件进程之间就需要加互斥锁,从而导致资源竞争反而不利于性能提升;其中,优化数据的处理流程,减少不必要的中间处理流程,缩短每条数据的处理时间。借鉴PostgreSQL中的Copy To的处理方式,直接将数据导出流程嵌入内核中,减少由于外部工具需要网络通信和内存拷贝等中间流程,为了其扩展性考虑将数据导出的功能实现在一个插件中并注册到数据库服务器中,所述数据导出插件通过所述写文件进程与数据导出工具相连接;
由于整个数据表的数据在内存中是由于不同的数据块组成的,因此,根据导出表的数据块数平均分配给不同的数据处理进程进行处理,每个所述数据处理进程读取对应数据块的数据进行元组解析;
将解析后的所述元组转化为目标格式数据后存储于共享内存队列;
所述写文件进程遍历数据处理进程的所有所述共享内存队列,从其取出目标格式数据后写入到目标数据文件;每个数据处理进程都有一个共享内存队列与写数据文件进程进行数据交互;当多个数据处理进程会同时去读取数据表的不同数据块,有可能会出现读异常,出现读取数据不一致性,通过让各个数据处理进程同时去读取一个相同的历史快照的技术,从而确保在导出过程中数据一致性。
数据快速导出工具整体架构可采用插件的方式注册到数据库系统中,增强其可扩展性,整个数据导出系统分为两部分,一部分为数据导出工具,是一个单独可执行文件,后续称之为SYS_BULKEXPORT CLIENT;另外一部分为数据导出插件,通过注册到数据库服务器中,后续称之为SYS_BULKEXPORTSERVER。
SYS_BULKEXPORT CLIENT主要功能:
解析客户端参数和读取配置文件,并负责调用服务器数据快速导出函数SYS_BULKEXPORT,进行数据导出;
接收服务器数据导出的结果信息并显示。
SYS_BULKEXPORT SERVER的主要功能:
接收客户端连接和提供快速导出函数接口给客户端调用;
通过读取数据库服务器的元组数据并解析,然后将其转化为目标格式的数据,最后将其写入目标文件中,完成数据的导出功能;
统计导出的结果信息,并发送给客户端。
在整个SYS_BULKEXPORT SERVER中由一个写CSV文件进程和多个数据处理进程共同组成,数据处理进程的个数由用户通过配置参数进行指定,每个SYS_BULKEXPORT SERVER插件主要包括两个功能模块第一Reader模块和第一Writer模块,第一Reader模块主要由解析模块Parser和数据校验模块Checker组成,会根据进程的具体不同功能启动不同的具体Parser模块和第一Writer模块,主要功能模块的功能如下:TupleParser模块的主要功能是创建多个数据处理进程和从共享内存中读取转化后的元组信息;DBParser模块的主要功能读取数据表中的数据,解析元组,并转化为CSV格式的数据,Parser及其子类之间的关系图如图2所示;CSVWriter模块的主要功能是将CSV格式的数据写到CSV文件中;ParallelWriter模块的作用就是将CSV格式的数据写入共享内存中,Writer及其子类之间的关系图如图3所示。
写CSV文件进程进行读取CSV格式数据和写CSV文件的具体功能模块为TupleParser模块和CSVWriter模块。在TupleParser模块中的初始化函数中会根据配置参数processor_count的个数创建多个数据处理进程及其进程交互的共享内存;首先,TupleParser模块通过模拟成客户端与自身建立连接的方式创建进程,数据库服务器会专门启动一个进程与之相连;接着,TupleParser模块再调用SYS_BULKEXPORT函数让数据处理进程也进入SYS_BULKEXPORT的函数中处理,通过采用这种方式启动多个数据处理进程。TupleParser模块首先会计算需要读取数据的总块数,用符号S表示;将每个数据处理进程进行编号,用id标识,每个进程编号为0,1,……n-1,这样每个进程至少应该读取的块数为:S/n取整,用[S/n]标识,然后将剩余未处理的块数为S–[S/n]*n平均分配到进程id小于S%n的进程中,这些进程的每个进程将多处理一块数据,因此,每个进程需要处理数据的块数Countid为:
Figure BDA0002104855620000081
每个进程需要处理的开始块数StartIDid为:
Figure BDA0002104855620000082
/>
例如:需要导出的数据表中有1697块数据,分为5个进程去导出,则将其分为5个进程读取:[1697/5]=339,因此,每个进程至少需要处理339块数据,但是,还剩1697-339*5=2块数据未处理,这样id为0和1的前2个进程每个进程需要多处理1块数据,最终,5个进程分别需要处理的数据块数为340,340,339,339,339块,处理数据的开始位置为0,340,680,1019,1358,将每个数据处理进程需要处理的行数的偏移量StartID和需要处理的行数Count分别作为调用SYS_BULKEXPORT函数的Offset和Limit的参数形式传送给数据处理进程,所以,采用多并发技术提高数据的处理并行性,提高数据导出的效率。
写CSV文件进程通过TupleParser中的ParserRead函数遍历所有的共享内存队列读取CSV格式的数据;然后通过CSVWriter的writer_insert函数将CSV格式的数据直接写入数据文件CSV中;最后通过将整个文件的导出信息作为SYS_BULKEXPORT函数的返回值返回给客户端。
数据处理进程的总体执行流程图也如图5所示:只是其实际进行数据处理和写数据的具体功能模块为DBParser模块和ParallelWriter模块。在数据处理进程中的DBParser模块的ParserRead函数会按照接收到的Offset和Limit的参数,分别读取数据表中的不同数据块的内容,然后进行元组解析,并将其转化为CSV文件格式;然后通过ParallelWriter模块的writer_insert函数将CSV数据写入共享内存中,等待写文件进程的TupleParser模块进行遍历读取;最后,处理完所有数据,将该数据处理进程的处理结果以函数返回值的形式返回给写CSV进程,写CSV进程接收完各个数据处理进程处理的结果汇总作为数据导出的处理结果返回给客户端。
在本发明的一个具体实施例中,为了保证多个数据处理进程读取的数据一致性,该方法还包括:在写文件进程的初始化函数中获取当前快照并存储,并将保存的快照名传给所述数据处理进程,数据处理进程根据快照名读取相应的快照,保证每个数据处理进程读取的数据一致性。
具体的,在TupleParser模块中的初始化函数中获取当前快照并保存,然后等创建完多个数据处理进程结束后,设置每个数据处理进程读取的快照为保存的快照名,这样让各个数据处理进程都是处理的同一个快照。
在本发明的一个具体实施例中,为了提高数据库的数据导出的可靠性,该方法还包括:对于导出的过程中在所述数据处理进程中采用异常捕获机制捕获出错信息进行异常处理,将错误进行分类处理并记入日志,在导出过程中将错误分类:一种由于影响系统整体导出流程的严重错误,比如配置不合法等,直接报错提示并记入日志文件中,然后终止导出流程;另外一种错误对导出整体流程影响较小,比如某条数据转化为目标格式失败等,这种错误只影响单条数据导出,不影响整体流程,对于这类错误记录在配置中指定的配置的错误日志文件中,并可根据配置指定出错条数,提前终止导出流程。
在本发明的一个具体实施例中,所述数据导出工具包括:
在所述数据导出工具读取命令行参数和解析配置文件;
将解析后的配置信息存储于链表,并将所述链表中的配置选项转化成字符串;
将配置选项作为函数的参数,调用数据导出插件中快速导出函数;
所述数据库服务器根据配置选项导出数据。
具体的,SYS_BULKEXPORT CLIENT的执行流程图如图4所示:首先,SYS_BULKEXPORTCLIENT读取命令行参数和解析配置文件,将解析后的配置信息统一放入一个链表中,并将该链表中的配置选项转化成一个字符串,以逗号作为各个参数选项的分隔符;然后,将配置选项作为函数的参数,调用插件SYS_BULKEXPORT提供的SYS_BULKEXPORT函数;最后,服务器根据配置选项完成数据导出,并将导出的结果信息返回给客户端,客户端接收后显示。
在本发明的一个具体实施例中,调用数据导出插件中快速导出函数包括:
将快速导出函数进行参数解析;
创建两个功能模块第一Reader模块和第一Writer模块,并调用对应模块的初始化函进行数初始化;
循环判断已导出的条数是否小于限制数,若导出的条数小于所述限制数,则通过所述第一Reader模块获取下一个元组,如果下一个元组不为空,则通过所述第一Writer模块导出元组;否则,若导出的条数超过受限范围或者获取元组为空就结束导出流程;
数据导出完成后,将导出的结果信息通过函数的返回值的形式返回。
具体的,当SYS_BULKEXPORT CLIENT连接到数据库服务器时,数据库服务器会专门启动一个进程与之相连,并负责处理相关的业务逻辑,这个进程为写CSV文件进程,当服务器接收到客户端调用SYS_BULKEXPORT函数请求时,会调用SYS_BULKEXPORT插件中的SYS_BULKEXPORT函数。SYS_BULKEXPORT函数的执行流程图如图5所示,主要流程如下:
首先,将SYS_BULKEXPORT函数会进行参数解析;
其次,在初始化时会创建两个功能模块第一Reader模块和第一Writer模块,并调用对应模块的初始化函数完成初始化工作;
接着,判断已写入的条数是否超过最大写入条数的限制或者写入条数不受限制,最大限制写入条数通过参数Limit指定的,为0表示不限制,如果写入的条数在受限范围内或者不受限制,则会获取下一个元组,如果下一个元组不为空,写入元组,然后继续循环判断写入元组的数量是否已达到受限数量或者不受限制,否则,超过受限范围或者获取元组为空就结束写入流程;
最后,将处理结果返回客户端,并释放资源。
如图6所示,本发明的另一方面,提供一种基于多并发技术从数据库快速导出批量数据系统,包括数据导出工具和注册到数据库服务器的数据导出插件,其中,所述数据导出插件包括一个写文件进程和多个数据处理进程,所述数据导出工具与所述写文件进程相连接;
所述数据导出插件接收连接后创建多个数据处理进程。
如图7所示,在本发明的一个具体实施例中,所述数据导出工具包括:
配置和参数解析模块,用于在所述数据导出工具读取命令行参数和解析配置文件,将解析后的配置信息存储于链表,并将所述链表中的配置选项转化成字符串;
插件调用模块,用于将配置选项作为函数的参数,调用数据导出插件中快速导出函数;
导出结果显示模块,用于所述数据库服务器根据配置选项完成数据导出,并接收和显示导出后的结果信息。。
如图8所示,在本发明的一个具体实施例中,所述写文件进程包括:
写文件进程的参数解析模块,用于写文件进程接收数据导出工具调用的函数参数解析;
写文件进程初始化模块:初始化第二READER模块、第二WRITER模块和第二系统,其中,第二READER模块和第二WRITER模块分别为元组读取模块和写目标数据文件模块;第二系统包括内存等;
目标数据读取模块:用于遍历所有所述共享内存队列,从所述共享内存队列中取出目标数据;
写数据文件模块:用于将从目标数据读取模块读取的目标数据直接批量写入目标数据文件中。
具体的,写CSV文件进程通过TupleParser模块中的ParserRead函数遍历所有的共享内存队列读取CSV格式的数据;然后通过CSVWriter模块的writer_insert函数将CSV格式的数据直接写入数据文件CSV中;最后通过将整个文件的导出信息作为SYS_BULKEXPORT函数的返回值返回给客户端。
如图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模块和第二系统,其中,所述第二READER模块和所述第二WRITER模块分别为元组读取模块和写目标数据文件模块;
目标数据读取模块:用于遍历所有共享内存队列,从所述共享内存队列中取出目标数据;
写数据文件模块:用于将从目标数据读取模块读取的目标数据直接批量写入目标数据文件中。
9.根据权利要求6所述的基于多并发技术从数据库快速导出批量数据系统,其特征在于,所述数据处理进程包括:
数据处理进程的参数解析模块,用于所述数据处理进程接受调用的函数参数解析;
数据处理进程的初始化模块:初始化第一READER模块、第一WRITER模块和第一系统,其中,所述第一READER模块和第一WRITER模块分别为数据文件块读取模块和写共享内存模块;
数据处理模块:用于每个所述数据处理进程读取对应数据块的数据进行元组解析,将解析后的所述元组转化为目标格式数据;
存入共享内存模块:将转化后的目标格式数据存入共享内存队列中。
10.根据权利要求6-9任一项所述的基于多并发技术从数据库快速导出批量数据系统,其特征在于,该系统还包括异常捕获模块,用于在所述数据处理进程中采用异常捕获机制捕获出错信息进行异常处理,将所述出错信息进行分类处理并记入日志。
CN201910549011.8A 2019-06-24 2019-06-24 基于多并发技术从数据库快速导出批量数据方法和系统 Active CN110362617B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910549011.8A CN110362617B (zh) 2019-06-24 2019-06-24 基于多并发技术从数据库快速导出批量数据方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910549011.8A CN110362617B (zh) 2019-06-24 2019-06-24 基于多并发技术从数据库快速导出批量数据方法和系统

Publications (2)

Publication Number Publication Date
CN110362617A CN110362617A (zh) 2019-10-22
CN110362617B true CN110362617B (zh) 2023-06-13

Family

ID=68216808

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910549011.8A Active CN110362617B (zh) 2019-06-24 2019-06-24 基于多并发技术从数据库快速导出批量数据方法和系统

Country Status (1)

Country Link
CN (1) CN110362617B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110650347B (zh) * 2019-10-24 2022-07-01 腾讯云计算(北京)有限责任公司 多媒体数据的处理方法及装置
CN111292040B (zh) * 2020-02-18 2023-07-11 上海东普信息科技有限公司 快件代签收信息接入方法、系统及存储介质
CN111291033B (zh) * 2020-03-11 2023-03-17 上海东普信息科技有限公司 快件数据清洗方法、装置、设备及存储介质
CN111694811B (zh) * 2020-04-01 2022-08-30 新华三大数据技术有限公司 一种批量数据入库方法及装置
CN113157784B (zh) * 2020-12-30 2023-02-21 浪潮云信息技术股份公司 一种数据库数据导出工具的插件化实现方法
CN112732816B (zh) * 2021-01-09 2022-08-02 苏州浪潮智能科技有限公司 一种数据导出方法和系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101515291A (zh) * 2009-03-26 2009-08-26 北京泰合佳通信息技术有限公司 一种将数据批量导入数据库的方法及系统
CN103500196A (zh) * 2013-09-22 2014-01-08 成都交大光芒科技股份有限公司 多并发大数据量环境下excel数据导出方法及其导出装置
US8782101B1 (en) * 2012-01-20 2014-07-15 Google Inc. Transferring data across different database platforms
CN106682036A (zh) * 2015-11-11 2017-05-17 上海汽车集团股份有限公司 一种数据交换系统及其交换方法
CN107844498A (zh) * 2016-09-20 2018-03-27 天脉聚源(北京)科技有限公司 一种数据库大批量导出数据的方法和系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101930472A (zh) * 2010-09-09 2010-12-29 南京中兴特种软件有限责任公司 一种支持分布式数据库基于并行查询的方法
US10089374B2 (en) * 2012-05-24 2018-10-02 Telefonaktiebolaget Lm Ericsson (Publ) Meta model driven data base replication and synchronization
CN103049533A (zh) * 2012-12-23 2013-04-17 北京人大金仓信息技术股份有限公司 一种快速向数据库加载数据的方法
CN104376082B (zh) * 2014-11-18 2019-06-18 中国建设银行股份有限公司 一种把数据源文件中的数据导入到数据库中的方法
CN104461876B (zh) * 2014-11-26 2017-09-22 北京航空航天大学 一种基于运行快照序列的并行程序重现调试方法
CN107368362B (zh) * 2017-06-29 2020-10-30 上海阅文信息技术有限公司 一种对于磁盘读写数据的多线程/多进程无锁处理方法及系统
CN107818009A (zh) * 2017-10-17 2018-03-20 北京人大金仓信息技术股份有限公司 一种基于分布式事务的代理处理的方法
CN108776710B (zh) * 2018-06-28 2020-06-30 农信银资金清算中心有限责任公司 一种数据库数据的并发装载方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101515291A (zh) * 2009-03-26 2009-08-26 北京泰合佳通信息技术有限公司 一种将数据批量导入数据库的方法及系统
US8782101B1 (en) * 2012-01-20 2014-07-15 Google Inc. Transferring data across different database platforms
CN103500196A (zh) * 2013-09-22 2014-01-08 成都交大光芒科技股份有限公司 多并发大数据量环境下excel数据导出方法及其导出装置
CN106682036A (zh) * 2015-11-11 2017-05-17 上海汽车集团股份有限公司 一种数据交换系统及其交换方法
CN107844498A (zh) * 2016-09-20 2018-03-27 天脉聚源(北京)科技有限公司 一种数据库大批量导出数据的方法和系统

Also Published As

Publication number Publication date
CN110362617A (zh) 2019-10-22

Similar Documents

Publication Publication Date Title
CN110362617B (zh) 基于多并发技术从数据库快速导出批量数据方法和系统
CN110347440B (zh) 基于多进程并发和插件向数据库快速加载数据方法和系统
CN107506451B (zh) 用于数据交互的异常信息监控方法及装置
CN108536761A (zh) 报表数据查询方法及服务器
CN106897322B (zh) 一种数据库和文件系统的访问方法和装置
CN101719149B (zh) 数据同步方法及装置
US8631039B2 (en) Normalizing data for fast superscalar processing
CN109284269A (zh) 异常日志分析方法、装置、存储介质及服务器
US20160140205A1 (en) Queries involving multiple databases and execution engines
CN111324610A (zh) 一种数据同步的方法及装置
CN109947804B (zh) 数据集合查询的优化方法、装置、服务器和存储介质
US20210373945A1 (en) Method and device for processing distributed data solving problem of manual intervention by data analysts
CN112364145A (zh) 一种工单处理方法、装置、电子设备及存储介质
CN110471912B (zh) 一种员工属性信息校验方法、装置及终端设备
CN113962597A (zh) 一种数据分析方法、装置、电子设备及存储介质
US8229946B1 (en) Business rules application parallel processing system
US7231334B2 (en) Coupler interface for facilitating distributed simulation of a partitioned logic design
CN110827001A (zh) 一种会计事件记账方法、系统、设备和存储介质
CN106528718B (zh) 用于处理来自第三方的数据的方法及装置
CN115757481A (zh) 数据迁移方法、装置、设备和存储介质
CN114217790A (zh) 接口编排调度方法、装置、电子设备及介质
CN113886205A (zh) 数据库性能瓶颈定位分析方法、装置、系统及存储介质
US11074069B2 (en) Replaying interactions with transactional and database environments with re-arrangement
CN113239064A (zh) 一种数据库更新方法、装置、电子设备及存储介质
CN114625546A (zh) 一种数据处理方法及装置

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