CN111581155B - 数据入数据库的方法、装置和计算机设备 - Google Patents
数据入数据库的方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN111581155B CN111581155B CN202010237426.4A CN202010237426A CN111581155B CN 111581155 B CN111581155 B CN 111581155B CN 202010237426 A CN202010237426 A CN 202010237426A CN 111581155 B CN111581155 B CN 111581155B
- Authority
- CN
- China
- Prior art keywords
- file
- data
- database
- host
- row
- 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
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/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请揭示了数据入数据库的方法,包括:获取待拆分的第一文件对应的特征值;获取数据库中的数据分区数量,并依据第一文件对应的特征值以及所述数据库中的数据分区数量,计算第一文件的拆分模值;将第一文件拆分成指定数量的第二文件,并将各第二文件一一写入与拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各子任务包括向数据库中数据分区导入数据,指定数量小于或等于数据库中的数据分区数量;控制任务注册域内各主机分别抓取各子任务,并通过各主机分别对应的线程通道,将各第二文件对应的数据分别导入数据库的数据分区。通过计算拆分模值,实现子文件与数据分区的对应,并行写入不同数据分区。
Description
技术领域
本申请涉及到计算机领域,特别是涉及到数据入数据库的方法、装置和计算机设备。
背景技术
对账是银行交易系统中清算资金流程的重要环节,对账的效率也直接影响了资金清算作业的时效。面对日益增长的发卡用户数量及收单业务的不断拓展,对账系统接收到的对账清算文件也越来越大,数据量增长迅速,对目前对账系统的交易数据解析入账造成了很大的考验。以借记卡发卡交易为例,目前借记卡交易系统一天的交易量平均在180万到200万之间,对账系统每天对账清算流程中完成借记卡发卡交易的主机C/H文件及银联文件入库耗时在40分钟左右,随着业务量的增长,对账清算流程消耗在文件解析入库上的时间将对应成正比的上升,并且按照现有的对账文件解析入库模式,单机处理对服务器的运行压力也将越来越大,除了时间的增长外,服务器的高负荷运行也带来了很多不稳定因素,数据准确入库效率低。
发明内容
本申请的主要目的为提供数据入数据库的方法,旨在解决现有数据准确入库效率低,易受主机内存和运行能力限制的技术问题。
本申请提出一种数据入数据库的方法,包括:
获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;
获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值;
将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;
控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区。
优选地,所述特征值包括具有连续排布规律的文件编号,文件编号的指定末尾位置上的数字除以所述数据库中数据分区的数量,对应得到的指定余数作为所述拆分模值,所述将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:
将第一子文件的文件编码的指定末尾位置上的数字除以所述数据库中数据分区的数量,得到的余数为第一余数,其中,所述第一子文件为所有所述第二文件中的任一文件;
根据任务脚本获取所述第一余数对应的第一数据分区,其中,所述第一余数为所述指定余数中的任一余数,所述第一数据分区为所有所述数据分区中的任一数据分区;
将所述第一子文件对应的数据导入与所述第一数据分区对应的主机数据表中形成第一子任务,其中,所述第一子任务包含于所有子任务中;
根据所述第一子任务的形成过程,形成各所述第二文件分别对应的子任务。
优选地,所述控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤,包括:
通过各所述主机抓取各所述子任务后形成任务队列;
控制各所述主机按照所述任务队列依次调用服务器的文件解析组件进行文件解析;
将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区。
优选地,所述将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区的步骤之后,包括:
接收各所述Redis订阅频道分别对应的运行记录;
判断是否存在运行记录为运行失败的指定Redis订阅频道;
若是,则控制所述指定Redis订阅频道重复运行;
判断所述指定Redis订阅频道重复运行的次数是否超过预设次数;
若是,则反馈所述指定Redis订阅频道对应的子任务失败,并标记所述指定Redis订阅频道对应的子任务中的第二文件;
接收标记后的第二文件的修改内容,形成更改后的第二文件,重新运行所述指定Redis订阅频道对应的子任务,将更改后的第二文件写入数据库的数据分区,其中,重新运行时更改前后第二文件对应的数据分区相同。
优选地,所述获取待拆分的第一文件对应的特征值的步骤之前,包括:
判断指定文件的数据量是否大于预设数据量,其中,所述预设数据量为大文件对应的最低数量级;
若是,则将所述指定文件的文件名后缀添加拆分标识符;
确定拆分所述指定文件对应的特征值类型;
根据所述指定文件对应的特征值类型,将各携带拆分标识符的指定文件添加至对应的文件拆分队列。
优选地,所述任务注册域包括连接各主机的节点,所述控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤之后,包括:
判断所述任务注册域内各主机是否正常;
若否,则标记出现异常的主机对应的节点信息,并排除所述异常的主机;
判断排除所述异常的主机后,所述任务注册域内剩余主机数量是否满足所述数据分区的数量所需的主机数量;
若否,则发出增加节点的提示,以增添主机。
优选地,所述特征值包括文件数据量,所述文件数据量通过文件总行数表示,所述拆分模值等于文件总行数除以所述数据库中数据分区的数量,所得到的余数,所述将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:
根据所述拆分模值确定第二子文件的理论总行数,其中,所述第二子文件包含于所有所述第二文件中;
根据所述理论总行数确定所述第一文件的指定行,为所述第二子文件的终结行;
判断所述终结行内是否包括终结符号;
若否,则根据分别计算所述终结行与第一行的第一关联系数,以及所述终结行与第二行的第二关联系数,其中,与所述终结行相邻的前一行为所述第一行,与所述终结行相邻的后一行为所述第二行,x为所述终结行中关键字对应的向量,y为所述第一行或所述第二行中关键字的向量,r表示关联系数,n为(x,y)的成对数量,x、y分别为正数,n为大于1的自然数;
若所述第一关联系数大于或等于所述第二关联系数,则以位于所述终结行之前的最近的终结符号作为所述第二子文件的终止处;若所述第一关联系数小于所述第二关联系数,则以位于所述终结行之后的最近的终结符号作为所述第二子文件的终止处。
本申请还提供了一种数据入数据库的装置,包括:
第一获取模块,用于获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;
第二获取模块,用于获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值;
拆分模块,用于将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;
控制模块,用于控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区。
本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法的步骤。
本申请通过任务属性获取任务均分的特征值,并根据特征值计算拆分模值,决定拆分后的子文件数据将被导入的数据库中的数据分区进行分区,实现子文件与数据分区的对应,并通过匹配多节点分别对应的链路,将均分化的数据并行写入数据库的不同数据分区,提高数据入库的效率。
附图说明
图1本申请一实施例的数据入数据库的方法流程示意图;
图2本申请一实施例的数据入数据库的装置结构示意图;
图3本申请一实施例的计算机设备内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
参照图1,本申请一实施例的数据入数据库的方法,包括:
S1:获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;
S2:获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值;
S3:将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;
S4:控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区。
本实施例通过多主机多线程的方式将大批数据量文件对应的子文件并行写入数据库的不同分区中,相比单主机多线程的写入方式,不仅提高传输效率且提高写入数据库的效率,避免了单主机多线程的写入方式对应的写入速度带来的瓶颈难题。上述特征值包括第一文件内包括的文件编号、或第一文件的文件数据量、或第一文件形成过程中的文件总运作时长等,可以对第一文件进行趋近平均分配的参数值。上述拆分模值包括特征值除以数据库的数据分区数量得到的余数,每个具体的余数值对应一个数据分区,以确保具有相同拆分模值的第二文件始终写入同一个数据分区,实现数据在时间段内的连续性,且方便集中调用。同时通过拆分模值对第一文件实现趋近均分式的拆分,使每个第二文件的数据量接近相同,各第二文件分别写入各主机对应的数据表,形成携带数据的子任务,并通过分别启动各主机与数据分区的线程通道,调用文件解析服务器将各第二文件分别写入数据库中对应的数据分区。通过任务属性获取任务均分的特征值,并根据特征值计算拆分模值,决定拆分后的子文件数据将被导入的数据库中的数据分区进行分区,实现子文件与数据分区的对应,并通过匹配多节点分别对应的链路,将均分化的数据并行写入数据库的不同数据分区,提高数据入库的效率。
进一步地,所述特征值包括具有连续排布规律的文件编号,文件编号的指定末尾位置上的数字除以所述数据库中数据分区的数量,对应得到的指定余数作为所述拆分模值,所述将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤S3,包括:
S30:将第一子文件的文件编码的指定末尾位置上的数字除以所述数据库中数据分区的数量,得到的余数为第一余数,其中,所述第一子文件为所有所述第二文件中的任一文件;S31:根据任务脚本获取所述第一余数对应的第一数据分区,其中,所述第一余数为所述指定余数中的任一余数,所述第一数据分区为所有所述数据分区中的任一数据分区;
S32:将所述第一子文件对应的数据导入与所述第一数据分区对应的主机数据表中形成第一子任务,其中,所述第一子任务包含于所有子任务中;
S33:根据所述第一子任务的形成过程,形成各所述第二文件分别对应的子任务。
本实施例通过以文件编号作为特征值,具体说明拆分的子文件与入库子任务之间建立匹配关联的过程。上述文件编码包括银行卡号码、电话卡号码、业务单据号码等具有连续排布规律的编码数据。以银行卡号码为例,银行发行的各银行卡号码具有连续排布性,假设数据库的数据分区具有十个分区,则通过选取银行卡号码的末尾两位数计算拆分模值,则得到0至9的十个余数,每个余数对应数据库中的一个数据分区,比如余数0对应编号为1的数据分区,依次类推进行匹配。余数和数据分区的对应关系可根据需要预先通过脚本文件实现对应。每个数据分区有与其对应的主机数据表,通过表名的不同区分各数据分区。通过将与该数据分区对应的子文件导入与该数据分区对应的主机数据表,形成子任务并存储于任务注册域的任务池内供各主机进行抓取,各主机根据与其关联的主机数据表抓取任务。本申请其他实施例以文件形成时长作为特征值,可根据第一文件的总形成时长,分成十个时间段进行文件拆分。本申请其他实施例或根据第一文件的总数据量进行均分,拆分方式及原理同上述类似,不赘述。上述任务注册域为汇集执行各子任务的主机的注册地址,可理解为同一注册局域网。通过多台主机同时向数据库的不同数据分区写入数据,避免了单主机多线程导入数据时,主机CPU与多线程运行不匹配的瓶颈。单主机多线程单纯靠增加线程提高并行执行效率,但单纯靠增加线程并不必然提升数据入库的效率,会受限于单主机的CPU运行性能。本实施例通过将多线程与多主机一一匹配的模式,避免了主机CPU性能成为提升数据入库效率的瓶颈,大幅提高数据入库的效率以及数据入库的流畅性。
进一步地,所述控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤S4,包括:
S41:通过各所述主机抓取各所述子任务后形成任务队列;
S42:控制各所述主机按照所述任务队列依次调用服务器的文件解析组件进行文件解析;
S43:将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区。
本实施例中,各主机随机到任务池中抓取子任务,并依据主机和子任务的关联成功时的时间点的先后,形成任务队列。并通过依次调用服务器的解析组件实现文件解析和读取,然后通过各子任务对应的Redis订阅频道并发写入各数据分区。上述文件解析中获取子任务对应的数据分区编号以及文件数据内容,并通过并发写入数据库,提高数据入库效率,且通过数据分区、子文件以及子任务之间的匹配关联关系,确定数据的存储路径,方便数据的调用。上述任务注册域使用zookeeper进行主机的注册而形成,当任务注册域内需要增加、减少主机数量,或者任务注册域内某些主机不可用时仍能实现多主机随机抢占子任务流程,实现任务注册域内各主机的CPU和内存达到资源可利用的最大化。多机随机抢占子任务流程,每台主机进入到主任务解析入库流程,每台主机根据各自抢占到的子任务的入库文件信息(包括子文件路径等),通过阻塞队列ArrayBlockingQueue的形式读取数据,并根据特殊字段计算出的拆分模值,将数据写入拆分模值对应的入库的数据分表,然后多线程进行插库操作。
进一步地,所述将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区的步骤S43之后,包括:
S44:接收各所述Redis订阅频道分别对应的运行记录;
S45:判断是否存在运行记录为运行失败的指定Redis订阅频道;
S46:若是,则控制所述指定Redis订阅频道重复运行;
S47:判断所述指定Redis订阅频道重复运行的次数是否超过预设次数;
S48:若是,则反馈所述指定Redis订阅频道对应的子任务失败,并标记所述指定Redis订阅频道对应的子任务中的第二文件;
S49:接收标记后的第二文件的修改内容,形成更改后的第二文件,重新运行所述指定Redis订阅频道对应的子任务,将更改后的第二文件写入数据库的数据分区,其中,重新运行时更改前后第二文件对应的数据分区相同。
本实施例中,使用Redis缓存技术,将主机交易数据和银联交易数据分别加载进Redis缓存中,有效的减少服务器的内存的重复占用,同时解决多台服务器公共资源的相互访问问题。每个子任务都通过Redis发布专属的订阅频道,子任务运行失败或成功的运行记录均会写入Redis中并存储。上述各子任务通过与之对应的Redis订阅频道运行时互不干扰,某个子任务运行失败可通过单独对该子任务重复运行的操作进行弥补,不影响其他子任务的运行情况。上述运行失败的子任务在预设次数重跑后依然失败,可将该子任务对应的第二文件进行审查或修改后,重新作为一独立任务进行运行,将数据写入重新运行前已分配的数据分区内。
进一步地,所述获取待拆分的第一文件对应的特征值的步骤S1之前,包括:
S11:判断指定文件的数据量是否大于预设数据量,其中,所述预设数据量为大文件对应的最低数量级;
S12:若是,则将所述指定文件的文件名后缀添加拆分标识符;
S13:确定拆分所述指定文件对应的特征值类型;
S14:根据所述指定文件对应的特征值类型,将各携带拆分标识符的指定文件添加至对应的文件拆分队列。
上述预设数据量为万级或百万级数据量,大于预设数据量则判定为大文件,需要通过linux系统工具按照行数对文件进行拆分,根据脚本中传入的参数将文件拆分成符合要求大小和命名的子文件,即上述第二文件。上述拆分标识符可通过自定义设置,本实施例中根据求得的拆分模值进行标识。比如配置的特殊字段为卡号,则用卡号末尾后两位数值除以表个数,得到拆分模值。上述表个数是已知的,与数据库的数据分区对应的数量相同,建表的表名带有数字,如:union_com_trade_detail_0、nion_com_trade_detail_1等共10个拆分模值,包括0到9的十个数值。上述特征值类型包括文件编号、文件数据量、文件总运作时长等。不同的特征值类型,拆分文件使用的特征值不同,但拆分原理相同,均为实现趋近均分地拆分文件,且各子文件保持数据的完整和独立性,但拆分过程略有差异。比如依据文件编号拆分,是以各文件编号除以表个数得到拆分模值,所以每个子文件中包括一个或多个文件编号的完整内容,可通过整体拷贝文件编号对应的文件即可实现拆分。再比如根据文件数据量实现文件拆分,依据文件数据量除以表个数,得到每个表的容量,再通过获取文件数据量对应的行数,依据行数拆分得到对应的独立完整的子文件。再比如根据运行时间总长进行文件拆分,根据表个数分成时间跨度相等的不同时间段内的文件,组成子文件。通过时间跨度结合标点识别或语义识别,得到各个独立完整的子文件。对应不同的特征值类型启动了不同的拆分队列,使拆分更能满足要求。而且上述拆分子文件的过程中引入了拆分模值,使得在第一文件形成规律不变的情况下,比如持续以所有卡号的连续排布规律形成第一文件,则依据拆分模值得到的各子文件,在将各子文件分别对应的数据写入数据分区时,具有存储区域的稳定性和时间上的连续性,方便后续从数据库中调用上述子文件的数据。
进一步地,所述任务注册域包括连接各主机的节点,所述控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤S4之后,包括:
S5:判断所述任务注册域内各主机是否正常;
S6:若否,则标记出现异常的主机对应的节点信息,并排除所述异常的主机;
S7:判断排除所述异常的主机后,所述任务注册域内剩余主机数量是否满足所述数据分区的数量所需的主机数量;
S6:若否,则发出增加节点的提示,以增添主机。
本申请通过多主机形成任务注册域的方式,通过多个主机分摊处理文件时的内存占用需求以及CPU调用需求。文件在入库时会先加载到主机操作系统内存中,在文件解析入库过程中主机内存的使用率是很高的,如果单主机多线程很容易给操作系统带来很大压力,也极易可能造成系统崩溃。本申请实施例通过使用多节点入库的方式,可以将单节点入库占用高内存转成多个节点分别来承担内存消耗,分散运行压力。而且可通过扩增节点的方式增加主机数量,以满足大数据量的需求,且在数据库的数据分区数量较多时,可通过增加节点以匹配增加主机的方式,满足主机与数据库的数据分区一一对应的需求。且某节点对应的主机出现故障时,可通过更换该节点的主机,或阻断该节点主机的连接,使任务注册域不易受到影响,更方便维护。
进一步地,所述特征值包括文件数据量,所述文件数据量通过文件总行数表示,所述拆分模值等于文件总行数除以所述数据库中数据分区的数量,所得到的余数,所述将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤S3,包括:
S301:根据所述拆分模值确定第二子文件的理论总行数,其中,所述第二子文件包含于所有所述第二文件中;
S302:根据所述理论总行数确定所述第一文件的指定行,为所述第二子文件的终结行;
S303:判断所述终结行内是否包括终结符号;
S304:若否,则根据分别计算所述终结行与第一行的第一关联系数,以及所述终结行与第二行的第二关联系数,其中,与所述终结行相邻的前一行为所述第一行,与所述终结行相邻的后一行为所述第二行,x为所述终结行中关键字对应的向量,y为所述第一行或所述第二行中关键字的向量,r表示关联系数,n为(x,y)的成对数量,x、y分别为正数,n为大于1的自然数;
S305:若所述第一关联系数大于或等于所述第二关联系数,则以位于所述终结行之前的最近的终结符号作为所述第二子文件的终止处;若所述第一关联系数小于所述第二关联系数,则以位于所述终结行之后的最近的终结符号作为所述第二子文件的终止处。
本申请的文件拆分以及分子任务多节点入库的方式,不仅适用于数字类大文件数据的入库,也适用于文本类的大文件数据的入库。上述关键字对应的向量根据关键字的数量形成多维向量,比如终结行包括多个关键字,则每个关键字重复出现的频次作为向量维度上的赋值,形成多维向量。上述终结符号包括表示完整语句的结束符号,比如包括“。”、“?”、“!”等。如果终结行内有终结符号,则直接以该终结符号为分界点进行文章拆分。即该终结符号以上的内容属于一个第二文件,该终结符号以下的内容属于另一个第二文件。本实施例的上、下以文档常见的书写次序为方向,先写的为上,后写的为下。
参照图2,本申请一实施例的数据入数据库的装置,包括:
第一获取模块1,用于获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;
第二获取模块2,用于获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值;
拆分模块3,用于将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;
控制模块4,用于控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区。
本实施例通过多主机多线程的方式将大批数据量文件对应的子文件并行写入数据库的不同分区中,相比单主机多线程的写入方式,不仅提高传输效率且提高写入数据库的效率,避免了单主机多线程的写入方式对应的写入速度带来的瓶颈难题。上述特征值包括第一文件内包括的文件编号、或第一文件的文件数据量、或第一文件形成过程中的文件总运作时长等,可以对第一文件进行趋近平均分配的参数值。上述拆分模值包括特征值除以数据库的数据分区数量得到的余数,每个具体的余数值对应一个数据分区,以确保具有相同拆分模值的第二文件始终写入同一个数据分区,实现数据在时间段内的连续性,且方便集中调用。同时通过拆分模值对第一文件实现趋近均分式的拆分,使每个第二文件的数据量接近相同,各第二文件分别写入各主机对应的数据表,形成携带数据的子任务,并通过分别启动各主机与数据分区的线程通道,调用文件解析服务器将各第二文件分别写入数据库中对应的数据分区。通过任务属性获取任务均分的特征值,并根据特征值计算拆分模值,决定拆分后的子文件数据将被导入的数据库中的数据分区进行分区,实现子文件与数据分区的对应,并通过匹配多节点分别对应的链路,将均分化的数据并行写入数据库的不同数据分区,提高数据入库的效率。
进一步地,所述特征值包括具有连续排布规律的文件编号,文件编号的指定末尾位置上的数字除以所述数据库中数据分区的数量,对应得到的指定余数作为所述拆分模值,拆分模块3,包括:
除以单元,用于将第一子文件的文件编码的指定末尾位置上的数字除以所述数据库中数据分区的数量,得到的余数为第一余数,其中,所述第一子文件为所有所述第二文件中的任一文件;
获取单元,用于根据任务脚本获取所述第一余数对应的第一数据分区,其中,所述第一余数为所述指定余数中的任一余数,所述第一数据分区为所有所述数据分区中的任一数据分区;
导入单元,用于将所述第一子文件对应的数据导入与所述第一数据分区对应的主机数据表中形成第一子任务,其中,所述第一子任务包含于所有子任务中;
形成单元,用于根据所述第一子任务的形成过程,形成各所述第二文件分别对应的子任务。
本实施例通过以文件编号作为特征值,具体说明拆分的子文件与入库子任务之间建立匹配关联的过程。上述文件编码包括银行卡号码、电话卡号码、业务单据号码等具有连续排布规律的编码数据。以银行卡号码为例,银行发行的各银行卡号码具有连续排布性,假设数据库的数据分区具有十个分区,则通过选取银行卡号码的末尾两位数计算拆分模值,则得到0至9的十个余数,每个余数对应数据库中的一个数据分区,比如余数0对应编号为1的数据分区,依次类推进行匹配。余数和数据分区的对应关系可根据需要预先通过脚本文件实现对应。每个数据分区有与其对应的主机数据表,通过表名的不同区分各数据分区。通过将与该数据分区对应的子文件导入与该数据分区对应的主机数据表,形成子任务并存储于任务注册域的任务池内供各主机进行抓取,各主机根据与其关联的主机数据表抓取任务。本申请其他实施例以文件形成时长作为特征值,可根据第一文件的总形成时长,分成十个时间段进行文件拆分。本申请其他实施例或根据第一文件的总数据量进行均分,拆分方式及原理同上述类似,不赘述。上述任务注册域为汇集执行各子任务的主机的注册地址,可理解为同一注册局域网。通过多台主机同时向数据库的不同数据分区写入数据,避免了单主机多线程导入数据时,主机CPU与多线程运行不匹配的瓶颈。单主机多线程单纯靠增加线程提高并行执行效率,但单纯靠增加线程并不必然提升数据入库的效率,会受限于单主机的CPU运行性能。本实施例通过将多线程与多主机一一匹配的模式,避免了主机CPU性能成为提升数据入库效率的瓶颈,大幅提高数据入库的效率以及数据入库的流畅性。
进一步地,控制模块4,包括:
抓取单元,用于通过各所述主机抓取各所述子任务后形成任务队列;
第一控制单元,用于控制各所述主机按照所述任务队列依次调用服务器的文件解析组件进行文件解析;
写入单元,用于将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区。
本实施例中,各主机随机到任务池中抓取子任务,并依据主机和子任务的关联成功时的时间点的先后,形成任务队列。并通过依次调用服务器的解析组件实现文件解析和读取,然后通过各子任务对应的Redis订阅频道并发写入各数据分区。上述文件解析中获取子任务对应的数据分区编号以及文件数据内容,并通过并发写入数据库,提高数据入库效率,且通过数据分区、子文件以及子任务之间的匹配关联关系,确定数据的存储路径,方便数据的调用。上述任务注册域使用zookeeper进行主机的注册而形成,当任务注册域内需要增加、减少主机数量,或者任务注册域内某些主机不可用时仍能实现多主机随机抢占子任务流程,实现任务注册域内各主机的CPU和内存达到资源可利用的最大化。多机随机抢占子任务流程,每台主机进入到主任务解析入库流程,每台主机根据各自抢占到的子任务的入库文件信息(包括子文件路径等),通过阻塞队列ArrayBlockingQueue的形式读取数据,并根据特殊字段计算出的拆分模值,将数据写入拆分模值对应的入库的数据分表,然后多线程进行插库操作。
进一步地,控制模块4,包括:
第一接收单元,用于接收各所述Redis订阅频道分别对应的运行记录;
第一判断单元,用于判断是否存在运行记录为运行失败的指定Redis订阅频道;
第二控制单元,用于若是,则控制所述指定Redis订阅频道重复运行;
第二判断单元,用于判断所述指定Redis订阅频道重复运行的次数是否超过预设次数;
反馈单元,用于若是,则反馈所述指定Redis订阅频道对应的子任务失败,并标记所述指定Redis订阅频道对应的子任务中的第二文件;
第二接收单元,用于接收标记后的第二文件的修改内容,形成更改后的第二文件,重新运行所述指定Redis订阅频道对应的子任务,将更改后的第二文件写入数据库的数据分区,其中,重新运行时更改前后第二文件对应的数据分区相同。
本实施例中,使用Redis缓存技术,将主机交易数据和银联交易数据分别加载进Redis缓存中,有效的减少服务器的内存的重复占用,同时解决多台服务器公共资源的相互访问问题。每个子任务都通过Redis发布专属的订阅频道,子任务运行失败或成功的运行记录均会写入Redis中并存储。上述各子任务通过与之对应的Redis订阅频道运行时互不干扰,某个子任务运行失败可通过单独对该子任务重复运行的操作进行弥补,不影响其他子任务的运行情况。上述运行失败的子任务在预设次数重跑后依然失败,可将该子任务对应的第二文件进行审查或修改后,重新作为一独立任务进行运行,将数据写入重新运行前已分配的数据分区内。
进一步地,数据入数据库的装置,包括:
第一判断模块,用于判断指定文件的数据量是否大于预设数据量,其中,所述预设数据量为大文件对应的最低数量级;
第一添加模块,用于若是,则将所述指定文件的文件名后缀添加拆分标识符;
确定模块,用于确定拆分所述指定文件对应的特征值类型;
第二添加模块,用于根据所述指定文件对应的特征值类型,将各携带拆分标识符的指定文件添加至对应的文件拆分队列。
上述预设数据量为万级或百万级数据量,大于预设数据量则判定为大文件,需要通过linux系统工具按照行数对文件进行拆分,根据脚本中传入的参数将文件拆分成符合要求大小和命名的子文件,即上述第二文件。上述拆分标识符可通过自定义设置,本实施例中根据求得的拆分模值进行标识。比如配置的特殊字段为卡号,则用卡号末尾后两位数值除以表个数,得到拆分模值。上述表个数是已知的,与数据库的数据分区对应的数量相同,建表的表名带有数字,如:union_com_trade_detail_0、union_com_trade_detail_1等共10个拆分模值,包括0到9的十个数值。上述特征值类型包括文件编号、文件数据量、文件总运作时长等。不同的特征值类型,拆分文件使用的特征值不同,但拆分原理相同,均为实现趋近均分地拆分文件,且各子文件保持数据的完整和独立性,但拆分过程略有差异。比如依据文件编号拆分,是以各文件编号除以表个数得到拆分模值,所以每个子文件中包括一个或多个文件编号的完整内容,可通过整体拷贝文件编号对应的文件即可实现拆分。再比如根据文件数据量实现文件拆分,依据文件数据量除以表个数,得到每个表的容量,再通过获取文件数据量对应的行数,依据行数拆分得到对应的独立完整的子文件。再比如根据运行时间总长进行文件拆分,根据表个数分成时间跨度相等的不同时间段内的文件,组成子文件。通过时间跨度结合标点识别或语义识别,得到各个独立完整的子文件。对应不同的特征值类型启动了不同的拆分队列,使拆分更能满足要求。而且上述拆分子文件的过程中引入了拆分模值,使得在第一文件形成规律不变的情况下,比如持续以所有卡号的连续排布规律形成第一文件,则依据拆分模值得到的各子文件,在将各子文件分别对应的数据写入数据分区时,具有存储区域的稳定性和时间上的连续性,方便后续从数据库中调用上述子文件的数据。
进一步地,所述任务注册域包括连接各主机的节点,数据入数据库的装置,包括:
第二判断模块,用于判断所述任务注册域内各主机是否正常;
排除模块,用于若否,则标记出现异常的主机对应的节点信息,并排除所述异常的主机;
第三判断模块,用于判断排除所述异常的主机后,所述任务注册域内剩余主机数量是否满足所述数据分区的数量所需的主机数量;
发出模块,用于若否,则发出增加节点的提示,以增添主机。
本申请通过多主机形成任务注册域的方式,通过多个主机分摊处理文件时的内存占用需求以及CPU调用需求。文件在入库时会先加载到主机操作系统内存中,在文件解析入库过程中主机内存的使用率是很高的,如果单主机多线程很容易给操作系统带来很大压力,也极易可能造成系统崩溃。本申请实施例通过使用多节点入库的方式,可以将单节点入库占用高内存转成多个节点分别来承担内存消耗,分散运行压力。而且可通过扩增节点的方式增加主机数量,以满足大数据量的需求,且在数据库的数据分区数量较多时,可通过增加节点以匹配增加主机的方式,满足主机与数据库的数据分区一一对应的需求。且某节点对应的主机出现故障时,可通过更换该节点的主机,或阻断该节点主机的连接,使任务注册域不易受到影响,更方便维护。
进一步地,所述特征值包括文件数据量,所述文件数据量通过文件总行数表示,所述拆分模值等于文件总行数除以所述数据库中数据分区的数量,所得到的余数,拆分模块3,包括:
第一确定单元,用于根据所述拆分模值确定第二子文件的理论总行数,其中,所述第二子文件包含于所有所述第二文件中;
第二确定单元,用于根据所述理论总行数确定所述第一文件的指定行,为所述第二子文件的终结行;
第三判断单元,用于判断所述终结行内是否包括终结符号;
计算单元,用于若否,则根据分别计算所述终结行与第一行的第一关联系数,以及所述终结行与第二行的第二关联系数,其中,与所述终结行相邻的前一行为所述第一行,与所述终结行相邻的后一行为所述第二行,x为所述终结行中关键字对应的向量,y为所述第一行或所述第二行中关键字的向量,r表示关联系数,n为(x,y)的成对数量,x、y分别为正数,n为大于1的自然数;
作为单元,用于若所述第一关联系数大于或等于所述第二关联系数,则以位于所述终结行之前的最近的终结符号作为所述第二子文件的终止处;若所述第一关联系数小于所述第二关联系数,则以位于所述终结行之后的最近的终结符号作为所述第二子文件的终止处。
本申请的文件拆分以及分子任务多节点入库的方式,不仅适用于数字类大文件数据的入库,也适用于文本类的大文件数据的入库。上述关键字对应的向量根据关键字的数量形成多维向量,比如终结行包括多个关键字,则每个关键字重复出现的频次作为向量维度上的赋值,形成多维向量。上述终结符号包括表示完整语句的结束符号,比如包括“。”、“?”、“!”等。如果终结行内有终结符号,则直接以该终结符号为分界点进行文章拆分。即该终结符号以上的内容属于一个第二文件,该终结符号以下的内容属于另一个第二文件。本实施例的上、下以文档常见的书写次序为方向,先写的为上,后写的为下。
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据入数据库的过程需要的所有数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现数据入数据库的方法。
上述处理器执行上述数据入数据库的方法,包括:获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值;将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区。
上述计算机设备,通过任务属性获取任务均分的特征值,并根据特征值计算拆分模值,决定拆分后的子文件数据将被导入的数据库中的数据分区进行分区,实现子文件与数据分区的对应,并通过匹配多节点分别对应的链路,将均分化的数据并行写入数据库的不同数据分区,提高数据入库的效率。
在一个实施例中,所述特征值包括具有连续排布规律的文件编号,文件编号的指定末尾位置上的数字除以所述数据库中数据分区的数量,对应得到的指定余数作为所述拆分模值,上述处理器将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:将第一子文件的文件编码的指定末尾位置上的数字除以所述数据库中数据分区的数量,得到的余数为第一余数,其中,所述第一子文件为所有所述第二文件中的任一文件;根据任务脚本获取所述第一余数对应的第一数据分区,其中,所述第一余数为所述指定余数中的任一余数,所述第一数据分区为所有所述数据分区中的任一数据分区;将所述第一子文件对应的数据导入与所述第一数据分区对应的主机数据表中形成第一子任务,其中,所述第一子任务包含于所有子任务中;根据所述第一子任务的形成过程,形成各所述第二文件分别对应的子任务。
在一个实施例中,上述处理器控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤,包括:通过各所述主机抓取各所述子任务后形成任务队列;控制各所述主机按照所述任务队列依次调用服务器的文件解析组件进行文件解析;将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区。
在一个实施例中,上述处理器将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区的步骤之后,包括:接收各所述Redis订阅频道分别对应的运行记录;判断是否存在运行记录为运行失败的指定Redis订阅频道;若是,则控制所述指定Redis订阅频道重复运行;判断所述指定Redis订阅频道重复运行的次数是否超过预设次数;若是,则反馈所述指定Redis订阅频道对应的子任务失败,并标记所述指定Redis订阅频道对应的子任务中的第二文件;接收标记后的第二文件的修改内容,形成更改后的第二文件,重新运行所述指定Redis订阅频道对应的子任务,将更改后的第二文件写入数据库的数据分区,其中,重新运行时更改前后第二文件对应的数据分区相同。
在一个实施例中,上述处理器获取待拆分的第一文件对应的特征值的步骤之前,包括:判断指定文件的数据量是否大于预设数据量,其中,所述预设数据量为大文件对应的最低数量级;若是,则将所述指定文件的文件名后缀添加拆分标识符;确定拆分所述指定文件对应的特征值类型;根据所述指定文件对应的特征值类型,将各携带拆分标识符的指定文件添加至对应的文件拆分队列。
在一个实施例中,所述任务注册域包括连接各主机的节点,上述处理器控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤之后,包括:判断所述任务注册域内各主机是否正常;若否,则标记出现异常的主机对应的节点信息,并排除所述异常的主机;判断排除所述异常的主机后,所述任务注册域内剩余主机数量是否满足所述数据分区的数量所需的主机数量;若否,则发出增加节点的提示,以增添主机。
在一个实施例中,所述特征值包括文件数据量,所述文件数据量通过文件总行数表示,所述拆分模值等于文件总行数除以所述数据库中数据分区的数量,所得到的余数,上述处理器将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:根据所述拆分模值确定第二子文件的理论总行数,其中,所述第二子文件包含于所有所述第二文件中;根据所述理论总行数确定所述第一文件的指定行,为所述第二子文件的终结行;判断所述终结行内是否包括终结符号;若否,则根据分别计算所述终结行与第一行的第一关联系数,以及所述终结行与第二行的第二关联系数,其中,与所述终结行相邻的前一行为所述第一行,与所述终结行相邻的后一行为所述第二行,x为所述终结行中关键字对应的向量,y为所述第一行或所述第二行中关键字的向量,r表示关联系数,n为(x,y)的成对数量,x、y分别为正数,n为大于1的自然数;若所述第一关联系数大于或等于所述第二关联系数,则以位于所述终结行之前的最近的终结符号作为所述第二子文件的终止处;若所述第一关联系数小于所述第二关联系数,则以位于所述终结行之后的最近的终结符号作为所述第二子文件的终止处。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现数据入数据库的方法,包括:获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值;将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区。
上述计算机可读存储介质,通过任务属性获取任务均分的特征值,并根据特征值计算拆分模值,决定拆分后的子文件数据将被导入的数据库中的数据分区进行分区,实现子文件与数据分区的对应,并通过匹配多节点分别对应的链路,将均分化的数据并行写入数据库的不同数据分区,提高数据入库的效率。
在一个实施例中,所述特征值包括具有连续排布规律的文件编号,文件编号的指定末尾位置上的数字除以所述数据库中数据分区的数量,对应得到的指定余数作为所述拆分模值,上述处理器将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:将第一子文件的文件编码的指定末尾位置上的数字除以所述数据库中数据分区的数量,得到的余数为第一余数,其中,所述第一子文件为所有所述第二文件中的任一文件;根据任务脚本获取所述第一余数对应的第一数据分区,其中,所述第一余数为所述指定余数中的任一余数,所述第一数据分区为所有所述数据分区中的任一数据分区;将所述第一子文件对应的数据导入与所述第一数据分区对应的主机数据表中形成第一子任务,其中,所述第一子任务包含于所有子任务中;根据所述第一子任务的形成过程,形成各所述第二文件分别对应的子任务。
在一个实施例中,上述处理器控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤,包括:通过各所述主机抓取各所述子任务后形成任务队列;控制各所述主机按照所述任务队列依次调用服务器的文件解析组件进行文件解析;将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区。
在一个实施例中,上述处理器将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区的步骤之后,包括:接收各所述Redis订阅频道分别对应的运行记录;判断是否存在运行记录为运行失败的指定Redis订阅频道;若是,则控制所述指定Redis订阅频道重复运行;判断所述指定Redis订阅频道重复运行的次数是否超过预设次数;若是,则反馈所述指定Redis订阅频道对应的子任务失败,并标记所述指定Redis订阅频道对应的子任务中的第二文件;接收标记后的第二文件的修改内容,形成更改后的第二文件,重新运行所述指定Redis订阅频道对应的子任务,将更改后的第二文件写入数据库的数据分区,其中,重新运行时更改前后第二文件对应的数据分区相同。
在一个实施例中,上述处理器获取待拆分的第一文件对应的特征值的步骤之前,包括:判断指定文件的数据量是否大于预设数据量,其中,所述预设数据量为大文件对应的最低数量级;若是,则将所述指定文件的文件名后缀添加拆分标识符;确定拆分所述指定文件对应的特征值类型;根据所述指定文件对应的特征值类型,将各携带拆分标识符的指定文件添加至对应的文件拆分队列。
在一个实施例中,所述任务注册域包括连接各主机的节点,上述处理器控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤之后,包括:判断所述任务注册域内各主机是否正常;若否,则标记出现异常的主机对应的节点信息,并排除所述异常的主机;判断排除所述异常的主机后,所述任务注册域内剩余主机数量是否满足所述数据分区的数量所需的主机数量;若否,则发出增加节点的提示,以增添主机。
在一个实施例中,所述特征值包括文件数据量,所述文件数据量通过文件总行数表示,所述拆分模值等于文件总行数除以所述数据库中数据分区的数量,所得到的余数,上述处理器将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:根据所述拆分模值确定第二子文件的理论总行数,其中,所述第二子文件包含于所有所述第二文件中;根据所述理论总行数确定所述第一文件的指定行,为所述第二子文件的终结行;判断所述终结行内是否包括终结符号;若否,则根据分别计算所述终结行与第一行的第一关联系数,以及所述终结行与第二行的第二关联系数,其中,与所述终结行相邻的前一行为所述第一行,与所述终结行相邻的后一行为所述第二行,x为所述终结行中关键字对应的向量,y为所述第一行或所述第二行中关键字的向量,r表示关联系数,n为(x,y)的成对数量,x、y分别为正数,n为大于1的自然数;若所述第一关联系数大于或等于所述第二关联系数,则以位于所述终结行之前的最近的终结符号作为所述第二子文件的终止处;若所述第一关联系数小于所述第二关联系数,则以位于所述终结行之后的最近的终结符号作为所述第二子文件的终止处。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (8)
1.一种数据入数据库的方法,其特征在于,包括:
获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;
获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值,其中,所述拆分模值包括特征值除以数据库的数据分区数量得到的余数,每个具体的余数值对应一个数据分区;
将所述第一文件拆分成指定数量的第二文件,并将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;
通过各所述主机抓取各所述子任务后形成任务队列;
控制各所述主机按照所述任务队列依次调用服务器的文件解析组件进行文件解析;
将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区;
接收各所述Redis订阅频道分别对应的运行记录;
判断是否存在运行记录为运行失败的指定Redis订阅频道;
若是,则控制所述指定Redis订阅频道重复运行;
判断所述指定Redis订阅频道重复运行的次数是否超过预设次数;
若是,则反馈所述指定Redis订阅频道对应的子任务失败,并标记所述指定Redis订阅频道对应的子任务中的第二文件;
接收标记后的第二文件的修改内容,形成更改后的第二文件,重新运行所述指定Redis订阅频道对应的子任务,将更改后的第二文件写入数据库的数据分区,其中,重新运行时更改前后第二文件对应的数据分区相同。
2.根据权利要求1所述的数据入数据库的方法,其特征在于,所述特征值包括具有连续排布规律的文件编号,文件编号的指定末尾位置上的数字除以所述数据库中数据分区的数量,得到的指定余数作为所述拆分模值,所述将所述第一文件拆分成指定数量的第二文件,并将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:
将第一子文件的文件编码的指定末尾位置上的数字除以所述数据库中数据分区的数量,得到的余数为第一余数,其中,所述第一子文件为所有所述第二文件中的任一文件;
根据任务脚本获取所述第一余数对应的第一数据分区,其中,所述第一余数为所述指定余数中的任一余数,所述第一数据分区为所有所述数据分区中的任一数据分区;
将所述第一子文件对应的数据导入与所述第一数据分区对应的主机数据表中形成第一子任务,其中,所述第一子任务包含于所有子任务中;
根据所述第一子任务的形成过程,形成各所述第二文件分别对应的子任务。
3.根据权利要求1所述的数据入数据库的方法,其特征在于,所述获取待拆分的第一文件对应的特征值的步骤之前,包括:
判断指定文件的数据量是否大于预设数据量,其中,所述预设数据量为大文件对应的最低数量级;
若是,则将所述指定文件的文件名后缀添加拆分标识符;
确定拆分所述指定文件对应的特征值类型;
根据所述指定文件对应的特征值类型,将各携带拆分标识符的指定文件添加至对应的文件拆分队列。
4.根据权利要求1所述的数据入数据库的方法,其特征在于,所述任务注册域包括连接各主机的节点,控制任务注册域内各主机分别抓取各所述子任务,并通过各所述主机分别对应的线程通道,将各所述第二文件对应的数据分别导入数据库的数据分区的步骤之后,包括:
判断所述任务注册域内各主机是否正常;
若否,则标记出现异常的主机对应的节点信息,并排除所述异常的主机;
判断排除所述异常的主机后,所述任务注册域内剩余主机数量是否满足所述数据分区的数量所需的主机数量;
若否,则发出增加节点的提示,以增添主机。
5.根据权利要求1所述的数据入数据库的方法,其特征在于,所述特征值包括文件数据量,所述文件数据量通过文件总行数表示,所述拆分模值等于文件总行数除以所述数据库中数据分区的数量,所得到的余数,所述将所述第一文件拆分成指定数量的第二文件,并将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务的步骤,包括:
根据所述拆分模值确定第二子文件的理论总行数,其中,所述第二子文件包含于所有所述第二文件中;
根据所述理论总行数确定所述第一文件的指定行,为所述第二子文件的终结行;
判断所述终结行内是否包括终结符号;
若否,则根据分别计算所述终结行与第一行的第一关联系数,以及所述终结行与第二行的第二关联系数,其中,与所述终结行相邻的前一行为所述第一行,与所述终结行相邻的后一行为所述第二行,x为所述终结行中关键字对应的向量,y为所述第一行或所述第二行中关键字的向量,r表示关联系数,n为(x,y)的成对数量,x、y分别为正数,n为大于1的自然数;
若所述第一关联系数大于或等于所述第二关联系数,则以位于所述终结行之前的最近的终结符号作为所述第二子文件的终止处;若所述第一关联系数小于所述第二关联系数,则以位于所述终结行之后的最近的终结符号作为所述第二子文件的终止处。
6.一种数据入数据库的装置,其特征在于,包括:
第一获取模块,用于获取待拆分的第一文件对应的特征值,以对所述第一文件进行平均分配;
第二获取模块,用于获取数据库中的数据分区数量,并依据所述第一文件对应的特征值以及所述数据库中的数据分区数量,计算所述第一文件的拆分模值,其中,所述拆分模值包括特征值除以数据库的数据分区数量得到的余数,每个具体的余数值对应一个数据分区;
拆分模块,用于将所述第一文件拆分成指定数量的第二文件,并根据所述拆分模值将各所述第二文件一一写入与所述拆分模值对应的数据分区的主机数据表内,形成携带数据的各子任务,其中,各所述子任务包括向所述数据库中数据分区导入数据,所述指定数量小于或等于所述数据库中的数据分区数量;
控制模块,用于通过各所述主机抓取各所述子任务后形成任务队列;
控制各所述主机按照所述任务队列依次调用服务器的文件解析组件进行文件解析;
将解析后的各第二文件通过与各所述子任务分别对应的Redis订阅频道并发写入各所述数据分区;
接收各所述Redis订阅频道分别对应的运行记录;
判断是否存在运行记录为运行失败的指定Redis订阅频道;
若是,则控制所述指定Redis订阅频道重复运行;
判断所述指定Redis订阅频道重复运行的次数是否超过预设次数;
若是,则反馈所述指定Redis订阅频道对应的子任务失败,并标记所述指定Redis订阅频道对应的子任务中的第二文件;
接收标记后的第二文件的修改内容,形成更改后的第二文件,重新运行所述指定Redis订阅频道对应的子任务,将更改后的第二文件写入数据库的数据分区,其中,重新运行时更改前后第二文件对应的数据分区相同。
7.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述的方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010237426.4A CN111581155B (zh) | 2020-03-30 | 2020-03-30 | 数据入数据库的方法、装置和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010237426.4A CN111581155B (zh) | 2020-03-30 | 2020-03-30 | 数据入数据库的方法、装置和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111581155A CN111581155A (zh) | 2020-08-25 |
CN111581155B true CN111581155B (zh) | 2023-07-25 |
Family
ID=72122626
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010237426.4A Active CN111581155B (zh) | 2020-03-30 | 2020-03-30 | 数据入数据库的方法、装置和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111581155B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035437B (zh) * | 2020-08-31 | 2024-02-13 | 平安医疗健康管理股份有限公司 | 病案数据的传输方法、装置、计算机设备及存储介质 |
CN112347256B (zh) * | 2020-11-06 | 2024-07-16 | 中国平安人寿保险股份有限公司 | 运行任务的方法、装置、设备和存储介质 |
CN112597219A (zh) * | 2020-12-15 | 2021-04-02 | 中国建设银行股份有限公司 | 用于将大数据量的文本文件导入分布式数据库的方法及装置 |
CN113761055A (zh) * | 2021-02-02 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 数据写入方法、设备以及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957863A (zh) * | 2010-10-14 | 2011-01-26 | 广州从兴电子开发有限公司 | 数据并行处理方法、装置及系统 |
US9489443B1 (en) * | 2013-05-24 | 2016-11-08 | Amazon Technologies, Inc. | Scheduling of splits and moves of database partitions |
CN108304554A (zh) * | 2018-02-02 | 2018-07-20 | 平安证券股份有限公司 | 文件拆分方法、装置、计算机设备和存储介质 |
CN109271447A (zh) * | 2018-09-04 | 2019-01-25 | 中国平安人寿保险股份有限公司 | 数据同步方法、装置、计算机设备和存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070083574A1 (en) * | 2005-10-07 | 2007-04-12 | Oracle International Corporation | Replica database maintenance with parallel log file transfers |
US9576000B2 (en) * | 2014-04-25 | 2017-02-21 | International Business Machines Corporation | Adaptive fragment assignment for processing file data in a database |
US20170228422A1 (en) * | 2016-02-10 | 2017-08-10 | Futurewei Technologies, Inc. | Flexible task scheduler for multiple parallel processing of database data |
CA2997061C (en) * | 2017-03-01 | 2021-06-29 | Next Pathway Inc. | Method and system for parallelization of ingestion of large data sets |
US10810092B2 (en) * | 2018-04-23 | 2020-10-20 | Sap Se | Checkpoints for document store |
-
2020
- 2020-03-30 CN CN202010237426.4A patent/CN111581155B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957863A (zh) * | 2010-10-14 | 2011-01-26 | 广州从兴电子开发有限公司 | 数据并行处理方法、装置及系统 |
US9489443B1 (en) * | 2013-05-24 | 2016-11-08 | Amazon Technologies, Inc. | Scheduling of splits and moves of database partitions |
CN108304554A (zh) * | 2018-02-02 | 2018-07-20 | 平安证券股份有限公司 | 文件拆分方法、装置、计算机设备和存储介质 |
CN109271447A (zh) * | 2018-09-04 | 2019-01-25 | 中国平安人寿保险股份有限公司 | 数据同步方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111581155A (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111581155B (zh) | 数据入数据库的方法、装置和计算机设备 | |
CN108595157B (zh) | 区块链数据的处理方法、装置、设备和存储介质 | |
KR101959153B1 (ko) | 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템 | |
US20090064137A1 (en) | Method and Apparatus for Determining a Service Cluster Topology Based on Static Analysis | |
CN111190753A (zh) | 分布式任务处理方法、装置、存储介质和计算机设备 | |
US11449407B2 (en) | System and method for monitoring computing platform parameters and dynamically generating and deploying monitoring packages | |
CN114385760A (zh) | 增量数据实时同步的方法、装置、计算机设备及存储介质 | |
CN101667113A (zh) | 一种多线程日志记录方法及装置 | |
CN112367363A (zh) | 一种信息共享方法、装置、服务器及存储介质 | |
CN107977275B (zh) | 基于消息队列的任务处理方法及相关设备 | |
US20210149746A1 (en) | Method, System, Computer Readable Medium, and Device for Scheduling Computational Operation Based on Graph Data | |
CN111522881B (zh) | 业务数据处理方法、装置、服务器及存储介质 | |
CN113918532A (zh) | 画像标签聚合方法、电子设备及存储介质 | |
CN107168788A (zh) | 分布式系统中资源的调度方法以及装置 | |
CN116737838A (zh) | 一种数据同步方法、装置,计算机设备和存储介质 | |
CN114968725A (zh) | 任务依赖关系校正方法、装置、计算机设备及存储介质 | |
CN113590372A (zh) | 基于日志的链路追踪方法、装置、计算机设备及存储介质 | |
CN113627535A (zh) | 基于数据安全和隐私保护的数据分级分类系统与方法 | |
CN113868249A (zh) | 一种数据存储方法、装置、计算机设备以及存储介质 | |
US10606939B2 (en) | Applying matching data transformation information based on a user's editing of data within a document | |
CN106055322A (zh) | 一种流程调度方法及装置 | |
CN110188069A (zh) | 一种csv文件存储方法、装置及计算机设备 | |
CN117573368A (zh) | 一种spark计算调度的方法、装置、电子设备及介质 | |
CN114064584A (zh) | 数据比对方法、装置、计算机设备和存储介质 | |
CN112035232A (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 |