一种数据批量提交到数据库的方法和装置制造方法及图纸

技术编号:9668042 阅读:117 留言:0更新日期:2014-02-14 06:36
本发明专利技术公开了一种数据批量提交到数据库的方法和装置,所述方法包括:数据提交器在检测到数据缓存队列中缓存的数据条数超过设定阈值后,将数据全部提取出来并为每条数据生成一条与之对应的SQL数据插入语句;之后,按各条数据的主键的大小顺序,将SQL数据插入语句依次写入到一个事务中向中间件提交;中间件将该事务中的每条SQL数据插入语句转换为相应的数据库命令发送至数据库,若接收到数据库返回的异常的执行结果向数据提交器上报;数据提交器根据上报的异常的执行结果,确定出错误数据的主键;将主键在错误数据的主键之后的数据再次存入到数据缓存队列中。应用本发明专利技术,可以避免正确数据被丢弃,并提高数据批量入库的效率。

【技术实现步骤摘要】
一种数据批量提交到数据库的方法和装置
本专利技术涉及数据库存储技术,尤其涉及一种一种数据批量提交到数据库的方法和装置。
技术介绍
目前,诸如OA(OfficeAutomation,办公自动化系统)、ERP(EnterpriseResourcePlanning,企业资源计划)、CRM(CustomerRelationshipManagement,客户关系管理系统)、日志解析系统等大型业务应用系统均需要通过数据库来存储其中的海量业务数据。一般而言,可以将数据逐条提交的数据库中,也就是数据源端每生成一条业务数据,中间件便将该数据提交到数据库;但是,由于一次只能向数据库提交一条数据,而系统中海量数据需要入库,导致提交的过程需要频繁地和数据库进行交互,占用大量的数据库资源,并且,提交数据速度慢。基于上述原因,现有技术中普遍采用数据批量提交数据库的方法,具体地,当缓存中数据达到100条时,数据提交器将数据从将缓存中提取出来,为每条数据生成对应的SQL(StructuredQueryLanguage,结构化查询语言)数据插入语句并将其写入一个完整的事务中,中间件将事务中的SQL数据插入语句转换为相应的数据库命令发送至数据库。然而,现有的数据批量提交数据库的方法中,如果批量提交的数据中有一条数据出错,会导致批量提交的数据全部回滚;回滚后,由于现有技术无法区分批量提交的数据中的错误数据和正确数据,所以,要么将错误数据连同正确数据一并舍弃以保证错误数据被剔除,这将导致部分正确数据被丢弃而无法入库;要么将回滚后的数据采用逐条提交的方式提交到数据库以保证正确数据成功入库,然而逐条提交数据的方式会导致数据入库效率低。因此,有必要提供一种数据批量提交到数据库的方法和装置,既避免正确数据被丢弃,并提高数据入库效率。
技术实现思路
本专利技术实施例提供了一种数据批量提交到数据库的方法和装置,既避免正确数据被丢弃,并提高数据入库效率。根据本专利技术的一个方面,提供了一种数据批量提交到数据库的方法,包括:数据提交器在检测到数据缓存队列中缓存的数据条数超过设定阈值N后,从所述数据缓存队列中提取出N条数据;并对于提取的每条数据,为该条数据生成一条SQL数据插入语句;之后,按各条数据的主键的大小顺序,将生成的N条SQL数据插入语句依次写入到一个事务中向中间件提交;所述中间件对于该事务中的每条SQL数据插入语句,将该SQL数据插入语句转换为相应的数据库命令发送至数据库;所述数据库根据接收的数据库命令执行相应操作,并向所述中间件返回执行结果;所述中间件在接收到异常的执行结果后向所述数据提交器上报;所述数据提交器根据上报的异常的执行结果,确定出错误数据的主键;将主键顺序位于所述错误数据的主键之后的数据再次存入到数据缓存队列中;其中,所述数据缓存队列中的每条数据是由数据接收模块缓存的:所述数据接收模块每接收到由数据源端发送的一条数据时,为该条数据生成一个唯一的编号,作为该条数据的主键添加到该条数据中,之后,将该条数据存入到所述数据缓存队列中。其中,所述数据提交器根据上报的异常的执行结果,确定出错误数据的主键具体为:所述数据提交器接收到所述中间件上报的异常的执行结果后,从所述异常的执行结果中解析出其携带的主键,作为错误数据的主键;或者所述数据提交器根据上报的异常的执行结果,确定出错误数据的主键具体为:所述数据提交器接收到所述中间件上报的异常的执行结果后,向所述中间件发送获取成功数据主键的命令;所述中间件接收到所述命令后,向所述数据库依次发送各条数据的主键查询命令;并将数据库返回的查询到的主键向所述数据提交器返回;所述数据提交器根据所述各条数据的主键的大小顺序,以及返回的主键,确定出错误数据的主键。其中,所述为该条数据生成一个唯一的编号,具体为:所述数据接收模块根据接收该条数据的当前时间,生成该条数据的编号。所述将该条数据存入到数据缓存队列中,具体为:所述数据接收模块将该条数据存入到数据缓存队列的队尾中;以及所述从所述数据缓存队列中提取出N条数据,具体为:所述数据提交器从所述数据缓存队列的队头提取出N条数据。其中,所述按各条数据的主键的大小顺序,将生成的N条SQL数据插入语句依次写入到一个事务中向中间件提交,具体为:所述数据提交器按各条数据的主键从小到大顺序,将生成的N条SQL数据插入语句依次写入到一个事务中向中间件提交;以及所述将主键在所述错误数据的主键之后的数据再次存入到数据缓存队列中,具体为:所述数据提交器将提取出的N条数据中,主键大于所述错误数据的主键的数据再次存入到数据缓存队列的队尾。根据本专利技术的另一个方面,还提供了一种数据批量提交到数据库的装置,包括:数据接收模块,用于每接收到由数据源端发送的一条数据时,为该条数据生成一个唯一的编号,作为该条数据的主键添加到该条数据中;之后,将该条数据存入到数据缓存队列中;数据提交器,用于在检测到所述数据缓存队列中缓存的数据条数超过设定阈值N后,从所述数据缓存队列中提取出N条数据;并对于提取的每条数据,为该条数据生成一条SQL数据插入语句;之后,按各条数据的主键的大小顺序,将生成的N条SQL数据插入语句依次写入到一个事务进行提交;中间件,用于接收到所述数据提交器提交的事务后,对于该事务中的每条SQL数据插入语句,将该SQL数据插入语句转换为相应的数据库命令发送至数据库;并在接收到异常的执行结果后向所述数据提交器上报;所述数据提交器还用于接收到上报的异常的执行结果后,确定出错误数据的主键;将主键顺序位于所述错误数据的主键之后的数据再次存入到数据缓存队列中。较佳地,所述数据接收模块具体包括:主键添加单元,用于每接收到由数据源端发送的一条数据时,根据接收该条数据的当前时间,生成该条数据的编号,作为该条数据的主键添加到该条数据中;数据缓存单元,用于将添加了主键的数据存入到所述数据缓存队列的队尾。较佳地,所述数据提交器具体包括:数据提取单元,用于每隔设定时间段检测所述数据缓存队列中缓存的数据的条数;若检测到所述数据缓存队列中缓存的数据条数超过设定阈值N,则从所述数据缓存队列的队头提取出N条数据;事务提交单元,用于将所述数据提取单元提取的N条数据,按各条数据的主键从小到大顺序,将生成的N条SQL数据插入语句依次写入到一个事务中向所述中间件提交;并在接收到所述中间件上报的异常的执行结果后,发送错误数据处理通知;错误数据主键确定单元,用于接收到所述错误数据处理通知后,根据所述事务提交单元接收的异常的执行结果,确定出错误数据的主键后发送处理通知;处理单元,用于接收到所述处理通知后,将提取出的N条数据中,主键大于所述错误数据的主键的数据再次存入到数据缓存队列的队尾。较佳地,所述错误数据主键确定单元具体用于接收到所述错误数据处理通知后,从所述异常的执行结果中解析出其携带的主键,作为错误数据的主键。较佳地,所述错误数据主键确定单元具体用于接收到所述错误数据处理通知后,向所述中间件发送获取成功数据主键的命令;以及根据所述各条数据的主键的大小顺序,以及所述中间件返回的主键,确定出错误数据的主键;以及所述中间件还用于接收到所述命令后,向所述数据库依次发送各条数据的主键查询命令;并将数据库返回的查询到的主键向所述数据提交器返回。本专利技术实施例的本文档来自技高网
...
一种数据批量提交到数据库的方法和装置

