一种利用缓存表来提高数据库数据插入性能的方法

文档序号:6444072阅读:248来源:国知局
专利名称:一种利用缓存表来提高数据库数据插入性能的方法
技术领域
本发明涉及一种利用缓存表来提高数据库数据插入性能的方法。
背景技术
大型业务应用系统,一般都要将系统相关业务数据存储到数据库之中。在系统实际运行过程中,将同类型的新增业务数据写入到数据库对应的数据表中,数据表的数据存储在服务器的硬盘,硬盘的写入性能影响了数据表的插入性能,当前硬盘的读写性能是服务器各组件中最低的一部分,硬盘的读写性能成为数据库数据表的插入性能的瓶颈。为了提高数据库的插入效率,现有采用的技术方案有升级服务器硬件或者批量插入。通过升级服务器硬件(主要是硬盘)的方法,可以较简单地实现数据库插入性能的提升,但是提升范围有限,且硬件开销比较大,综合性价比不高。批量插入是一种将多条待插入数据拼接成一条语句然后一次提交到数据库执行的方法,可以不用升级硬件就获取到较大的性能提升,但在系统新增业务数据量巨大,业务系统对该表读取频繁的情况下容易造成数据表被锁住,从而引发频繁、阶段性的性能下降, 不利于系统的稳定。

发明内容
针对现有技术方案的不足,本发明提出一种利用缓存表来提高数据库插入性能的方法,可以在不用升级硬件、避免造成数据库死锁的条件下大大提高数据库的插入性能。本发明一种利用缓存表来提高数据库数据插入性能的方法,首先建立两个基于内存的数据库缓存表,该缓存表与待最终插入的目的数据表的表结构相同;先将数据插入到第一缓存表中,待第一缓存表中的数据超过最大个数阈值后,再将第一缓存表的数据批量导入到目的数据表,在导入过程中,若有新的数据要插入数据库,则将新的数据插入到第二缓存表中,待第二缓存表中的数据超过最大个数阈值后,再将该第二缓存表中的数据导入到目的数据表中,该第一或第二缓存表一旦将其中的数据导入至目的数据表中后,则所述的第一或第二缓存表立即清空;上述往第一或第二缓存表插入数据到最大个数阈值所需要的时间必须大于将该第一或第二缓存表中的数据导入到目的数据表所需时间。采用本发明的技术方案后,由于缓存表是建立在内存之上,所以该表的插入性能取决于内存的写入性能,远远大于基于硬盘的数据表,只要在保证缓存表的容量够大的前提下,则就可以获取到近似于缓存表的数据插入性能。


图1为本发明的流程示意图。以下结合附图和具体实施例对本发明作进一步详述。
具体实施方式
本发明一种利用缓存表来提高数据库数据插入性能的方法,首先建立两个基于内存的数据库缓存表,该缓存表与待最终插入的目的数据表的表结构相同,因为缓存表是建立在内存之上,所以该表的插入性能取决于内存的写入性能,远远大于基于硬盘的数据表; 先将数据插入到第一缓存表中,待第一缓存表中的数据超过最大个数阈值后,再将第一缓存表的数据批量导入到目的数据表,在导入过程中,若有新的数据要插入数据库,则将新的数据插入到第二缓存表中,待第二缓存表中的数据超过最大个数阈值后,再将该第二缓存表中的数据导入到目的数据表中,该第一或第二缓存表一旦将其中的数据导入至目的数据表中后,则所述的第一或第二缓存表立即清空;上述往第一或第二缓存表插入数据到最大个数阈值所需要的时间必须大于将该第一或第二缓存表中的数据导入到目的数据表所需时间。如图1所示,本发明具体实现步骤如下
步骤1、选用MYSQL作为数据库引擎来部署数据库,创建业务系统数据库BizDB ;
步骤2、在业务系统数据库BizDB中创建以下数据表
目的数据表,表引擎选择Mylsam,表结构中定义若干数据字段;
建立基于内存的第一和第二数据库缓存表,该缓存表的表结构与目的数据表相同;
步骤3、在业务系统数据库BizDB中创建以下存储过程
存储过程1 参数为第一缓存表中各字段,将各参数插入到第一缓存表中,然后返回第一缓存表的当前数据行数,如果插入失败则返回0 ;
存储过程2 参数为第二缓存表中各字段,将各参数插入到第二缓存表中,然后返回第二缓存表的当前数据行数,如果插入失败则返回0 ;
存储过程3 参数为整型,限制为1或2,返回值BOOL型,根据参数将对应的缓存表中的数据存入目的数据表中,存成功后将原缓存表清空,并返回操作结果;
步骤4、创建业务程序,设置缓存表最大行数限制阈值,根据预先配置好的参数连接业务系统数据库BizDB,初始化当前缓存表标志位为1 ;
步骤5、等待待插入的业务数据,一旦接收到待插入的数据,则根据当前缓存表标志位选择待插入数据的存储过程,如果当前缓存表标志为1则执行步骤3中的存储过程1,如果当前缓存表标志位为2,则执行步骤3中的存储过程2 ;
步骤6、执行插入数据的存储过程,并判断其返回值,如果返回值大于0且小于缓存表最大行数限制阈值,说明存储过程执行成功,且缓存表数据未满,执行步骤9,如果返回值为 0,执行步骤7,如果返回值大于缓存表最大行数限制阈值,执行步骤8 ; 步骤7、程序执行异常,进行相应的异常处理,并打印日志,执行步骤9 ; 步骤8、若存储过程返回值大于缓存表最大行数限制阈值,说明该缓存表中的数据已满,切换缓存表标志位,原来为1的改为2,原来为2的改为1,并执行存储过程3,将数据已满的所述缓存表中的数据导入到目的数据表中,执行步骤9 ;
步骤9、判断是否结束数据插入,如果是则执行步骤10,如果否则执行步骤5 ; 步骤10、关闭数据库连接,退出数据插入过程。以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
权利要求
1. 一种利用缓存表来提高数据库数据插入性能的方法,其特征在于 首先建立两个基于内存的数据库缓存表,该缓存表与待最终插入的目的数据表的表结构相同;先将数据插入到第一缓存表中,待第一缓存表中的数据超过最大个数阈值后,再将第一缓存表的数据批量导入到目的数据表,在导入过程中,若有新的数据要插入数据库,则将新的数据插入到第二缓存表中,待第二缓存表中的数据超过最大个数阈值后,再将该第二缓存表中的数据导入到目的数据表中,该第一或第二缓存表一旦将其中的数据导入至目的数据表中后,则所述的第一或第二缓存表立即清空;上述往第一或第二缓存表插入数据到最大个数阈值所需要的时间必须大于将该第一或第二缓存表中的数据导入到目的数据表所需时间。
全文摘要
本发明一种利用缓存表来提高数据库数据插入性能的方法,首先建立两个基于内存的数据库缓存表,该缓存表与待最终插入的目的数据表的表结构相同;先将数据插入到第一缓存表中,待第一缓存表中的数据超过最大个数阈值后,再将第一缓存表的数据批量导入到目的数据表,在导入过程中,若有新的数据要插入数据库,则将新的数据插入到第二缓存表中,待第二缓存表中的数据超过最大个数阈值后,再将该第二缓存表中的数据导入到目的数据表中;本发明可以在不用升级硬件、避免造成数据库死锁的条件下大大提高数据库的插入性能。
文档编号G06F17/30GK102542054SQ20111045012
公开日2012年7月4日 申请日期2011年12月29日 优先权日2011年12月29日
发明者余建成, 傅建记, 吴晓前, 詹友陆 申请人:厦门雅迅网络股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1