CN115408383A - 高并发数据入库方法、装置、电子设备及存储介质 - Google Patents
高并发数据入库方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115408383A CN115408383A CN202210928370.6A CN202210928370A CN115408383A CN 115408383 A CN115408383 A CN 115408383A CN 202210928370 A CN202210928370 A CN 202210928370A CN 115408383 A CN115408383 A CN 115408383A
- Authority
- CN
- China
- Prior art keywords
- time
- data
- time period
- text file
- formatted data
- 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 41
- 238000013500 data storage Methods 0.000 title abstract description 15
- 230000008676 import Effects 0.000 claims abstract description 113
- 238000004590 computer program Methods 0.000 claims description 15
- 230000002159 abnormal effect Effects 0.000 claims description 8
- 238000004458 analytical method Methods 0.000 claims description 6
- 238000000926 separation method Methods 0.000 abstract description 11
- 230000004044 response Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000013507 mapping Methods 0.000 description 4
- 238000013479 data entry Methods 0.000 description 3
- 230000003203 everyday effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
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/2228—Indexing structures
-
- 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/242—Query formulation
- G06F16/2433—Query languages
-
- 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/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种高并发数据入库方法、装置、电子设备及存储接孩子,其中方法包括:接收报文数据并确定接收时间;对报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;将格式化数据异步逐行写入指定文件夹中与接收时间所处时间段对应的文本文件中;时间段是基于预设时间间隔确定的;基于导入时间,确定导入时间之前的未导入时间段;并将未导入时间段对应的文本文件中的格式化数据导入到数据库中,实现了数据报文请求和数据报文入库的操作分离,以及当前时间段报文数据写入文件和之前时间段文本文件导入数据库的操作分离,降低了数据库产生瓶颈的几率,从而在收集报文数据的同时提高了用户的体验度。
Description
技术领域
本发明涉及大数据技术领域,尤其涉及一种高并发数据入库方法、装置、电子设备及存储介质。
背景技术
联机数据落库,是指***访问联机请求的时候,将返回的业务报文存入数据库,用于后续数据分析等用途。目前,传统的入库方式是在***接收到联机访问请求的报文数据后直接***到数据库中,但这种入库方式在联机访问量巨大,即高并发的情况下,数据库需要高频写入,会产生瓶颈,导致数据写入缓慢,甚至导致应用程序卡死、服务器宕机,进而导致用户体验差。
发明内容
本发明提供一种高并发数据入库方法、装置、电子设备及存储介质,用以解决现有技术中传统联机数据高并发入库时数据库产生瓶颈影响用户体验的缺陷。
本发明提供一种高并发数据入库方法,包括:
接收报文数据并确定接收时间;
对所述报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;
将所述格式化数据异步逐行写入指定文件夹中与所述接收时间所处时间段对应的文本文件中;所述时间段是基于预设时间间隔确定的;
基于导入时间,确定所述导入时间之前的未导入时间段;并将所述未导入时间段对应的文本文件中的格式化数据导入到数据库中。
根据本发明提供的一种高并发数据入库方法,所述将所述格式化数据异步逐行写入所述接收时间所处时间段对应的文本文件中,包括:
基于所述预设时间间隔和所述接收时间,确定所述接收时间所处时间段;
若所述接收时间所处时间段不存在对应的文本文件,则在所述指定文件夹中创建所述接收时间所处时间段对应的文本文件;
将所述格式化数据异步逐行写入所述接收时间所处时间段对应的文本文件中。
根据本发明提供的一种高并发数据入库方法,所述将所述格式化数据异步逐行写入所述接收时间所处时间段对应的文本文件中,包括:
将所述格式化数据写入缓存队列中,在所述缓存队列中格式化数据的数量达到预设阈值或者所述接收时间所处时间段结束的情况下,异步将所述缓存队列中的格式化数据逐行写入所述接收时间所处时间对应的文本文件中,并清空所述缓存队列。
根据本发明提供的一种高并发数据入库方法,所述基于导入时间,确定所述导入时间之前的未导入时间段;并将所述未导入时间段对应的文本文件中的格式化数据导入到数据库中,包括:
确定所述导入时间;
在***时间与所述导入时间误差在预设范围内时,则基于最后导入时间所处时间段的起始时间和所述导入时间所处时间段的起始时间段,确定所述未导入时间段,并将所述未导入时间段对应的文本文件中的格式化数据批量导入到所述数据库中;
在所述未导入时间段对应的文本文件导入数据完成后,将所述最后导入时间更新为所述导入时间。
根据本发明提供的一种高并发数据入库方法,所述将所述未导入时间段对应的文本文件中的格式化数据批量导入到所述数据库中,包括:
逐行读取所述未导入时间段对应的文本文件中的格式化数据并写入预编译的SQL语句中,得到预编译SQL指令;并将所述预编译SQL指令加入到预编译SQL指令集合中;
在所述预编译SQL指令集合中的预编译SQL指令达到预设数量或者所述未导入时间段对应的文本文件读取完毕,则执行所述预编译SQL指令集合并清空所述预编译SQL指令集合,以将所述未导入时间段对应的文本文件中的格式化数据批量导入到所述数据库中。
根据本发明提供的一种高并发数据入库方法,所述逐行读取所述未导入时间段对应的文本文件中的格式化数据并写入预编译的SQL语句中,得到预编译SQL指令集合,包括:
确定当前读取行数;
读取所述未导入时间段对应的文本文件中所述当前读取行数对应的格式化数据,并对所述当前读取行数对应的格式化数据进行解析,若解析后的数据中为报文异常的数据,则将所述当前读取行数对应的格式化数据写入日志中;
否则,将所述解析后的数据写入所述预编译的SQL语句中,得到预编译SQL指令,并将所述预编译SQL指令加入到所述预编译SQL指令集合中;
将下一读取行数作为当前读取行数。
本发明还提供一种高并发数据入库装置,包括:
接收模块,用于接收报文数据并确定接收时间;
格式化模块,用于对所述报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;
固定数据模块,用于将所述格式化数据异步逐行写入指定文件夹中与所述接收时间所处时间段对应的文本文件中;所述时间段是基于预设时间间隔确定的;
导入模块,用于基于导入时间,确定所述导入时间之前的未导入时间段;并将所述未导入时间段对应的文本文件中的格式化数据导入到数据库中。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述高并发数据入库方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述高并发数据入库方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述高并发数据入库方法。
本发明提供的高并发数据入库方法、装置、电子设备及存储介质,通过接收报文数据,对报文数据解析并格式化,再将格式化数据以异步的方式写入当前***时间所在时间段对应的文本文件中,同时定时将之前时间段中未导入时间段对应的文本文件中的数据导入到数据库中,实现了数据报文请求和数据报文入库的操作分离,以及当前时间段报文数据写入文件和之前时间段文本文件导入数据库的操作分离,进而应用程序不用等到入库完成才能得到响应,提高了响应的速度,同时文本文件中格式化数据批量导入数据库提高了入库效率,降低了数据库产生瓶颈的几率,提高了应用程序的其他数据库请求响应效率,从而在收集报文数据的同时提高了用户的体验度。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的高并发数据入库方法的流程示意图;
图2是本发明实施例提供的高并发数据入库装置;
图3是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,传统的入库方式是在***接收到联机访问请求的报文数据后直接***到数据库中,但这种入库方式在联机访问量巨大,即高并发的情况下,数据库需要高频写入,会产生瓶颈,导致数据写入缓慢,甚至导致应用程序卡死、服务器宕机,进而导致用户体验差,同时若只将报文数据写入一个文本文件中,然后对文本文件进行数据导入依旧会存在当文本文件正在被导入时,报文数据无法写入,以及报文数据正在被写入时,无法进行导入,会存在读写文本文件的瓶颈存在。
因此,如何解决高并发报文入库所引发的瓶颈问题所导致的用户体验差的问题是本领域技术人员亟待解决的技术问题。
针对于上述技术问题,本发明实施例提供了一种高并发数据入库方法。图1是本发明提供的高并发数据入库方法的流程示意图。如图1所示,该方法包括:
步骤110,接收报文数据并确定接收时间;
步骤120,对所述报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;
具体地,当接收到报文数据后,根据接收报文时的***时间确定接收时间,并对报文数据进行解析,得到解析数据,然后根据预设格式对解析数据进行格式化,形成报文数据对应的格式化数据。
需要说明的是,格式化数据可以是XML格式或者JSON格式,又或者自定义存储协议格式,本发明实施例对此不作限制。预设格式是根据数据库中表的结构设定的。
步骤130,将格式化数据异步逐行写入指定文件夹中与接收时间所处时间段对应的文本文件中;时间段是基于预设时间间隔确定的;
步骤140,基于导入时间,确定导入时间之前的未导入时间段;并将未导入时间段对应的文本文件中的格式化数据导入到数据库中。
考虑到若仅将格式化数据写入一个文本文件中,那么文本文件进行读取导入数据库时,依旧会在文本文件读写时产生瓶颈,从而增加应用程序的请求响应时间,影响用户的使用体验。因此,本发明实施例通过时间维度将格式化数据写入不同时间段的文本文件中,并仅导入之前时间段的文本文件到数据库中,实现了文本文件的读写分离。
具体地,根据预设时间间隔确定一天从00:00:00到23:59:59的时间段,例如:若预设时间间隔为2小时,则一天中每两小时为一个时间段,即一天分为[00:00:00-01:59:59]、[02:00:00-03:59:59]……[22:00:00-23:59:59]12个时间段;若预设时间间隔为24小时,则一天只有[00:00:00-23:59:59]这一个时间段,本发明实施例对预设时间间隔不作限制。
在格式化数据要写入文本文件之前,需要根据接收时间确定其所处的时间段,以预设时间间隔为2小时为例,接收时间为18:33:00时,则其所述的时间段为[18:00:00-19:59:59]这个时间段。然后将格式化数据作为一行数据,异步写入到指定文件夹中与接收时间所处时间段对应的文本文件中。其中,时间段对应的文本文件可以是在每天的00:00:00根据预设时间间隔创建每一个时间段对应的文件,还可以是当某一时间段中出现第一条要写入文本文件的格式化数据时创建该时间段的文本文件,本发明实施例对此不作限制。
根据导入时间,确定导入时间之前的未导入时间段,将未导入时间段对应的文本文件中的格式化数据批量导入到数据库中。
需要说明的是,预设时间间隔以及指定文件夹可以设置在配置文件中,还可以设置在数据库中,其中,指定文件夹可以只在配置文件或者数据库中设置根目录,然后根据每天的日期创建当天的子文件夹,该子文件夹即为指定文件夹,本发明实施例对此不作限制。导入时间可以设置在配置文件中,还可以设置在数据库中,又或者可以根据预设时间间隔计算得到,本发明实施例对此不作限制,导入时间可以设置多个,当在配置文件或者数据库中设置导入时间则表示每天均会在导入时间进行导入,例如:配置文件或者数据库中设置导入时间为则每天的12:00和00:00均会执行导入操作;当根据预设时间间隔计算得到导入时间,则也会每天会在导入时间进行导入,例如:预设时间间隔为2小时,则可以在一天中每两小时执行一次导入操作。同时,将格式化数据作为一行数据,异步写入到指定文件夹中与接收时间所处时间段对应的文本文件中可以通过多线程或者线程池,结合线程锁的方式实现将格式化数据异步写入到指定文件夹中,还可以通过队列结合队列读写锁的方式,将格式化数据写入到队列中,然后通过队列读取线程将读出的格式化数据写入到文本文件中,本发明实施例对此不作限制。
根据导入时间,确定导入时间中前的未导入时间段可以是将导入时间和上一次导入时间之间的时间段作为未导入时间段,还可以是根据导入时间和指定文件夹中的文本文件的导入标记确定未导入时间段,本发明实施例对此不作限制。其中,导入时间可以有多个,到***时间到达导入时间则执行导入操作。
此外,将文本文件中的格式化数据导入到数据库中可以是使用shell命令,利用导入工具(例如:sqlload)将文本文件中的格式化数据导入到数据库中,还可以是逐行读取问问文件中的格式化数据,然后通过预编译SQL及数据库事务,批量将格式化数据导入到数据库中,本发明实施例对此不作限制。
本发明实施例提供的高并发数据入库方法,通过接收报文数据,对报文数据解析并格式化,再将格式化数据以异步的方式写入接收时间所在时间段对应的文本文件中,同时定时将之前时间段中未导入时间段对应的文本文件中的数据导入到数据库中,实现了数据报文请求和数据报文入库的操作分离,以及当前时间段报文数据写入文件和之前时间段文本文件导入数据库的操作分离,进而应用程序不用等到入库完成才能得到响应,提高了响应的速度,同时文本文件中格式化数据批量导入数据库提高了入库效率,降低了数据库产生瓶颈的几率,提高了应用程序的其他数据库请求响应效率,从而在收集报文数据的同时提高了用户的体验度。
基于上述实施例,步骤130,包括:
步骤121,基于预设时间间隔和接收时间,确定接收时间所处时间段;
步骤132,若接收时间所处时间段不存在对应的文本文件,则在指定文件夹中创建接收时间所处时间段对应的文本文件;
步骤133,将格式化数据异步逐行写入接收时间所处时间段对应的文本文件中。
考虑到若直接在每天00:00:00根据预设时间间隔创建当天全部时间段对应的文本文件,会出现部分时间段对应的文本文件出现没有记录格式化数据的情况出现,例如:凌晨某一个时间段没有任何用户通过应用程序进行请求操作,这样会产生一定的资源浪费,同时会降低定时导入时遍历文件的执行效率,因此,本发明实施例通过在将格式化数据写入文本文件之前,先判断接收时间所处时间段是否存在对应的文本文件,以降低资源消耗,同时提高定时导入时遍历文件的执行效率。
具体地,根据预设时间间隔和接收时间,确定接收时间所处时间段,再判断接收时间所处时间段在指定文件夹中是否存在对应的文本文件,若指定文件中不存在接收时间所处时间段不存在对应的文本文件,则根据文本文件名的命名规则创建接收时间所处时间段对应的文本文件。然后将格式化数据异步逐行写入接收时间所处时间段对应的文本文件中。
需要说明的是,文本文件名的命名规则可以是当天的日期加上时间段区间内容,还可以当天的日期加上时间段为当天的第几时间段,本发明实施例对此不作限制。判断接收时间所处时间段在指定文件夹中是否存在对应的文本文件则可以文本文件名的命名规则进行判断。
基于上述实施例,步骤133,包括:
将格式化数据写入缓存队列中,在缓存队列中格式化数据的数量达到预设阈值或者接收时间所处时间段结束的情况下,异步将缓存队列中的格式化数据逐行写入时间段对应的文本文件中,并清空缓存队列。
考虑到若通过多线程或者线程池结合线程锁的方式写入文本文件中,会导致格式化数据写入到文本文件中是乱序的,同时由于每一条格式化数据均需要打开文件写入文件关闭文件的操作,这样文件的IO会有很大的资源消耗,导致格式化数据写入到文本文件的效率较低,因此,本发明实施例通过构建一个缓存队列,批量将缓存队列中的数据写入到文本文件中,以降低文件IO的频次,提高文本文件写入数据的效率。
具体地,设一个队列长度为预设阈值的缓存队列,在依据报文数据生成格式化数据之后,将格式化数据写入到缓存队列中,当缓存队列中的格式化数据存满之后或者接收时间所处时间段已经结束,即***时间与接收时间所处时间段的结束时间相同,则通过导入数据线程将缓存队列中的格式化数据从对头到队尾逐行写入到该时间段对应的文本文件中,同时清空缓存队列,以供缓存队列存储后续格式化数据。
需要说明的是,时间段包括起始时间和结束时间,例如:时间段[02:00:00-03:59:59],则该时间段的起始时间为02:00:00,结束时间为03:59:59,当***时间到达03:59:59则表示该时间段已经结束,此时无论缓存队列中的格式化数据是否存满,均将当前的缓存队列中的格式化数据批量写入到该时段对应的文本文件中,并清空缓存队列。
基于上述实施例,步骤140,包括:
步骤141,确定导入时间;
需要说明的是,导入时间是与当前***时间相同或者当前***时间之后的导入时间。
步骤142,在***时间与导入时间误差在预设范围内时,则基于最后导入时间所处时间段的起始时间和导入时间所处时间段的起始时间段,确定未导入时间段,并将未导入时间段对应的文本文件中的格式化数据批量导入到数据库中;
步骤143,在未导入时间段对应的文本文件导入数据完成后,将最后导入时间更新为导入时间。
考虑到若通过确定指定文件夹中的每一个文本文件的导入标记,会降低导入数据操作的执行效率,同时考虑到时间段在一天的时间内是独一无二的,即当一个时间段结束后,该时间段对应的文本文件将不会再写入数据,因此,本发明实施例通过导入最后导入时间和导入时间之间的时间段对应的文件即可以保证不漏掉数据,同时可以保证导入数据操作的执行效率。
具体地,确定导入时间,当***时间和该导入时间之间的误差在预设范围内时,则将记录的最后导入时间所处时间段的起始时间和该导入时间所处时间段的起始时间之间的时间段作为未导入时间段,然后将未导入时间段对应的文本文件中的格式化数据批量导入到数据库中,当未导入时间段对应的文本文件中的格式化数据全部导入完成之后,将最后导入时间更新为该导入时间。
需要说明的是,将记录的最后导入时间所处时间段的起始时间和该导入时间所处时间段的起始时间之间的时间段表明包括最后导入时间所处时间段,但不包括该导入时间所处时间段。
基于上述实施例,步骤143,包括:
步骤410,逐行读取未导入时间段对应的文本文件中的格式化数据并写入预编译的SQL语句中,得到预编译SQL指令集合;
步骤420,在预编译SQL指令集合中的SQL指令达到预设数量或者未导入时间段对应的文本文件读取完毕,则执行预编译SQL指令集合并清空预编译SQL指令集合,以将未导入时间段对应的文本文件中的格式化数据批量导入到数据库中。
具体地,根据表结构和预设格式构建SQL语句,并调用预编译接口预编译该SQL语句,再逐行读取未导入时间段对应的文本文件中的格式化数据,将格式化数据解析后的数据写入该预编译SQL语句中,得到预编译SQL指令,并添加到预编译SQL指令集合中,当预编译SQL指令集合中的预编译SQL指令达到预设数量或者未导入时间段对应的文本文件中的格式化数据已经读取完毕时,则提交执行预编译SQL指令集合,已将预编译SQL指令集合中的格式化数据批量写入到数据库中。
需要说明的是,在提交执行预编译SQL指令集合时,可以联合数据库事务进行,当预编译SQL指令集合全部执行完毕则提交事务,否则会回滚并记录日志,这样可以避免错误异常数据给数据库带来错误。
此外,以JAVA为开发环境为例,则预编译SQL语句使用Connection类中的prepareStatement接口,通过PreparedStatement类中的setInt、setDouble或者setString等接口将解析格式化数据后得到的数据根据预设格式写入预编译SQL语句中得到预编译SQL指令,然后通过PreparedStatement类中addBatch接口加入到预编译SQL指令集合中,当预编译SQL指令集合中的预编译SQL指令达到预设数量或者未导入时间段对应的文本文件中的格式化数据已经读取完毕时,通过PreparedStatement类中的executeBatch接口提交执行当预编译SQL指令集合,还可以通过C#,python等开发环境实现上述功能,本发明实施例对此不作限制。
基于上述实施例,步骤410,包括:
步骤411,确定当前读取行数;
步骤412,读取未导入时间段对应的文本文件中当前读取行数对应的格式化数据,并对当前读取行数对应的格式化数据进行解析,若解析后的数据中为报文异常的数据,则将当前读取行数对应的格式化数据写入日志中;
否则,将解析后的数据写入预编译的SQL语句中,得到预编译SQL指令,并将预编译SQL指令加入到预编译SQL指令集合中;
步骤413,将下一读取行数作为当前读取行数。
考虑到报文数据可能存在的是异常信息报文,这些报文不需要入库,同时需要进行记录提醒开发人员,以快速定位错误原因,从而改善应用程序,进而提高用户体验度,因此,本发明实施例在批量导入的时候会对格式化数据中的数据进行判断,以使得正确数据入库的同时,记录异常数据。
具体地,确定未导入时间段对应的文本文件中当前读取行数,当前读取行数从1开始,从未导入时间段对应的文本文件读取该当前读取行数对应的格式化数据,然后将格式化数据进行解析,形成字段和字段内容的映射关系,当该映射关系中包含有报文异常的数据,例如存在error字段或者字段内容中出现异常标记词,则将当前读取行数对应的格式化数据写入日志中;否则根据映射关系中的字段和预编译的SQL语句中待写入字段之间的映射关系,将字段内容写入预编译的SQL语句。得到预编译SQL指令,并将该预编译SQL指令加入到预编译SQL指令集合中,将下一读取行数作为当前行数,以迭代执行上述操作,直至预编译SQL指令集合中的预编译SQL指令的个数达到预设数量,或者当前读取行数已经为未导入时间段对应的文本文件的最后一行,则停止迭代操作,进行后续批量导入入库操作。
下面对本发明提供的高并发数据入库装置进行描述,下文描述的高并发数据入库装置与上文描述的高并发数据入库方法可相互对应参照。
图2是本发明实施例提供的高并发数据入库装置。如图2所示,该装置包括:接收模块210、格式化模块220、固定数据模块230和导入模块240。
其中,
接收模块210,用于接收报文数据并确定接收时间;
格式化模块220,用于对报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;
固定数据模块230,用于将格式化数据异步逐行写入指定文件夹中与接收时间所处时间段对应的文本文件中;时间段是基于预设时间间隔确定的;
导入模块240,用于基于导入时间,确定导入时间之前的未导入时间段;并将未导入时间段对应的文本文件中的格式化数据导入到数据库中。
本发明实施例提供的高并发数据入库装置,通过接收模块,用于接收报文数据并确定接收时间;格式化模块,用于对报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;固定数据模块,用于将格式化数据异步逐行写入指定文件夹中与接收时间所处时间段对应的文本文件中;时间段是基于预设时间间隔确定的;导入模块,用于基于导入时间,确定导入时间之前的未导入时间段;并将未导入时间段对应的文本文件中的格式化数据导入到数据库中,实现了数据报文请求和数据报文入库的操作分离,以及当前时间段报文数据写入文件和之前时间段文本文件导入数据库的操作分离,进而应用程序不用等到入库完成才能得到响应,提高了响应的速度,同时文本文件中格式化数据批量导入数据库提高了入库效率,降低了数据库产生瓶颈的几率,提高了应用程序的其他数据库请求响应效率,从而在收集报文数据的同时提高了用户的体验度。
基于上述任一实施例,固定数据模块230,包括:
时间段确定子模块,用于基于预设时间间隔和接收时间,确定接收时间所处时间段;
判断子模块,用于若接收时间所处时间段不存在对应的文本文件,则在指定文件夹中创建接收时间所处时间段对应的文本文件;
写入文件子模块,用于将格式化数据异步逐行写入接收时间所处时间段对应的文本文件中。
基于上述任一实施例,写入文件子模块具体用于:将格式化数据写入缓存队列中,在缓存队列中格式化数据的数量达到预设阈值或者接收时间所处时间段结束的情况下,异步将缓存队列中的格式化数据逐行写入时间段对应的文本文件中,并清空缓存队列。
基于上述任一实施例,导入模块240,包括:
确定导入时间子模块,用于确定导入时间;
导入子模块,用于在***时间与导入时间误差在预设范围内时,则基于最后导入时间所处时间段的起始时间和导入时间所处时间段的起始时间段,确定未导入时间段,并将未导入时间段对应的文本文件中的格式化数据批量导入到数据库中;
更新子模块,用于在未导入时间段对应的文本文件导入数据完成后,将最后导入时间更新为导入时间。
基于上述任一实施例,导入子模块,包括:
读入信息子模块,用于逐行读取未导入时间段对应的文本文件中的格式化数据并写入预编译的SQL语句中,得到预编译SQL指令集合;
执行导入子模块,用于在预编译SQL指令集合中的SQL指令达到预设数量或者未导入时间段对应的文本文件读取完毕,则执行预编译SQL指令集合并清空预编译SQL指令集合,以将未导入时间段对应的文本文件中的格式化数据批量导入到数据库中。
基于上述任一实施例,读入信息子模块,包括:
当前行标确定子模块,用于确定当前读取行数;
解析子模块,用于读取未导入时间段对应的文本文件中当前读取行数对应的格式化数据,并对当前读取行数对应的格式化数据进行解析,若解析后的数据中为报文异常的数据,则将当前读取行数对应的格式化数据写入日志中;
否则,将解析后的数据写入预编译的SQL语句中,得到预编译SQL指令,并将预编译SQL指令加入到预编译SQL指令集合中;
迭代子模块,用于将下一读取行数作为当前读取行数。
图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(Communications Interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行高并发数据入库方法,该方法包括:接收报文数据并确定接收时间;对报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;将格式化数据异步逐行写入指定文件夹中与接收时间所处时间段对应的文本文件中;时间段是基于预设时间间隔确定的;基于导入时间,确定导入时间之前的未导入时间段;并将未导入时间段对应的文本文件中的格式化数据导入到数据库中。
此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的高并发数据入库方法,该方法包括:接收报文数据并确定接收时间;对报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;将格式化数据异步逐行写入指定文件夹中与接收时间所处时间段对应的文本文件中;时间段是基于预设时间间隔确定的;基于导入时间,确定导入时间之前的未导入时间段;并将未导入时间段对应的文本文件中的格式化数据导入到数据库中。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的高并发数据入库方法,该方法包括:接收报文数据并确定接收时间;对报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;将格式化数据异步逐行写入指定文件夹中与接收时间所处时间段对应的文本文件中;时间段是基于预设时间间隔确定的;基于导入时间,确定导入时间之前的未导入时间段;并将未导入时间段对应的文本文件中的格式化数据导入到数据库中。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种高并发数据入库方法,其特征在于,包括:
接收报文数据并确定接收时间;
对所述报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;
将所述格式化数据异步逐行写入指定文件夹中与所述接收时间所处时间段对应的文本文件中;所述时间段是基于预设时间间隔确定的;
基于导入时间,确定所述导入时间之前的未导入时间段;并将所述未导入时间段对应的文本文件中的格式化数据导入到数据库中。
2.根据权利要求1所述的高并发数据入库方法,其特征在于,所述将所述格式化数据异步逐行写入所述接收时间所处时间段对应的文本文件中,包括:
基于所述预设时间间隔和所述接收时间,确定所述接收时间所处时间段;
若所述接收时间所处时间段不存在对应的文本文件,则在所述指定文件夹中创建所述接收时间所处时间段对应的文本文件;
将所述格式化数据异步逐行写入所述接收时间所处时间段对应的文本文件中。
3.根据权利要求2所述的高并发数据入库方法,其特征在于,所述将所述格式化数据异步逐行写入所述接收时间所处时间段对应的文本文件中,包括:
将所述格式化数据写入缓存队列中,在所述缓存队列中格式化数据的数量达到预设阈值或者所述接收时间所处时间段结束的情况下,异步将所述缓存队列中的格式化数据逐行写入所述接收时间所处时间对应的文本文件中,并清空所述缓存队列。
4.根据权利要求1所述的高并发数据入库方法,其特征在于,所述基于导入时间,确定所述导入时间之前的未导入时间段;并将所述未导入时间段对应的文本文件中的格式化数据导入到数据库中,包括:
确定所述导入时间;
在***时间与所述导入时间误差在预设范围内时,则基于最后导入时间所处时间段的起始时间和所述导入时间所处时间段的起始时间段,确定所述未导入时间段,并将所述未导入时间段对应的文本文件中的格式化数据批量导入到所述数据库中;
在所述未导入时间段对应的文本文件导入数据完成后,将所述最后导入时间更新为所述导入时间。
5.根据权利要求4所述的高并发数据入库方法,其特征在于,所述将所述未导入时间段对应的文本文件中的格式化数据批量导入到所述数据库中,包括:
逐行读取所述未导入时间段对应的文本文件中的格式化数据并写入预编译的SQL语句中,得到预编译SQL指令;并将所述预编译SQL指令加入到预编译SQL指令集合中;
在所述预编译SQL指令集合中的预编译SQL指令达到预设数量或者所述未导入时间段对应的文本文件读取完毕,则执行所述预编译SQL指令集合并清空所述预编译SQL指令集合,以将所述未导入时间段对应的文本文件中的格式化数据批量导入到所述数据库中。
6.根据权利要求5所述的高并发数据入库方法,其特征在于,所述逐行读取所述未导入时间段对应的文本文件中的格式化数据并写入预编译的SQL语句中,得到预编译SQL指令集合,包括:
确定当前读取行数;
读取所述未导入时间段对应的文本文件中所述当前读取行数对应的格式化数据,并对所述当前读取行数对应的格式化数据进行解析,若解析后的数据中为报文异常的数据,则将所述当前读取行数对应的格式化数据写入日志中;
否则,将所述解析后的数据写入所述预编译的SQL语句中,得到预编译SQL指令,并将所述预编译SQL指令加入到所述预编译SQL指令集合中;
将下一读取行数作为当前读取行数。
7.一种高并发数据入库装置,其特征在于,包括:
接收模块,用于接收报文数据并确定接收时间;
格式化模块,用于对所述报文数据进行解析,并应用预设格式对解析后得到的数据进行格式化,得到格式化数据;
固定数据模块,用于将所述格式化数据异步逐行写入指定文件夹中与所述接收时间所处时间段对应的文本文件中;所述时间段是基于预设时间间隔确定的;
导入模块,用于基于导入时间,确定所述导入时间之前的未导入时间段;并将所述未导入时间段对应的文本文件中的格式化数据导入到数据库中。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述高并发数据入库方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述高并发数据入库方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述高并发数据入库方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210928370.6A CN115408383A (zh) | 2022-08-03 | 2022-08-03 | 高并发数据入库方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210928370.6A CN115408383A (zh) | 2022-08-03 | 2022-08-03 | 高并发数据入库方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115408383A true CN115408383A (zh) | 2022-11-29 |
Family
ID=84160102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210928370.6A Pending CN115408383A (zh) | 2022-08-03 | 2022-08-03 | 高并发数据入库方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115408383A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117827979A (zh) * | 2024-03-05 | 2024-04-05 | 数翊科技(北京)有限公司武汉分公司 | 一种数据批量导入方法、装置、电子设备及存储介质 |
-
2022
- 2022-08-03 CN CN202210928370.6A patent/CN115408383A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117827979A (zh) * | 2024-03-05 | 2024-04-05 | 数翊科技(北京)有限公司武汉分公司 | 一种数据批量导入方法、装置、电子设备及存储介质 |
CN117827979B (zh) * | 2024-03-05 | 2024-05-17 | 数翊科技(北京)有限公司武汉分公司 | 一种数据批量导入方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110647579A (zh) | 数据同步方法及装置、计算机设备与可读介质 | |
CN107515874B (zh) | 一种分布式非关系型数据库中同步增量数据的方法与设备 | |
CN105373541B (zh) | 数据库的数据操作请求的处理方法和*** | |
CN109471851B (zh) | 数据处理方法、装置、服务器和存储介质 | |
CN112632038A (zh) | 数据库迁移方法、装置、终端及存储介质 | |
CN113360519B (zh) | 数据处理方法、装置、设备和存储介质 | |
CN112286941A (zh) | 一种基于Binlog+HBase+Hive的大数据同步方法和装置 | |
CN111008246A (zh) | 数据库日志同步方法、装置、计算机设备及可读存储介质 | |
WO2024041022A1 (zh) | 数据库表变更方法、装置、设备和存储介质 | |
CN110990365A (zh) | 一种数据同步方法、装置、服务器及存储介质 | |
CN111049913B (zh) | 数据文件的传输方法及装置、存储介质、电子设备 | |
CN115408383A (zh) | 高并发数据入库方法、装置、电子设备及存储介质 | |
CN111291022B (zh) | 一种基于区块链的数据存储*** | |
CN113312386B (zh) | 一种基于分布式消息的批量入库方法 | |
US20230315713A1 (en) | Operation request processing method, apparatus, device, readable storage medium, and system | |
CN112487097A (zh) | 一种分布式领域数据同步的方法、***及设备 | |
CN107977459B (zh) | 报表生成方法及装置 | |
CN113961569B (zh) | 一种医疗数据etl任务同步方法和装置 | |
CN115639966A (zh) | 一种数据写入方法、装置、终端设备及存储介质 | |
CN115114247A (zh) | 文件数据处理方法及装置 | |
CN115904817A (zh) | 分布式数据库并行回放方法、装置、电子设备和存储介质 | |
CN113326401B (zh) | 字段血缘生成方法及*** | |
CN112612647B (zh) | 日志并行重演方法、装置、设备及存储介质 | |
CN110727677B (zh) | 数据仓库内表格的血缘关系追溯的方法和装置 | |
CN107995301B (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 |