【技术保护点】
一种数据批量提交到数据库的装置,其特征在于,包括:数据接收模块,用于每接收到由数据源端发送的一条数据时,为该条数据生成一个唯一的编号,作为该条数据的主键添加到该条数据中;之后,将该条数据存入到数据缓存队列中;数据提交器,用于在检测到所述数据缓存队列中缓存的数据条数超过设定阈值N后,从所述数据缓存队列中提取出N条数据;并对于提取的每条数据,为该条数据生成一条SQL数据插入语句;之后,按各条数据的主键的大小顺序,将生成的N条SQL数据插入语句依次写入到一个事务进行提交;中间件,用于接收到所述数据提交器提交的事务后,对于该事务中的每条SQL数据插入语句,将该SQL数据插入语句转换为相应的数据库命令发送至数据库;并在接收到异常的执行结果后向所述数据提交器上报;所述数据提交器还用于接收到上报的异常的执行结果后,确定出错误数据的主键;将主键顺序位于所述错误数据的主键之后的数据再次存入到数据缓存队列中。

【技术特征摘要】
1.一种数据批量提交到数据库的装置,其特征在于,包括:数据接收模块,用于每接收到由数据源端发送的一条数据时,为该条数据生成一个唯一的编号,作为该条数据的主键添加到该条数据中;之后,将该条数据存入到数据缓存队列中;数据提交器,用于在检测到所述数据缓存队列中缓存的数据条数超过设定阈值N后,从所述数据缓存队列中提取出N条数据;并对于提取的每条数据,为该条数据生成一条SQL数据插入语句;之后,按各条数据的主键的大小顺序,将生成的N条SQL数据插入语句依次写入到一个事务进行提交;中间件,用于接收到所述数据提交器提交的事务后,对于该事务中的每条SQL数据插入语句,将该SQL数据插入语句转换为相应的数据库命令发送至数据库;并在接收到异常的执行结果后向所述数据提交器上报;所述数据提交器还用于接收到上报的异常的执行结果后,确定出错误数据的主键;将主键顺序位于所述错误数据的主键之后的数据再次存入到数据缓存队列中。2.如权利要求1所述的装置,其特征在于,所述数据接收模块具体包括:主键添加单元,用于每接收到由数据源端发送的一条数据时,根据接收该条数据的当前时间,生成该条数据的编号,作为该条数据的主键添加到该条数据中;数据缓存单元,用于将添加了主键的数据存入到所述数据缓存队列的队尾。3.如权利要求2所述的装置,其特征在于,数据提交器具体包括:数据提取单元,用于每隔设定时间段检测所述数据缓存队列中缓存的数据的条数;若检测到所述数据缓存队列中缓存的数据条数超过设定阈值N,则从所述数据缓存队列的队头提取出N条数据;事务提交单元,用于将所述数据提取单元提取的N条数据,按各条数据的主键从小到大顺序,将生成的N条SQL数据插入语句依次写入到一个事务中向所述中间件提交;并在接收到所述中间件上报的异常的执行结果后,发送错误数据处理通知;错误数据主键确定单元,用于接收到所述错误数据处理通知后,根据所述事务提交单元接收的异常的执行结果,确定出错误数据的主键后发送处理通知;处理单元,用于接收到所述处理通知后,将提取出的N条数据中,主键大于所述错误数据的主键的数据再次存入到数据缓存队列的队尾。4.如权利要求3所述的装置,其特征在于,所述错误数据主键确定单元具体用于接收到所述错误数据处理通知后,从所述异常的执行结果中解析出其携带的主键,作为错误数据的主键。5.如权利要求3所述的装置,其特征在于,所述错误数据主键确定单元具体用于接收到所述错误数据处理通知后,向所述中间件发送获取成功数据主键的命令;以及根据所述各条数据的主键的大小顺序,以及所述中间件返回的主键,确定出错误数据的主键;以及所述中间件还用于接收到所述命令后,向所述数据库依次发送各条数据的主键查询命令;并将数据库返回的查询到的主键向所述数据提交器返回。6.一...

【专利技术属性】
技术研发人员:田玉祺
申请(专利权)人:青岛海信传媒网络技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1