CN110389957A - 基于分库分表的文件生成方法、装置、存储介质及设备 - Google Patents
基于分库分表的文件生成方法、装置、存储介质及设备 Download PDFInfo
- Publication number
- CN110389957A CN110389957A CN201910670750.2A CN201910670750A CN110389957A CN 110389957 A CN110389957 A CN 110389957A CN 201910670750 A CN201910670750 A CN 201910670750A CN 110389957 A CN110389957 A CN 110389957A
- Authority
- CN
- China
- Prior art keywords
- message
- file
- thread
- data query
- producer
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000004519 manufacturing process Methods 0.000 claims abstract description 36
- 230000001960 triggered effect Effects 0.000 claims abstract description 16
- 230000002159 abnormal effect Effects 0.000 claims description 30
- 238000013461 design Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 6
- 238000004364 calculation method Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 230000008901 benefit Effects 0.000 description 7
- 230000006399 behavior Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000001351 cycling effect Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000005923 long-lasting effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002688 persistence Effects 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了基于分库分表的文件生成方法、装置、存储介质及设备。该方法包括:检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程;通过多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列;在数据查询过程中,通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作;在确定多个生产者线程生产的消息已被消费完毕时,结束文件写入操作,并生成相应的文件。本发明实施例通过采用上述技术方案,可以提高查询和消费效率,并从整体上提升文件生成效率。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及基于分库分表的文件生成方法、装置、存储介质及设备。
背景技术
当数据库中存在某个表的数据量过大,比如百万甚至上亿条记录时,数据库操作会十分耗时。为了支持大数据量的访问场景,也为了提高数据库访问效率,现有技术提出了数据库的分库分表策略。简单来讲,分库分表就是按照一定的规则,对原有的数据库和表进行拆分,把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
对于目前多数互联网公司来说,随着时间和业务的发展,订单量越来越多,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,分库分表策略已成为主流配置,而分库分表策略的实施也提出了新的挑战。从分库分表中筛选记录并生成文件是其中一个常见的应用场景,然而,目前基于分库分表的文件生成方案并不完善,需要改进。
发明内容
本发明实施例提供了基于分库分表的文件生成方法、装置、存储介质及设备,可以优化现有的基于分库分表的文件生成方案。
第一方面,本发明实施例提供了一种基于分库分表的文件生成方法,包括:
检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程;
通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询;
在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作;
在确定所述多个生产者线程生产的消息已被消费完毕时,结束所述文件写入操作,并生成相应的文件。
第二方面,本发明实施例提供了一种基于分库分表的文件生成装置,包括:
线程开启模块,用于在检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程;
数据查询模块,用于通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询;
文件写入模块,用于在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作;
文件生成模块,用于在确定所述多个生产者线程生产的消息已被消费完毕时,结束所述文件写入操作,并生成相应的文件。
第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的基于分库分表的文件生成方法。
第四方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例提供的基于分库分表的文件生成方法。
本发明实施例中提供的基于分库分表的文件生成方案,检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程,通过多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,每个生产者线程针对分表中的至少一个号段进行数据查询,在数据查询过程中,通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作,在确定多个生产者线程生产的消息已被消费完毕时,结束文件写入操作,并生成相应的文件。通过采用上述技术方案,数据查询和数据消费能够并行处理,且能够实现数据的并行查询以及数据的并行消费,提高查询和消费效率,进而从整体上提升文件生成效率。
附图说明
图1为本发明实施例一提供的一种基于分库分表的文件生成方法的流程示意图;
图2为本发明实施例二提供的一种基于分库分表的文件生成方法的流程示意图;
图3为本发明实施例二提供的一种基于分库分表的文件生成方法的架构示意图;
图4为本发明实施例三提供的一种基于分库分表的文件生成方法的流程示意图;
图5为本发明实施例四提供的一种基于分库分表的文件生成装置的结构框图;
图6为本发明实施例六提供的一种计算机设备的结构框图。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1为本发明实施例一提供的一种基于分库分表的文件生成方法的流程示意图,该方法可以由基于分库分表的文件生成装置执行,其中该装置可由软件和/或硬件实现,一般可集成在服务器等计算机设备中。如图1所示,该方法包括:
步骤101、检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程。
示例性的,本发明实施例可适用于互联网订单相关文件的生成,也可适用于其他应用场景。例如,清结算系统中,需要给资金方发送用户的实还数据或者还款计划等文件;又如,基金代销系统中,需要给基金公司发送基金购买详情信息等文件。
本发明实施例中的服务器可以与数据库服务器进行通信,通信方式可以是远程调用或者本地调用,本发明实施例不做限定。
相关技术中,文件生成的基本过程是从数据库查询记录,加工后,调用应用程序编程接口(Application Programming Interface,API)写入文件,整个过程采用单线程处理,假设数据库分表中包含N张表,那么就需要单线程串行扫描N张表,耗时就是查询N张表的查询时间的总和,当数据量较大时,如十万级别时,处理时间呈线性拉长,严重影响文件生成的效率。
本发明实施例中,对预设文件生成事件的触发方式不做限定,可以在用户操作下触发,也可以在满足预设条件时触发,具体可根据实际情况进行设定。在检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程,生产者线程和消费者线程可以同时开启,也可以先后开启,多个生产者线程或多个消费者线程可以同时开启,也可以按照一定的顺序分批开启,本发明实施例均不做限定。示例性的,可以通过控制生产者应用程序来开启生产者线程,通过控制消费者应用程序来开启消费者线程,对生产者线程和消费者线程的开启时机以及开启顺序等设定可以通过设置生产者应用程序和消费者应用程序来实现。可选的,当生产者应用程序启动时,开启线程池,从而开启多个生产者线程;当消费者应用程序启动时,开启线程池,从而开启多个消费者线程。在检测到预设文件生成事件被触发后,可以同时启动生产者应用程序和消费者应用程序,或先启动生产者应用程序再启动消费者应用程序。
步骤102、通过多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询。
示例性的,预设范围可以是所有分表或部分分表,具体可以是针对当前预设文件生成事件的分表。例如,当前预设文件生成事件对应的是互联网订单中某商品的销售情况相关文件,那么预设范围就可以包括该商品的销售相关数据对应的全部分表或部分分表。
可选的,可预先对预设范围内的分表进行分段,例如,可每100个分表分一个号段;也可在检测到预设文件生成事件被触发后,根据实际的预设范围内包含的分表数量进行动态分段,例如,预设范围内共包含1000个分表,可平均分为5个号段,即每200个分表为一个号段,若共包含500个分表,也可平均分为5个号段,即每100个分表为一个号段。本发明实施例对号段的具体划分规则不做限定,可根据实际情况进行设置。
在上述步骤中,开启的生产者线程的具体数量可以参考号段数量来设定。例如,一个号段对应一个生产者线程,也即开启的生产者线程的数量可以与预设范围内分表的号段数量相同;又如,号段和生产者线程可以是一对多或者多对一的关系。另外,不同号段内数据可能存在不均衡的情况,若一个生产者线程先完成数据查询,也可继续针对其他未查询完毕的号段进行数据查询。
生产者线程的数量和消费者线程的数量可以相等,也可以不等,本发明实施例不做限定。可选的,可以参考生产者线程所生产的消息数量来确定开启的消费者线程的数量。
示例性的,每个生产者线程负责从自身对应的号段的分表中并行进行数据查询,在查询到所需数据时,生产消息并将所生产的消息发送至预设消息队列。消息队列(Message queue,MQ)可理解为消息的传输过程中保存消息的容器,预设消息队列可预先创建也可临时创建。可选的,查询结果以持久化模式存放于预设消息队列中,这样设置的好处在于,可保证数据的可恢复性,当MQ所属设备,如集群,断电时,使用持久化模式可以在重新启动MQ集群时,保证数据可恢复。
可选的,生产者线程在将查询结果发送至预设消息队列之前,还可对查询到的数据进行加工。加工过程例如可包括数据的格式转换,比如MQ消息类型是一个数据对象,文件定义的是取数据对象中的某几个数据值按“|”分割,写入文件。加工过程还可包括其他操作,本发明实施例不做限定。
步骤103、在数据查询过程中,通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作。
示例性的,可以在生产者线程将生产的消息发送至预设消息队列后,即开始通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作;也可在预设消息队列积累了一定数量的消息后,才开始通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作。
在进行文件写入操作时,可利用文件写入API进行并发写入操作,具体可参照API标准进行。
步骤104、在确定多个生产者线程生产的消息已被消费完毕时,结束文件写入操作,并生成相应的文件。
本发明实施例中,由于数据查询和数据消费并行处理,且数据并行查询以及数据并行消费,因此,需要核实生产的消息是否全部被消费了,避免发生遗漏,导致所生成的文件信息缺失。
示例性的,可以对生产的消息数量进行统计,同时对消费的数量进行统计,方便核实消息是否被消费完毕。
本发明实施例中提供的基于分库分表的文件生成方法,检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程,通过多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,每个生产者线程针对分表中的至少一个号段进行数据查询,在数据查询过程中,通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作,在确定多个生产者线程生产的消息已被消费完毕时,结束文件写入操作,并生成相应的文件。通过采用上述技术方案,数据查询和数据消费能够并行处理,且能够实现数据的并行查询以及数据的并行消费,提高查询和消费效率,进而从整体上提升文件生成效率。
实施例二
图2为本发明实施例二提供的一种基于分库分表的文件生成方法的流程示意图,图3为本发明实施例二提供的一种基于分库分表的文件生成方法的架构示意图,本发明实施例在上述实施例基础上进行优化,增加了在预设缓存中记录消息数量的相关内容。
示例性的,在所述数据查询过程中,在预设缓存中递增记录所述多个生产者线程生产的第一消息数量,同时在所述预设缓存中递增记录所述多个消费者线程消费的第二消息数量。这样设置的好处在于,可以在缓存中记录消息的生产和消费情况,便于对整个文件生成过程进行管控。
进一步的,所述确定所述多个生产者线程生产的消息已被消费完毕,包括:当所述第一消息数量在预设时长内停止增加,且所述第一消息数量与所述第二消息数量的差为0时,确定所述多个生产者线程生产的消息已被消费完毕。这样设置的好处在于,能够准确地确定生产者线程生产的消息是否已被消费完毕。
进一步的,在所述数据查询过程中,在检测到所述第一消息数量达到预设数值时,开始通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作。这样设置的好处在于,减少消费者线程的空闲时间,节约系统资源。
可选的,如图2所示,该方法可包括:
步骤201、检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程。
可选的,生产者线程和消费者线程的数量可以不同,如图3所示,生产者线程为4个,消费者线程为5个。
步骤202、通过多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,在数据查询过程中,在预设缓存中递增记录多个生产者线程生产的第一消息数量。
其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询。可选的,每个生产者线程对应一个号段,如图3所示,生产者线程1对应分表00-99,生产者线程2对应分表100-199,生产者线程3对应分表200-299,生产者线程4对应其余分表,以XX表示。
示例性的,预设缓存可以基于Redis实现,Redis是一个开源的可基于内存亦可持久化的日志型数据库,是一个key-value存储系统,提供多种语言的API。在记录消息数量时,可以利用Redis中的API实现,如以原子加一INCR方式进行记录。
步骤203、在数据查询过程中,在检测到第一消息数量达到预设数值时,开始通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作,在预设缓存中递增记录多个消费者线程消费的第二消息数量。
示例性的,预设数量可自由设置,如50个。在预设消息队列中的消息数量不够多时,若通过多个消费者线程并行消费,那么可能消费速度大于生产速度,导致消费者线程存在较多空闲时间,进而浪费较多的系统资源,因此,本发明实施例可以等预设消息队列中的消息数量达到一定量后,再开始消费。
可选的,可以通过MQ监听线程对预设消息队列中的数据进行监听,若有数据,则批量进行消息拉取,如50个消息进行一次消息拉取操作,通过线程池中的消费者线程进行消费。
步骤204、当第一消息数量在预设时长内停止增加,且第一消息数量与第二消息数量的差为0时,确定多个生产者线程生产的消息已被消费完毕,结束文件写入操作。
示例性的,预设时长可以实际情况进行设置,例如可参考生产者线程生产一个消息的时间进行设置,如生产一个消息需要1分钟,预设时长可设置的稍大于该时间,如5分钟。可选的,设生产者线程生产一个消息的时间为第一时长,预设时长为第一时长的预设倍数,预设倍数例如可以是5。
在经过预设时长的时间后,第一消息数量没有增加,可认为生产者线程已完成全部的数据查询操作,若此时第一消息数量与第二消息数量的差为0,也即第一消息数量等于第二消息数量时,可以说明生产的消息已全部被消费完毕,可以结束文件写入操作。
步骤205、生成相应的文件。
当文件写入操作结束后,可以按照文件生成的要求,如文件格式、输出路径等,形成相应的文件。
本发明实施例中提供的基于分库分表的文件生成方法,通过开启多个生产者线程来实现并行的数据查询,提高查询单位时间的吞吐量,通过开启多个消费者线程来实现并行的数据消费,提高数据消费单位时间的吞吐量,并行写入文件,提高了文件写入效率,同时在缓存中记录数据生产和消费的数量,当生产的消息达到一定数量时,开始通过消费者线程从消息队列中读取消息并写入文件,在节省系统资源的基础上做到数据生产和数据消费的并行,并根据缓存中记录的数量情况准确地判断生产者线程生产的消息是否已被消费完毕,若已完毕,则生成相应的文件,有效提升了基于分库分表的文件生成效率。
可选的,在上述实施例中,也可采用其他方式记录消息数量。示例性的,在所述数据查询过程中,在预设缓存中动态调整预设变量的数值,当所述多个生产者线程生产一个消息时,所述预设变量的数值加1,当所述多个消费者消费一个消息时,所述预设变量的数值减1。这样设置的好处在于,可以实时更新未被消费的消息数量,同时减少运算量,进一步提升文件生成效率。
实施例三
图4为本发明实施例三提供的一种基于分库分表的文件生成方法的流程示意图,本发明实施例在上述实施例基础上进行优化,引入了重试机制,并增添相关内容。
示例性的,在所述通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询的同时,还包括:在检测到发生查询异常时,记录发生异常的第一位置;从所述第一位置开始重试数据查询操作。这样设置的好处在于,可以针对数据查询过程中出现的异常进行修复处理,提升系统的容错性能。
进一步的,在所述通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作的同时,还包括:在检测到发生写入异常时,记录发生异常的第二位置;从所述第二位置开始重试文件写入操作。这样设置的好处在于,可以针对文件写入过程中出现的异常进行修复处理,提升系统的容错性能。
可选的,如图4所示,该方法包括:
步骤401、检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程。
步骤402、通过多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询。
其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询
步骤403、在检测到发生查询异常时,记录发生异常的第一位置,从第一位置开始重试数据查询操作。
相关技术中,数据库查询过程可能会发生异常,例如数据库连接发生抖动时就会发生异常,如果发生异常,整个任务失败。
本发明实施例中,引入了数据查询过程中的重试机制,可以由应用程序自行捕获异常,当发生异常时,记录发生异常的第一位置,并从该第一位置开始重试数据查询操作。可选的,重试数据查询操作可以多次进行,例如,查询开始时记录一个计数变量如:a=0,查询包在一个for循环中,检查条件为a>=第一阀值(可理解为查询重试次数阈值),当查询异常时a变量自增加1,继续循环,查询正常就break跳出for循环。
步骤404、将查询结果发送至预设消息队列,在数据查询过程中,在预设缓存中递增记录多个生产者线程生产的第一消息数量。
步骤405、在数据查询过程中,在检测到第一消息数量达到预设数值时,开始通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作。
步骤406、在检测到发生写入异常时,记录发生异常的第二位置,从第二位置开始重试文件写入操作。
相关技术中,文件写入过程也可能会发生异常,例如文件在某个时间点正好被别的进程访问并加锁,写文件时就会产生异常,如果发生异常,整个任务失败。
本发明实施例中,引入了文件写入过程中的重试机制,可以由应用程序自行捕获异常,当发生异常时,记录发生异常的第二位置,并从该第二位置开始重试数据查询操作。可选的,重试文件写入操作可以多次进行,例如,文件写入开始时记录一个计数变量如:b=0,查询包在一个for循环中,检查条件为b>=第二阀值(可理解为文件写入重试次数阈值),当查询异常时b变量自增加1,继续循环,查询正常就break跳出for循环。
步骤407、在预设缓存中递增记录多个消费者线程消费的第二消息数量。
步骤408、当第一消息数量在预设时长内停止增加,且第一消息数量与第二消息数量的差为0时,确定多个生产者线程生产的消息已被消费完毕,结束文件写入操作。
步骤409、生成相应的文件。
本发明实施例提供的基于分库分表的文件生成方法,在提高文件写入效率的基础上,进一步引入异常重试机制,保证系统运行可靠性,提升系统的容错性能,同时减少人工干预,提升系统的稳定性。试验表明100W数据从查询到写入文件在30分钟内,查询异常时有出现,但没有出现因查询异常导致的job中断。
实施例四
图5为本发明实施例四提供的一种基于分库分表的文件生成装置的结构框图,该装置可由软件和/或硬件实现,一般可集成在服务器等计算机设备中,可通过执行基于分库分表的文件生成方法来进行基于分库分表的文件生成。如图5所示,该装置包括:
线程开启模块501,用于在检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程;
数据查询模块502,用于通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询;
文件写入模块503,用于在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作;
文件生成模块504,用于在确定所述多个生产者线程生产的消息已被消费完毕时,结束所述文件写入操作,并生成相应的文件。
本发明实施例中提供的基于分库分表的文件生成装置,检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程,通过多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,每个生产者线程针对分表中的至少一个号段进行数据查询,在数据查询过程中,通过多个消费者线程并行从预设消息队列中读取消息并执行文件写入操作,在确定多个生产者线程生产的消息已被消费完毕时,结束文件写入操作,并生成相应的文件。通过采用上述技术方案,数据查询和数据消费能够并行处理,且能够实现数据的并行查询以及数据的并行消费,提高查询和消费效率,进而从整体上提升文件生成效率。
可选的,该装置还包括:
数量记录模块,用于在所述数据查询过程中,在预设缓存中递增记录所述多个生产者线程生产的第一消息数量,同时在所述预设缓存中递增记录所述多个消费者线程消费的第二消息数量。
可选的,所述确定所述多个生产者线程生产的消息已被消费完毕,包括:
当所述第一消息数量在预设时长内停止增加,且所述第一消息数量与所述第二消息数量的差为0时,确定所述多个生产者线程生产的消息已被消费完毕。
可选的,所述在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作,包括:
在所述数据查询过程中,在检测到所述第一消息数量达到预设数值时,开始通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作。
可选的,该装置还包括:
第一位置记录模块,用于在所述通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询的同时,在检测到发生查询异常时,记录发生异常的第一位置;
查询重试模块,用于从所述第一位置开始重试数据查询操作。
可选的,该装置还包括:
第二位置记录模块,用于在所述通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作的同时,在检测到发生写入异常时,记录发生异常的第二位置;
写入重试模块,用于从所述第二位置开始重试文件写入操作。
可选的,该装置还包括:
数值调整模块,用于在所述数据查询过程中,在预设缓存中动态调整预设变量的数值,当所述多个生产者线程生产一个消息时,所述预设变量的数值加1,当所述多个消费者消费一个消息时,所述预设变量的数值减1。
实施例五
本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行基于分库分表的文件生成方法,该方法包括:
检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程;
通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询;
在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作;
在确定所述多个生产者线程生产的消息已被消费完毕时,结束所述文件写入操作,并生成相应的文件。
存储介质——任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDRRAM、SRAM、EDORAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统。第二计算机系统可以提供程序指令给第一计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的基于分库分表的文件生成操作,还可以执行本发明任意实施例所提供的基于分库分表的文件生成方法中的相关操作。
实施例六
本发明实施例提供了一种计算机设备,该计算机设备中可集成本发明实施例提供的基于分库分表的文件生成装置。图6为本发明实施例六提供的一种计算机设备的结构框图。计算机设备600可以包括:存储器601,处理器602及存储在存储器601上并可在处理器运行的计算机程序,所述处理器602执行所述计算机程序时实现如本发明实施例所述的基于分库分表的文件生成方法。
本发明实施例提供的计算机设备,数据查询和数据消费能够并行处理,且能够实现数据的并行查询以及数据的并行消费,提高查询和消费效率,进而从整体上提升文件生成效率。
上述实施例中提供的基于分库分表的文件生成装置、存储介质以及计算机设备可执行本发明任意实施例所提供的基于分库分表的文件生成方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的基于分库分表的文件生成方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种基于分库分表的文件生成方法,其特征在于,包括:
检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程;
通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询;
在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作;
在确定所述多个生产者线程生产的消息已被消费完毕时,结束所述文件写入操作,并生成相应的文件。
2.根据权利要求1所述的方法,其特征在于,还包括:
在所述数据查询过程中,在预设缓存中递增记录所述多个生产者线程生产的第一消息数量,同时在所述预设缓存中递增记录所述多个消费者线程消费的第二消息数量。
3.根据权利要求2所述的方法,其特征在于,所述确定所述多个生产者线程生产的消息已被消费完毕,包括:
当所述第一消息数量在预设时长内停止增加,且所述第一消息数量与所述第二消息数量的差为0时,确定所述多个生产者线程生产的消息已被消费完毕。
4.根据权利要求2所述的方法,其特征在于,所述在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作,包括:
在所述数据查询过程中,在检测到所述第一消息数量达到预设数值时,开始通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作。
5.根据权利要求1所述的方法,其特征在于,在所述通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询的同时,还包括:
在检测到发生查询异常时,记录发生异常的第一位置;
从所述第一位置开始重试数据查询操作。
6.根据权利要求1所述的方法,其特征在于,在所述通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作的同时,还包括:
在检测到发生写入异常时,记录发生异常的第二位置;
从所述第二位置开始重试文件写入操作。
7.根据权利要求1所述的方法,其特征在于,还包括:
在所述数据查询过程中,在预设缓存中动态调整预设变量的数值,当所述多个生产者线程生产一个消息时,所述预设变量的数值加1,当所述多个消费者消费一个消息时,所述预设变量的数值减1。
8.一种基于分库分表的文件生成装置,其特征在于,包括:
线程开启模块,用于在检测到预设文件生成事件被触发后,开启多个生产者线程以及开启多个消费者线程;
数据查询模块,用于通过所述多个生产者线程并行从预设数据库中预设范围内的分表进行数据查询,并将查询结果发送至预设消息队列,其中,所述预设范围内的分表被划分为多个号段,所述多个生产者线程中的每个生产者线程针对至少一个号段进行数据查询;
文件写入模块,用于在所述数据查询过程中,通过所述多个消费者线程并行从所述预设消息队列中读取消息并执行文件写入操作;
文件生成模块,用于在确定所述多个生产者线程生产的消息已被消费完毕时,结束所述文件写入操作,并生成相应的文件。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8任一项所述的方法。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910670750.2A CN110389957A (zh) | 2019-07-24 | 2019-07-24 | 基于分库分表的文件生成方法、装置、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910670750.2A CN110389957A (zh) | 2019-07-24 | 2019-07-24 | 基于分库分表的文件生成方法、装置、存储介质及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110389957A true CN110389957A (zh) | 2019-10-29 |
Family
ID=68287275
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910670750.2A Pending CN110389957A (zh) | 2019-07-24 | 2019-07-24 | 基于分库分表的文件生成方法、装置、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110389957A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111046118A (zh) * | 2019-11-09 | 2020-04-21 | 武汉中海庭数据技术有限公司 | 一种基于消息队列的车端数据的实时处理方法及系统 |
CN111400056A (zh) * | 2019-12-31 | 2020-07-10 | 远景智能国际私人投资有限公司 | 基于消息队列的消息传输方法、装置及设备 |
CN111506430A (zh) * | 2020-04-23 | 2020-08-07 | 上海数禾信息科技有限公司 | 多任务下数据处理的方法、装置及电子设备 |
CN112506992A (zh) * | 2020-12-04 | 2021-03-16 | 中国人寿保险股份有限公司 | Kafka数据的模糊查询方法、装置、电子设备和存储介质 |
CN115114247A (zh) * | 2022-05-30 | 2022-09-27 | 中银金融科技有限公司 | 文件数据处理方法及装置 |
WO2023024274A1 (zh) * | 2021-08-25 | 2023-03-02 | 长鑫存储技术有限公司 | 一种数据处理系统和方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130081060A1 (en) * | 2011-09-22 | 2013-03-28 | Oleksandr Otenko | System and Method for Efficient Concurrent Queue Implementation |
CN107025225A (zh) * | 2016-01-30 | 2017-08-08 | 华为技术有限公司 | 一种终端数据库的并行执行方法和装置 |
GB201721548D0 (en) * | 2017-12-21 | 2018-02-07 | Advanced Risc Mach Ltd | Data processing systems |
CN108009029A (zh) * | 2017-11-30 | 2018-05-08 | 中电福富信息科技有限公司 | 基于Ignite网格缓存数据解耦持久化的方法及系统 |
-
2019
- 2019-07-24 CN CN201910670750.2A patent/CN110389957A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130081060A1 (en) * | 2011-09-22 | 2013-03-28 | Oleksandr Otenko | System and Method for Efficient Concurrent Queue Implementation |
CN107025225A (zh) * | 2016-01-30 | 2017-08-08 | 华为技术有限公司 | 一种终端数据库的并行执行方法和装置 |
CN108009029A (zh) * | 2017-11-30 | 2018-05-08 | 中电福富信息科技有限公司 | 基于Ignite网格缓存数据解耦持久化的方法及系统 |
GB201721548D0 (en) * | 2017-12-21 | 2018-02-07 | Advanced Risc Mach Ltd | Data processing systems |
Non-Patent Citations (2)
Title |
---|
程序员LOGGER: "面试官:"谈谈分库分表吧?", 《HTTPS://MP.WEIXIN.QQ.COM/S/ZFLWY2B5KGBX-UED4JG71A》, 12 January 2019 (2019-01-12), pages 1 - 22 * |
黑马程序员: "《大数据分布式并行处理技术-基于云天星数据库的交通管理大数据处理》", 西安电子科技大学出版社, pages: 358 - 360 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111046118A (zh) * | 2019-11-09 | 2020-04-21 | 武汉中海庭数据技术有限公司 | 一种基于消息队列的车端数据的实时处理方法及系统 |
CN111400056A (zh) * | 2019-12-31 | 2020-07-10 | 远景智能国际私人投资有限公司 | 基于消息队列的消息传输方法、装置及设备 |
CN111506430A (zh) * | 2020-04-23 | 2020-08-07 | 上海数禾信息科技有限公司 | 多任务下数据处理的方法、装置及电子设备 |
CN111506430B (zh) * | 2020-04-23 | 2024-04-19 | 上海数禾信息科技有限公司 | 多任务下数据处理的方法、装置及电子设备 |
CN112506992A (zh) * | 2020-12-04 | 2021-03-16 | 中国人寿保险股份有限公司 | Kafka数据的模糊查询方法、装置、电子设备和存储介质 |
CN112506992B (zh) * | 2020-12-04 | 2024-04-16 | 中国人寿保险股份有限公司 | Kafka数据的模糊查询方法、装置、电子设备和存储介质 |
WO2023024274A1 (zh) * | 2021-08-25 | 2023-03-02 | 长鑫存储技术有限公司 | 一种数据处理系统和方法 |
CN115114247A (zh) * | 2022-05-30 | 2022-09-27 | 中银金融科技有限公司 | 文件数据处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110389957A (zh) | 基于分库分表的文件生成方法、装置、存储介质及设备 | |
US10255108B2 (en) | Parallel execution of blockchain transactions | |
EP3545435B1 (en) | Database system and method for compiling serial and parallel database query execution plans | |
JP4764472B2 (ja) | データベース管理方法、データベース管理プログラム、および、データベース管理装置 | |
US8572037B2 (en) | Database server, replication server and method for replicating data of a database server by at least one replication server | |
US9122716B1 (en) | Database upgrade management | |
CN104657366A (zh) | 海量日志写入数据库的方法、装置和日志容灾系统 | |
CN110609807B (zh) | 用于删除快照数据的方法、设备和计算机可读存储介质 | |
JP5697195B2 (ja) | アクセス予測に基づいてテーブルのミラーリングを制御する管理システム、プログラムおよび方法 | |
CN108475201A (zh) | 一种虚拟机启动过程中的数据获取方法和云计算系统 | |
US20040133752A1 (en) | Method for controlling storage device controller, storage device controller, and program | |
CN106897345A (zh) | 一种数据存储的方法及装置 | |
CN104182295A (zh) | 一种数据备份方法及装置 | |
CN110413631A (zh) | 一种数据查询方法及装置 | |
KR20150103886A (ko) | 파이프라인 실행 가속을 위한 데이터 처리 장치 및 그 방법 | |
US11023493B2 (en) | Intelligently scheduling resynchronization jobs in a distributed object-based storage system | |
CN102576294A (zh) | 含有多个存储装置的存储系统、方法及程序 | |
CN107958414B (zh) | 一种清除cics系统长交易的方法及系统 | |
US6055558A (en) | Pacing of multiple producers when information is required in natural order | |
JP5420358B2 (ja) | バッチ処理実行方法及びバッチ処理実行システム | |
US20070061530A1 (en) | Method for storage of digital data in a mainframe data center and associated device | |
CN110297673B (zh) | 内存数据优化加载的方法、存储介质 | |
US10803030B2 (en) | Asynchronous SQL execution tool for zero downtime and migration to HANA | |
CN107145303A (zh) | 一种用于在分布式存储系统中执行文件写入的方法与设备 | |
CN105653377B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191029 |