CN112100245B - 数据导出方法、装置、电子设备和存储介质 - Google Patents
数据导出方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112100245B CN112100245B CN202010990293.8A CN202010990293A CN112100245B CN 112100245 B CN112100245 B CN 112100245B CN 202010990293 A CN202010990293 A CN 202010990293A CN 112100245 B CN112100245 B CN 112100245B
- Authority
- CN
- China
- Prior art keywords
- data
- export
- database
- pagenum
- acquiring
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 230000001174 ascending effect Effects 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 6
- 238000013500 data storage Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 3
- 238000004891 communication Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 5
- 238000001914 filtration Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012163 sequencing technique 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/258—Data format conversion from or to a database
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例涉及通信领域,公开了一种数据导出方法、装置、电子设备和存储介质。数据导出方法包括:获取对数据库进行数据导出时需要生成的导出文件数量F;获取进行所述数据导出工作的硬件设备可用线程数量P;采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据导出任务导出的数据,生成F个导出文件。应用在mongoDB中,实现快速数据导出。
Description
技术领域
本发明实施例涉及通信领域,特别涉及一种数据导出方法、装置、电子设备和存储介质。
背景技术
MongoDB是一种由C++语言编写的基于分布式文件存储的开源数据库***。在现有技术中,当需要对MongoDB进行数据导出时,首先,获取数据导出需要生成的新文件个数,然后,从MongoDB导出数据,按照队列的方式依次生成每个新文件。具体地,生成每个新文件的方法可以包括:首先,采用分页查询命令从MongoDB中查询数据,然后,将查询到的数据根据自定义的规则组装成结果数据,最后,将结果数据写入到对应的新文件中。
然而,在实现本发明实施例的过程中,发明人发现:当MongoDB中待导出的数据量较大时,现有技术从MongoDB导出数据,按照队列的方式依次生成每个新文件的方法效率较低,数据导出速度较慢。
发明内容
本发明实施方式的目的在于提供一种数据导出方法、装置、电子设备和存储介质,能够提高数据导出速度。
为解决上述技术问题,本发明的实施方式提供了一种数据导出方法,包括:获取对数据库进行数据导出时需要生成的导出文件数量F;获取进行所述数据导出工作的硬件设备可用线程数量P;采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据导出任务导出的数据,生成F个导出文件;其中,采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,包括:在采用单个可用线程对所述数据库执行单个数据导出任务时,若执行所述单个数据导出任务查询到的数据总量大于单个所述导出文件的数据最大存储量,则从所述查询到的数据总量中,按照查询时间由先至后的顺序导出所述预定数据存储量的数据,作为执行所述单个数据导出任务导出的数据。
本发明的实施方式还提供了一种数据导出装置,包括:
第一获取模块,用于获取对数据库进行数据导出时需要生成的导出文件数量F;
第二获取模块,用于获取进行所述数据导出工作的硬件设备可用线程数量P;
生成模块,用于采用所述第二获取模块获取的所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据导出任务导出的数据,生成F个导出文件;其中,采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,包括:在采用单个可用线程对所述数据库执行单个数据导出任务时,若执行所述单个数据导出任务查询到的数据总量大于单个所述导出文件的数据最大存储量,则从所述查询到的数据总量中,按照查询时间由先至后的顺序导出所述预定数据存储量的数据,作为执行所述单个数据导出任务导出的数据。
本发明的实施方式还提供了一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行以上所述的数据导出方法。
本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以上所述的数据导出方法。
本发明实施方式相对于现有技术而言,可以获取进行数据导出工作的硬件设备的可用线程数P,通过P个可用线程同时并行对数据库进行数据导出,对于F个需要完成的导出文件而言,同时通过P个可用线程并行循环进行操作,大大提高了数据导出速度,解决了现有技术需要按照队列的形式依次从数据库中完成对每个导出文件的数据导出工作速度慢的问题。
另外,本发明实施方式提供的数据导出方法,在所述采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据到处任务的数据,生成F个导出文件钟,生成每个所述导出文件的方法,包括:根据所述数据库自带的主键id和所述数据库中单个分页包含的数据pageData,生成每个所述导出文件。
另外,本发明实施方式提供的数据导出方法,所述根据所述数据库自带的主键id和所述数据库中单个分页包含的数据pageData,生成每个所述导出文件包括:获取所述导出文件中的起始数据在所述数据库中的分页页码pageNum;对所述数据库进行id升序排序,按照分页查询方法,从id升序排序后的pageNum中获取待导出数据pageData1,其中,id为所述数据库中数据的序列号;根据所述pageData1获取已查询出的待导出数据个数foundCount;如果foundCount大于等于所述导出文件的总行数L,从所述pageData1获取目标导出数据;根据所述目标导出数据生成所述导出文件。本发明实施方式相对于现有技术而言,只需要获取导出文件中的起始数据在数据库中的分页页码pageNum,并对数据库进行id升序排序,即可以通过数据库的分页查询方法获取pageNum中的待导出数据pageData1,不需要设置复杂的业务过滤条件;并且,由于只查询了pageNum中的待导出数据pageData1使得查询数据的量非常小,提高了数据查询速度;并且,只需要根据已查询出的待导出数据个数foundCount与L的关系,即可以判断出导出数据的操作是否全部完成,如果foundCount大于等于L,表示pageData1中包含了全部L行数据,则从pageData1中获取目标导出数据,根据目标导出数据生成所述导出文件,该数据导出方法的逻辑简单,不需要设置复杂的逻辑运算。
另外,本发明实施方式提供的数据导出方法,所述根据所述pageData1获取已查询出的待导出数据个数foundCount之后,所述根据所述目标导出数据生成所述导出文件之前,还包括:
如果foundCount小于所述L,获取所述pageNum中最后一行数据的序列号ID;以所述id大于所述ID为查询条件,按照所述条件查询方法,从pageNum+1中获取待导出数据pageData2;更新所述pageNum=pageNum+1;根据所述pageData1和所述pageData2更新所述foundCount;如果更新后的foundCount大于等于所述L,从所述pageData1和pageData2获取目标导出数据;如果更新后的foundCount小于所述L,循环执行所述获取所述pageNum中最后一行数据的序列号ID,以所述id大于所述ID为查询条件,按照所述分页查询方法,从pageNum+1中获取待导出数据pageData2,更新所述pageNum=pageNum+1,根据所述pageData1和所述pageData2更新所述foundCount的步骤。本发明实施方式相对于现有技术而言,如果foundCount小于L,则后续查询可以以id大于ID为查询条件,按照分页查询方法,从pageNum+1中获取待导出数据pageData2,由于id是数据库中数据的序列号,是数据库自带的主键,因此可以通过以id大于ID这一条件迅速定位到本次分页查询的开始位置,相较于传统方法需要扫描大量无效数据而言,本实施方式提供的技术方案所查询的均为有效数据,因此进一步提升了数据导出速度。并且,本发明实施方式提供的技术方案,只要判断出更新后的foundCount小于L,均可以以id大于ID为查询条件,按照数据库的分页查询方法查询数据库中后续分页页码包含的数据,查询条件简单,易于实现。
另外,本实施方式提供的数据导出装置,所述生成模块,由P个生成子模块组成,每个所述生成子模块,具体用于根据所述数据库自带的主键id和所述数据库中单个分页包含的数据pageData,生成每个所述导出文件。
另外,本实施方式提供的数据导出装置,所述生成子模块包括:
第一获取单元,用于获取所述导出文件中的起始数据在所述数据库中的分页页码pageNum;
第二获取单元,用于对所述数据库进行id升序排序,按照分页查询方法,从id升序排序后的pageNum中获取待导出数据pageData1,其中,id为所述数据库中数据的序列号;
第三获取单元,用于根据所述第二获取单元获取的所述pageData1获取已查询出的待导出数据个数foundCount;
第四获取单元,用于如果所述第三获取单元获取的foundCount大于等于所述导出文件的总行数L,从所述pageData1获取目标导出数据;
生成单元,用于根据所述第三获取单元获取的所述目标导出数据生成所述导出文件。
另外,本实施方式提供的数据导出装置,所述生成子模块还包括:
第五获取单元,用于如果第三获取单元获取的所述foundCount小于所述L,获取所述第一获取单元获取的所述pageNum中最后一行数据的序列号ID;
第六获取单元,用于以所述id大于所述第五获取单元获取的所述ID为查询条件,按照所述条件查询方法,从pageNum+1中获取待导出数据pageData2;
第一更新单元,用于更新所述第一获取单元获取的pageNum=pageNum+1;
第二更新单元,用于根据所述第二获取单元获取的所述pageData1和所述第六获取单元获取的所述pageData2更新所述第三获取单元获取的所述foundCount;
所述第四获取单元,还用于如果所述第二更新单元更新后的foundCount大于等于所述L,从所述第二获取单元获取的所述pageData1和所述第六获取单元获取的所述pageData2获取目标导出数据;
循环单元,用于如果所述第二更新单元更新后的foundCount小于所述L,循环执行所述第五获取单元、第六获取单元、第一更新单元和第二更新单元。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本发明的第一实施方式提供的数据导出方法流程图;
图2是本发明的第二实施方式提供的数据导出方法流程图;
图3是图2所示的本发明的第二实施方式提供的数据导出方法中生成每个导出文件的方法的流程图一;
图4是图2所示的本发明的第二实施方式提供的数据导出方法中生成每个导出文件的方法的流程图二;
图5是本发明的第三实施方式提供的数据导出装置的结构示意图;
图6是图5所示的本发明的第三实施方式提供的数据导出装置中述第二获取模块502的结构示意图;
图7是图5所示的本发明的第三实施方式提供的数据导出装置中生成子模块组成5031的结构示意图一;
图8是图5所示的本发明的第三实施方式提供的数据导出装置中生成子模块组成5031的结构示意图二;
图9是本发明的第三实施方式提供的电子设备结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
本发明的第一实施方式涉及一种数据导出方法,其流程如图1所示,包括:
步骤101,获取对数据库进行数据导出时需要生成的导出文件数量F。
步骤102,获取进行数据导出工作的硬件设备可用线程数量P。
步骤103,采用P个可用线程并行对数据库执行至少两个数据导出任务,基于对数据库执行数据导出任务导出的数据,生成F个导出文件;
其中,采用P个可用线程并行对数据库执行至少两个数据导出任务,包括:
在采用单个可用线程对数据库执行单个数据导出任务时,若执行单个数据导出任务查询到的数据总量大于单个导出文件的数据最大存储量,则从查询到的数据总量中,按照查询时间由先至后的顺序导出预定数据存储量的数据,作为执行单个数据导出任务导出的数据。
本发明实施方式相对于现有技术而言,可以获取进行数据导出工作的硬件设备的可用线程数P,通过P个可用线程同时并行对数据库进行数据导出,对于F个需要完成的导出文件而言,同时通过P个可用线程并行循环进行操作,大大提高了数据导出速度,解决了现有技术需要按照队列的形式依次从数据库中完成对每个导出文件的数据导出工作速度慢的问题。
本发明的第二实施方式涉及一种数据导出方法,其流程如图2所示,包括:
步骤201,获取对数据库进行数据导出时需要生成的导出文件数量F。
具体地,步骤201可以首先获取每个导出文件包含的行数L,在本实施方式中,每个导出文件包含的行数相同,均为L;然后,获取数据库中数据的总行数N,计算N/L的结果向上取整获得F。
进一步地,在本实施方式中,L不仅可以直接指定,还可以根据预先设置的导出文件大小,通过经验转换获得。
步骤202,获取进行数据导出工作的硬件设备可用CPU核数P1。
在本实施方式中,硬件设备可用CPU核数P1可以为CPU的实际核数,为了确保硬件设备上的其他业务能够正常进行,P1也可以为CPU实际核数的一部分,具体的可以通过如下公式(1)获得:
P1=n*p (1)
其中,p为CPU实际核数,n为可用系数,n∈(0,1),例如在本实施方式中n=0.6。
步骤203,根据F和P1,获取进行数据导出工作的硬件设备线程数量P。
在本实施方式中,步骤203具体可以取F和P1中值小的一个作为P,即:如果F>P1,则P=P1,如果F<P1,则P=F。本实施方式以F>P1,P=P1为例进行说明。
步骤204,采用P个可用线程并行对数据库执行至少两个数据导出任务,基于对数据库执行数据导出任务导出的数据,生成F个导出文件。
在本实施方式中,步骤203可以通过P个可用线程并行循环执行F个任务,具体地,可以根据P创建定长线程池,在Java程序中,可以通过ExecutorService executor=Executors.newFixedThreadPool(P)创建。
具体地,在本实施方式中,步骤204可以根据数据库自带的主键id和数据库中单个分页包含的数据pageData,生成每个所述导出文件。
进一步地,在本实施方式中,步骤204生成的F个导出文件具体可以为T1,T2,……,TF,为了使本领域技术人员能够更清楚地理解步骤204生成每个导出文件的方法,下面以生成导出文件T2为例进行,如图3所示,包括如下步骤:
步骤301,获取导出文件中的起始数据在数据库中的分页页码pageNum。
在本实施方式中,步骤301具体可以通过如下程序获取pageNum:
int pageNum=(int)((taskSeq-1)*L/pageSize+1)
其中,int表示取整数;taskSeq为导出文件的序号,在本实施方式中,导出文件为T2,故taskSeq=2;L为T2的行数;pageSize为数据库中每个分页包含的数据行数。
步骤302,对数据库进行id升序排序,按照分页查询方法,从id升序排序后的pageNum中获取待导出数据pageData1,其中,id为数据库中数据的序列号。
在本实施方式中,步骤302具体可以通过如下程序(2)完成id升序排序:
query.with(new Sort(new Order(Direction.ASC,"_id"))) (2)
步骤302具体可以通过如下程序(3)完成分页查询,获取pageData1:
query.skip((pageNum-1)*pageSize).limit(pageSize) (3)
其中,skip((pageNum-1)*pageSize)表示在数据库中跳过(pageNum-1)*pageSize行数据,limit(pageSize)表示在数据库中读取pageSize行数据。
通过以上程序(3)可知,pageData1具体为数据库中跳过(pageNum-1)*pageSize行数据后,连续读取的pageSize行数据。
步骤303,根据pageData1获取已查询出的待导出数据个数foundCount。
在本实施方式中,foundCount初始值0。在步骤302获取pageData1后,foundCount=pageSize。
步骤304,如果foundCount≥L,从pageData1获取目标导出数据。
具体地,首先,获取T2起始数据在数据库中的序列号IDstar,其中,IDstar=(taskSeq-1)*L+1;然后,获取T2第L个数据在数据库中的序列号IDend,其中,IDend=taskSeq*L;最后,通过如下程序(4)从pageData1获取目标导出数据:
pageData= pageData1.subList(IDstar,IDend) (4)
其中,pageData为目标导出数据。
步骤305,根据目标导出数据生成导出文件。
本实施方式不对生成导出文件的具体方式进行限定,在实际的使用过程中,步骤305可以通过任意一种自定义方式对目标导出数据进行操作,生成导出文件,此处不做一一赘述。
为了使本领域技术人员能够更清楚地理解发明实施方式提供的技术方案,下面以导出文件为T2,L=5,pageSize=17为例,对如图3所示的步骤进行具体说明:
首先,通过步骤301获取pageNum:
int pageNum=(int)((taskSeq-1)*L/pageSize+1)
int pageNum=(int)((2-1)*5/17+1)
int pageNum=(int)(1.29)
pageNum=1
其次,通过步骤302获取pageData1:
query.skip((pageNum-1)*pageSize).limit(pageSize)
query.skip((1-1)*17).limit(17)
query.skip(0).limit(17)
即:pageData1为数据库中第一页中的17个数据。
第三,通过步骤303获取foundCount
在本实施方式中,由于pageData1为数据库中第一页中的17个数据,所以foundCount=17。
第四,由于foundCount=17,L=5,故foundCount>L,根据步骤304pageData1获取目标导出数据pageData,具体地,IDstar=(taskSeq-1)*L+1=(2-1)*5+1=6,IDend=taskSeq*L=2*5=10,此时,pageData=pageData1.subList(IDstar,IDend)=pageData1.subList(6,10),即pageData为数据库中第一个分页的6-10行数据。
第五,根据步骤305获得导出文件。其中,T2包含数据库中第一个分页的6-10行数据。
图3所示的技术方案相对于现有技术而言,只需要获取导出文件中的起始数据在数据库中的分页页码pageNum,并对数据库进行id升序排序,即可以通过数据库的分页查询方法获取pageNum中的待导出数据pageData1,不需要设置复杂的业务过滤条件;并且,由于只查询了pageNum中的待导出数据pageData1使得查询数据的量非常小,提高了数据查询速度;并且,只需要根据已查询出的待导出数据个数foundCount与L的关系,即可以判断出导出数据的操作是否全部完成,如果foundCount大于等于L,表示pageData1中包含了全部L行数据,则从pageData1中获取目标导出数据,根据目标导出数据生成所述导出文件,该数据导出方法的逻辑简单,不需要设置复杂的逻辑运算。
进一步地,如图4所示,步骤303之后,步骤305之前,还可以包括:
步骤306,如果foundCount<L,获取pageNum中最后一行数据的序列号ID。
步骤307,以id>ID为查询条件,按照条件查询方法,从pageNum+1中获取待导出数据pageData2。
具体地,步骤307可以通过如下程序(5)获取pageData2
find({"_id":{$gt:ID}}).limit(pageSize) (5)
通过以上程序(5)可知,pageData2为pageNum+1包含的pageSize行数据。
步骤308,更新pageNum=pageNum+1。
步骤309,根据pageData1和pageData2更新foundCount。
具体的,步骤309可以通过如下公式(6)获取foundCount:
foundCount= pageData1+ pageData2-L%pageSize (6)
=pageSize+pageSize-L%pageSize
=2*pageSize-L%pageSize
其中,L%pageSize表示L除以pageSize取余数。
步骤310,如果更新后的foundCount≥L,从pageData1和pageData2获取目标导出数据。
具体地,首先,获取T2起始数据在数据库中的序列号IDstar,其中,IDstar=(taskSeq-1)*L+1;然后,pageData1=pageData1.subList(IDstar,ID);第三,获取T2在pageNum+1中的截至序列号endIndex=pageSize-(foundCount-L);第四,pageData2=pageData2.subList(0,endIndex);第五,目标导出数据pageData=pageData1+pageData2。
步骤311,如果更新后的foundCount<L,循环执行步骤306-309。
为了使本领域技术人员能够更清楚地理解发明实施方式提供的技术方案,下面以导出文件为T2,L=14,pageSize=6为例,对如图4所示的步骤进行具体说明:
首先,通过步骤301获取pageNum:
int pageNum=(int)((taskSeq-1)*L/pageSize+1)
int pageNum=(int)((2-1)*14/6+1)
int pageNum=(int)(3.33)
pageNum=3
其次,通过步骤302获取pageData1:
query.skip((pageNum-1)*pageSize).limit(pageSize)
query.skip((3-1)*6).limit(6)
query.skip(12).limit(6)
即:pageData1为数据库中第三页中的6个数据。
第三,通过步骤303获取foundCount=6。
第四,由于foundCount=6,L=14,故oundCount<L,根据步骤306,获取pageNum=3中最后一行数据的序列号ID=18。
第五,根据步骤307以id>ID为查询条件,按照分页查询方法,从pageNum+1中获取待导出数据pageData2:find({"_id":{$gt:18}}).limit(6)。
第六,根据步骤308更新pageNum=pageNum+1=3+1=4。
第七,根据步骤309更新foundCount。
foundCount=2*pageSize-L%pageSize=2*6-14%6=12-2=10
第八,由于更新后的foundCount=10,L=12,故foundCount<L,通过步骤306获取pageNum=4中最后一行数据的序列号ID=24;根据步骤307以id>ID为查询条件,按照分页查询方法,从pageNum+1中获取待导出数据pageData2’:find({"_id":{$gt:24}}).limit(6);根据步骤308更新pageNum=pageNum+1=4+1=5;根据步骤309更新foundCount=3*6-14%6=18-2=16。
第九,由于更新后的foundCount=16,L=12,故foundCount>L,根据步骤310:
1、获取T2起始数据在数据库中的序列号IDstar,其中,IDstar=(taskSeq-1)*L+1=15;
2、pageData1=pageData1.subList(15,18);
3、获取pageData2=find({"_id":{$gt:18}}).limit(6);
4、获取T2在数据库中第五分页中的截至序列号endIndex=pageSize-(foundCount-L)=6-(16-14)=4;
5、pageData2’=pageData2’.subList(0,endIndex)=pageData2’.subList(0,4);
6、目标导出数据pageData=pageData1+pageData2+pageData2’。
第十,根据步骤305获得导出文件。其中,T2包含数据库中第三个分页的3-6行数据,以及第四个分页的pageSize行数据;以及第五分页的1-4行数据。
如图4所示的实施方式相对于现有技术而言,如果foundCount小于L,则后续查询可以以id大于ID为查询条件,按照分页查询方法,从pageNum+1中获取待导出数据pageData2,由于id是数据库中数据的序列号,是数据库自带的主键,因此可以通过以id大于ID这一条件迅速定位到本次分页查询的开始位置,相较于传统方法需要扫描大量无效数据而言,本实施方式提供的技术方案所查询的均为有效数据,因此进一步提升了数据导出速度。并且,本发明实施方式提供的技术方案,只要判断出更新后的foundCount小于L,均可以以id大于ID为查询条件,按照数据库的分页查询方法查询数据库中后续分页页码包含的数据,查询条件简单,易于实现。
本发明的第三实施方式涉及一种数据导出装置,如图5所示,包括:
第一获取模块501,用于获取对数据库进行数据导出时需要生成的导出文件数量F;
第二获取模块502,用于获取进行所述数据导出工作的硬件设备可用线程数量P;
生成模块503,用于采用所述第二获取模块获取的所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据导出任务导出的数据,生成F个导出文件;其中,采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,包括:在采用单个可用线程对所述数据库执行单个数据导出任务时,若执行所述单个数据导出任务查询到的数据总量大于单个所述导出文件的数据最大存储量,则从所述查询到的数据总量中,按照查询时间由先至后的顺序导出所述预定数据存储量的数据,作为执行所述单个数据导出任务导出的数据。
进一步地,如图6所示,所述第二获取模块502包括:
第一获取子模块601,用于获取所述硬件设备的可用CPU核数P1;
第二获取子模块602,用于根据所述F和所述第一获取子模块601获取的所述P1,获取所述P。
进一步地,所述生成模块503,由P个生成子模块组成5031,每个所述生成子模块5301,具体用于根据所述数据库自带的主键id和所述数据库中单个分页包含的数据pageData,生成每个所述导出文件。
进一步地,如图7所示,所述生成子模块5031包括:
第一获取单元701,用于获取所述导出文件中的起始数据在所述数据库中的分页页码pageNum;
第二获取单元702,用于对所述数据库进行id升序排序,按照分页查询方法,从id升序排序后的pageNum中获取待导出数据pageData1,其中,id为所述数据库中数据的序列号;
第三获取单元703,用于根据所述第二获取单元702获取的所述pageData1获取已查询出的待导出数据个数foundCount;
第四获取单元704,用于如果所述第三获取单元703获取的foundCount大于等于所述导出文件的总行数L,从所述pageData1获取目标导出数据;
生成单元705,用于根据所述第四获取单元704获取的所述目标导出数据生成所述导出文件。
进一步地,如图8所示,所述生成子模块5031还包括:
第五获取单元706,用于如果第三获取单元703获取的所述foundCount小于所述L,获取所述第一获取单元701获取的所述pageNum中最后一行数据的序列号ID;
第六获取单元707,用于以所述id大于所述第五获取单元706获取的所述ID为查询条件,按照条件查询方法,从pageNum+1中获取待导出数据pageData2;
第一更新单元708,用于更新所述第一获取单元701获取的pageNum=pageNum+1;
第二更新单元709,用于根据所述第二获取单元702获取的所述pageData1和所述第六获取单元707获取的所述pageData2更新所述第三获取单元703获取的所述foundCount;
所述第四获取单元704,还用于如果所述第二更新单元709更新后的foundCount大于等于所述L,从所述第二获取单元702获取的所述pageData1和所述第六获取707单元获取的所述pageData2获取目标导出数据;
循环单元710,用于如果所述第二更新单元709更新后的foundCount小于所述L,循环执行所述第五获取单元706、第六获取单元707、第一更新单元708和第二更新单元709。
本发明实施方式提供的数据导出装置的具体实现方法,可以参见本发明实施方式提供的数据导出方法所述,此处不再赘述。
本发明第四实施方式涉及一种电子设备,如图9所示,包括:
至少一个处理器901;以及,
与所述至少一个处理器901通信连接的存储器902;其中,
所述存储器902存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器901执行,以使所述至少一个处理器901能够执行本发明第一、二实施方式所述的数据导出方法。
其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,***接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
本发明第五实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (6)
1.一种数据导出方法,其特征在于,包括:
获取对数据库进行数据导出时需要生成的导出文件数量F;
获取进行所述数据导出工作的硬件设备可用CPU核数P1,根据所述F和所述P1,获取进行所述数据导出工作的硬件设备线程数量P;
采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据导出任务导出的数据,生成F个导出文件;
其中,采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,包括:
在采用单个可用线程对所述数据库执行单个数据导出任务时,若执行所述单个数据导出任务查询到的数据总量大于单个所述导出文件的数据最大存储量,则从所述查询到的数据总量中,按照查询时间由先至后的顺序导出预定数据存储量的数据,作为执行所述单个数据导出任务导出的数据;
在采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据到处任务的数据,生成F个导出文件中,生成每个所述导出文件的方法,包括:
根据所述数据库自带的主键id和所述数据库中单个分页包含的数据pageData,生成每个所述导出文件;所述根据所述数据库自带的主键id和所述数据库中单个分页包含的数据pageData,生成每个所述导出文件包括:
获取所述导出文件中的起始数据在所述数据库中的分页页码pageNum;
对所述数据库进行id升序排序,按照分页查询方法,从id升序排序后的pageNum中获取待导出数据pageData1,其中,id为所述数据库中数据的序列号;
根据所述pageData1获取已查询出的待导出数据个数foundCount;
如果foundCount大于等于所述导出文件的总行数L,从所述pageData1获取目标导出数据;
根据所述目标导出数据生成所述导出文件。
2.根据权利要求1所述的方法,其特征在于,所述根据所述pageData1获取已查询出的待导出数据个数foundCount之后,所述根据所述目标导出数据生成所述导出文件之前,还包括:
如果foundCount小于所述L,获取所述pageNum中最后一行数据的序列号ID;
以所述id大于所述ID为查询条件,按照条件查询方法,从pageNum+1中获取待导出数据pageData2;
更新所述pageNum= pageNum+1;
根据所述pageData1和所述pageData2更新所述foundCount;
如果更新后的foundCount大于等于所述L,从所述pageData1和pageData2获取目标导出数据;
如果更新后的foundCount小于所述L,循环执行所述获取所述pageNum中最后一行数据的序列号ID,以所述id大于所述ID为查询条件,按照所述分页查询方法,从pageNum+1中获取待导出数据pageData2,更新所述pageNum= pageNum+1,根据所述pageData1和所述pageData2更新所述foundCount的步骤。
3.一种数据导出装置,其特征在于,包括:
第一获取模块,用于获取对数据库进行数据导出时需要生成的导出文件数量F;
第二获取模块,用于获取进行所述数据导出工作的硬件设备可用CPU核数P1,根据所述F和所述P1,获取进行所述数据导出工作的硬件设备线程数量P;
生成模块,用于采用所述第二获取模块获取的所述P个可用线程并行对所述数据库执行至少两个数据导出任务,基于对所述数据库执行数据导出任务导出的数据,生成F个导出文件;其中,采用所述P个可用线程并行对所述数据库执行至少两个数据导出任务,包括:在采用单个可用线程对所述数据库执行单个数据导出任务时,若执行所述单个数据导出任务查询到的数据总量大于单个所述导出文件的数据最大存储量,则从所述查询到的数据总量中,按照查询时间由先至后的顺序导出预定数据存储量的数据,作为执行所述单个数据导出任务导出的数据;
所述生成模块,由P个生成子模块组成,每个所述生成子模块,具体用于根据所述数据库自带的主键id和所述数据库中单个分页包含的数据pageData,生成每个所述导出文件;
所述生成子模块包括:
第一获取单元,用于获取所述导出文件中的起始数据在所述数据库中的分页页码pageNum;
第二获取单元,用于对所述数据库进行id升序排序,按照分页查询方法,从id升序排序后的pageNum中获取待导出数据pageData1,其中,id为所述数据库中数据的序列号;
第三获取单元,用于根据所述第二获取单元获取的所述pageData1获取已查询出的待导出数据个数foundCount;
第四获取单元,用于如果所述第三获取单元获取的foundCount大于等于所述导出文件的总行数L,从所述pageData1获取目标导出数据;
生成单元,用于根据所述第三获取单元获取的所述目标导出数据生成所述导出文件。
4.根据权利要求3所述的装置,其特征在于,所述生成子模块还包括:
第五获取单元,用于如果第三获取单元获取的所述foundCount小于所述L,获取所述第一获取单元获取的所述pageNum中最后一行数据的序列号ID;
第六获取单元,用于以所述id大于所述第五获取单元获取的所述ID为查询条件,按照条件查询方法,从pageNum+1中获取待导出数据pageData2;
第一更新单元,用于更新所述第一获取单元获取的pageNum= pageNum+1;
第二更新单元,用于根据所述第二获取单元获取的所述pageData1和所述第六获取单元获取的所述pageData2更新所述第三获取单元获取的所述foundCount;
所述第四获取单元,还用于如果所述第二更新单元更新后的foundCount大于等于所述L,从所述第二获取单元获取的所述pageData1和所述第六获取单元获取的所述pageData2获取目标导出数据;
循环单元,用于如果所述第二更新单元更新后的foundCount小于所述L,循环执行所述第五获取单元、第六获取单元、第一更新单元和第二更新单元。
5.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1或2所述的数据导出方法。
6.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1或2所述的数据导出方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010990293.8A CN112100245B (zh) | 2020-09-18 | 2020-09-18 | 数据导出方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010990293.8A CN112100245B (zh) | 2020-09-18 | 2020-09-18 | 数据导出方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112100245A CN112100245A (zh) | 2020-12-18 |
CN112100245B true CN112100245B (zh) | 2024-05-31 |
Family
ID=73759030
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010990293.8A Active CN112100245B (zh) | 2020-09-18 | 2020-09-18 | 数据导出方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112100245B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996067A (zh) * | 2009-08-19 | 2011-03-30 | 阿里巴巴集团控股有限公司 | 一种数据导出的方法和装置 |
WO2017005094A1 (zh) * | 2015-07-03 | 2017-01-12 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN107656968A (zh) * | 2017-08-31 | 2018-02-02 | 武汉斗鱼网络科技有限公司 | 大批量业务数据导出方法及*** |
CN108628890A (zh) * | 2017-03-21 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 一种数据导出方法及*** |
-
2020
- 2020-09-18 CN CN202010990293.8A patent/CN112100245B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996067A (zh) * | 2009-08-19 | 2011-03-30 | 阿里巴巴集团控股有限公司 | 一种数据导出的方法和装置 |
WO2017005094A1 (zh) * | 2015-07-03 | 2017-01-12 | 阿里巴巴集团控股有限公司 | 一种数据查询方法和装置 |
CN108628890A (zh) * | 2017-03-21 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 一种数据导出方法及*** |
CN107656968A (zh) * | 2017-08-31 | 2018-02-02 | 武汉斗鱼网络科技有限公司 | 大批量业务数据导出方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN112100245A (zh) | 2020-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE60004640T2 (de) | Verfahren und vorrichtung für sprungvorhersage unter verwendung einer hybriden branch-history mit gemeinsamer zugriffsstruktur | |
CN104021460A (zh) | 一种工作流程管理***及工作流程处理方法 | |
CN112860692B (zh) | 一种数据库表结构转换方法、装置及其电子设备 | |
CN111738590A (zh) | 生产排程方法和装置 | |
CN105279269A (zh) | 一种支持表自由关联的sql生成方法和*** | |
CN112100245B (zh) | 数据导出方法、装置、电子设备和存储介质 | |
DE102018125971A1 (de) | Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln | |
CN110597851B (zh) | 一种基于大数据的数据处理及报表展示方法 | |
CN103338246B (zh) | 一种基础设施云资源分配过程中的虚拟机选择方法及*** | |
CN110532311B (zh) | 一种基于队列的分布式数据导出方法及*** | |
CN111444165B (zh) | 用于电商平台的会员数据圈选方法及*** | |
CN115543317A (zh) | 前端页面开发方法及装置 | |
CN110737671A (zh) | 基于表格的检索方法和装置 | |
CN113343646A (zh) | 数据转换方法和装置 | |
US11409523B2 (en) | Graphics processing unit | |
CN112100446B (zh) | 搜索方法、可读存储介质和电子设备 | |
CN111488313A (zh) | 基于Tribon的模型名称的批处理方法和*** | |
US20040034443A1 (en) | Numerical controller | |
CN112667744B (zh) | 一种数据库中数据批量同步更新的方法和装置 | |
CN110597615B (zh) | 一种编码指令的处理方法和节点设备 | |
CN116185940B (zh) | 一种原子计数器的操作方法、装置、设备及存储介质 | |
CN110825444B (zh) | 一种电子控制单元的针脚配置方法 | |
CN115114690B (zh) | 一种飞行工程算法的编排方法、编排装置和电子设备 | |
CN112506944B (zh) | 业务***间的数据标准转换取数方法、装置、设备和介质 | |
CN109408035B (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 |