• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 15
    • 下载费用:30 金币  

    重庆时时彩投注改单: 一种向数据库插入数据的方法及装置.pdf

    关 键 词:
    一种 数据库 插入 数据 方法 装置
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201410160707.9

    申请日:

    2014.04.21

    公开号:

    CN103914565A

    公开日:

    2014.07.09

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 专利权人的姓名或者名称、地址的变更IPC(主分类):G06F 17/30变更事项:专利权人变更前:北京搜狐新媒体信息技术有限公司变更后:北京搜狐新媒体信息技术有限公司变更事项:地址变更前:100084 北京市海淀区中关村东路1号院9号楼搜狐网络大厦8层802房间变更后:100086 北京市海淀区科学院南路2号院3号楼12层1201|||授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20140421|||公开
    IPC分类号: G06F17/30 主分类号: G06F17/30
    申请人: 北京搜狐新媒体信息技术有限公司
    发明人: 周星
    地址: 100084 北京市海淀区中关村东路1号院9号楼搜狐网络大厦8层802房间
    优先权:
    专利代理机构: 北京集佳知识产权代理有限公司 11227 代理人: 王宝筠
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201410160707.9

    授权公告号:

    |||103914565B||||||

    法律状态公告日:

    2018.06.08|||2017.05.24|||2014.08.06|||2014.07.09

    法律状态类型:

    专利权人的姓名或者名称、地址的变更|||授权|||实质审查的生效|||公开

    摘要

    一种向数据库插入数据的方法及装置,所述方法包括:获取需要向数据库的第一数据表插入的行数据,该行数据中的每个数据项与第一数据表中的每个字段一一对应,所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应;按照下述方式完成向数据库插入数据的操作:使第一计数器累加一个计数,并将行数据放入第一缓冲区中;判断第一计数器中的计数值是否达到设定阈值;如果是,则使第一计数器中的计数值置为零,将第一缓冲区中缓冲的所有行数据放入第一数据表中,清除第一缓冲区中缓冲的所有行数据,继续执行获取行数据的步骤;如果否,则继续执行获取行数据的步骤;其中,在至少一次的第一读写锁的访问控制期间完成上述操作中的读写操作。

    权利要求书

    权利要求书
    1.  一种向数据库插入数据的方法,其特征在于,所述数据库中的每个数据表与一个计数器、一个缓冲区和一个读写锁相互对应,所述方法包括: 
    获取需要向所述数据库的第一数据表插入的行数据,所述行数据中的每个数据项与所述第一数据表中的每个字段一一对应,所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应; 
    按照下述方式完成向数据库插入数据的操作: 
    使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;判断所述第一计数器中的计数值是否达到设定阈值;如果是,则使所述第一计数器中的计数值置为零,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中,清除所述第一缓冲区中缓冲的所有行数据,继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;如果否,则继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;其中,在至少一次的所述第一读写锁的访问控制期间完成上述操作中的读写操作,所述第一读写锁的访问控制期间是从开启所述第一读写锁后到关闭所述第一读写锁前的期间?!?BR>
    2.  根据权利要求1所述的方法,其特征在于,具体按照下述方式完成向数据库插入数据的操作: 
    在第一次开启所述第一读写锁的写模式后、且在第一次关闭所述第一读写锁的写模式前,使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中; 
    判断所述第一计数器中的计数值是否达到设定阈值; 
    如果是,则在第二次开启所述第一读写锁的写模式后、且在第二次关闭所述第一读写锁的写模式前,使所述第一计数器中的计数值置为零;在开启所述第一读写锁的读模式后、且在关闭所述第一读写锁的读模式前,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中;在第三次开启所述第一读写锁的写模式后、且在第三次关闭所述第一读写锁的写模式前,清除所述第一缓冲区中缓冲的所有行数据;继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤; 
    如果否,则继续执行所述获取需要向所述数据库的第一数据表插入的行 数据的步骤?!?BR>
    3.  根据权利要求1或2所述的方法,其特征在于,所述第一数据表与第一预处理表相互对应,所述第一预处理表中按预设顺序存储了所述第一数据表中的每个字段,所述第一预处理表中每个字段对应的初始数据为空值; 
    所述获取需要向所述数据库的第一数据表插入的行数据,具体包括: 
    将所述行数据中的每个数据项与所述第一预处理表中的字段进行对应,并利用所述每个数据项替换所述第一预处理表中对应字段所对应的空值; 
    按所述预设顺序获取与所述预处理表中每个字段对应的每个数据项?!?BR>
    4.  根据权利要求3所述的方法,其特征在于,所述第一预处理表为第一哈希表?!?BR>
    5.  根据权利要求1或2所述的方法,其特征在于,所述第一计数器的计数值和所述第一数据表的表名存储于第二哈希表中,所述第一缓冲区中缓冲的行数据和所述第一数据表的表名存储于第三哈希表中,所述第一读写锁的数据结构和所述第一数据表的表名存储于第四哈希表中; 
    所述方法还包括: 
    根据哈希算法获取与所述第一数据表的表名对应的第一计数器、第一缓冲区和第一读写锁?!?BR>
    6.  一种向数据库插入数据的装置,其特征在于,所述数据库中的每个数据表与一个计数器、一个缓冲区和一个读写锁相互对应,所述装置包括: 
    行数据获取???,用于获取需要向所述数据库的第一数据表插入的行数据,所述行数据中的每个数据项与所述第一数据表中的每个字段一一对应,所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应; 
    数据处理???,用于按照下述方式完成向数据库插入数据的操作: 
    使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;判断所述第一计数器中的计数值是否达到设定阈值;如果是,则使所述第一计数器中的计数值置为零,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中,清除所述第一缓冲区中缓冲的所有行数据,继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;如果否,则继 续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;其中,在至少一次的所述第一读写锁的访问控制期间完成上述操作中的读写操作,所述第一读写锁的访问控制期间是从开启所述第一读写锁后到关闭所述第一读写锁前的期间?!?BR>
    7.  根据权利要求6所述的装置,其特征在于,所述数据处理???,具体包括: 
    第一处理子???,用于在第一次开启所述第一读写锁的写模式后、且在第一次关闭所述第一读写锁的写模式前,使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中; 
    阈值判断子???,用于判断所述第一计数器中的计数值是否达到设定阈值; 
    第二处理子???,用于在所述阈值判断子??榕卸系玫降乃龅谝患剖髦械募剖荡锏缴瓒ㄣ兄凳?,在第二次开启所述第一读写锁的写模式后、且在第二次关闭所述第一读写锁的写模式前,使所述第一计数器中的计数值置为零;在开启所述第一读写锁的读模式后、且在关闭所述第一读写锁的读模式前,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中;在第三次开启所述第一读写锁的写模式后、且在第三次关闭所述第一读写锁的写模式前,清除所述第一缓冲区中缓冲的所有行数据;继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤; 
    第三处理子???,用于在所述阈值判断子??榕卸系玫降乃龅谝患剖髦械募剖滴创锏缴瓒ㄣ兄凳?,继续利用所述行数据获取??橹葱兴龌袢⌒枰蛩鍪菘獾牡谝皇荼聿迦氲男惺莸墓δ??!?BR>
    8.  根据权利要求6或7所述的装置,其特征在于,所述第一数据表与第一预处理表相互对应,所述第一预处理表中按预设顺序存储了所述第一数据表中的每个字段,所述第一预处理表中每个字段对应的初始数据为空值; 
    所述行数据获取???,具体包括: 
    数据替换子???,用于将所述行数据中的每个数据项与所述第一预处理表中的字段进行对应,并利用所述每个数据项替换所述第一预处理表中对应字段所对应的空值; 
    行数据获取子???,用于按所述预设顺序获取与所述预处理表中每个字段对应的每个数据项?!?BR>
    9.  根据权利要求8所述的装置,其特征在于,所述第一预处理表为第一哈希表?!?BR>
    10.  根据权利要求6或7所述的装置,其特征在于,所述第一计数器的计数值和所述第一数据表的表名存储于第二哈希表中,所述第一缓冲区中缓冲的行数据和所述第一数据表的表名存储于第三哈希表中,所述第一读写锁的数据结构和所述第一数据表的表名存储于第四哈希表中; 
    所述装置还包括: 
    对应项获取???,用于根据哈希算法获取与所述第一数据表的表名对应的第一计数器、第一缓冲区和第一读写锁?!?BR>

    说明书

    说明书一种向数据库插入数据的方法及装置
    技术领域 
    本发明涉及数据库技术领域,尤其涉及一种向数据库插入数据的方法及装置?!?nbsp;
    背景技术 
    关系数据库是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据,譬如,MySQL就是一个关系型数据库管理系统。MySQL数据库既支持单行的插入操作,也支持多行批量插入操作。例如:单行插入操作的形式为:insert?。椋睿簦铩。簦幔猓欤錩a?。觯幔欤酰澹螅ǎ?,?。?,c1),表示将数组(a1,?。?,c1)插入到表table_a中;多行插入操作的形式为:insert?。椋睿簦铩。簦幔猓欤錩a?。觯幔欤酰澹蟆。ǎ?,?。?,?。?),?。ǎ?,?。?,?。?) ,表示将数组(a1,?。?,c1)和(a2,?。?,?。?)插入到表table_a中。一般而言,若需要插入相同数目的行,一次多行插入操作的效率要比多次单行插入的效率要高,举个例子,当往同一个表中插入10行数据时,一次批量插入操作比10次单行插入效率要高很多?!?nbsp;
    现有方案中,在多线程环境下,每个线程有自己单独的缓冲区,即缓冲区不会横跨线程。当需要向数据库的表table_a中插入多行数据时,若每行数据中的数据顺序均相同、且每行数据都没有缺失的情况下,则将所述多行数据放入对应线程的缓冲区中,待所述缓冲区中的数据行数达到设定阈值时,便将所述多行数据批量插入到数据库中的表table_a中;若因某行数据中存在缺省项导致需要插入的行数据顺序与数据库中的行数据顺序不对应,则对该行数据进行处理并采用单行插入的方式将该行数据插入到数据库中?!?nbsp;
    但是,由于每个线程单独拥有缓冲区,每个缓冲区只有达到阈值要求时才能进行批量插入,基于数据较大地分散在各个线程的缓冲区中,若缓冲区中的行数据数量长时间不能满足阈值要求,将导致缓冲区的行数据长时间处于等待的状态,从而降低了数据插入的效率,若采用单行插入的方式将导致数据插入效率较低?!?nbsp;
    发明内容 
    有鉴于此,本发明实施例的主要目的在于提供一种向数据库插入数据的方法及装置,以实现提高数据插入效率的目的?!?nbsp;
    为实现上述目的,本发明提供了一种向数据库插入数据的方法,所述数据库中的每个数据表与一个计数器、一个缓冲区和一个读写锁相互对应,所述方法包括:  
    获取需要向所述数据库的第一数据表插入的行数据,所述行数据中的每个数据项与所述第一数据表中的每个字段一一对应,所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应;  
    按照下述方式完成向数据库插入数据的操作:  
    使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;判断所述第一计数器中的计数值是否达到设定阈值;如果是,则使所述第一计数器中的计数值置为零,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中,清除所述第一缓冲区中缓冲的所有行数据,继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;如果否,则继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;其中,在至少一次的所述第一读写锁的访问控制期间完成上述操作中的读写操作,所述第一读写锁的访问控制期间是从开启所述第一读写锁后到关闭所述第一读写锁前的期间?!?nbsp;
    优选地,具体按照下述方式完成向数据库插入数据的操作:  
    在第一次开启所述第一读写锁的写模式后、且在第一次关闭所述第一读写锁的写模式前,使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;  
    判断所述第一计数器中的计数值是否达到设定阈值;  
    如果是,则在第二次开启所述第一读写锁的写模式后、且在第二次关闭所述第一读写锁的写模式前,使所述第一计数器中的计数值置为零;在开启所述第一读写锁的读模式后、且在关闭所述第一读写锁的读模式前,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中;在第三次开启所述第一读写锁的写模式后、且在第三次关闭所述第一读写锁的写模式前,清除所述第一缓 冲区中缓冲的所有行数据;继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;  
    如果否,则继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤?!?nbsp;
    优选地,所述第一数据表与第一预处理表相互对应,所述第一预处理表中按预设顺序存储了所述第一数据表中的每个字段,所述第一预处理表中每个字段对应的初始数据为空值;  
    所述获取需要向所述数据库的第一数据表插入的行数据,具体包括:  
    将所述行数据中的每个数据项与所述第一预处理表中的字段进行对应,并利用所述每个数据项替换所述第一预处理表中对应字段所对应的空值;  
    按所述预设顺序获取与所述预处理表中每个字段对应的每个数据项?!?nbsp;
    优选地,所述第一预处理表为第一哈希表?!?nbsp;
    优选地,所述第一计数器的计数值和所述第一数据表的表名存储于第二哈希表中,所述第一缓冲区中缓冲的行数据和所述第一数据表的表名存储于第三哈希表中,所述第一读写锁的数据结构和所述第一数据表的表名存储于第四哈希表中;  
    所述方法还包括:  
    根据哈希算法获取与所述第一数据表的表名对应的第一计数器、第一缓冲区和第一读写锁?!?nbsp;
      
    本发明实施例还提供了一种向数据库插入数据的装置,所述数据库中的每个数据表与一个计数器、一个缓冲区和一个读写锁相互对应,所述装置包括:  
    行数据获取???,用于获取需要向所述数据库的第一数据表插入的行数据,所述行数据中的每个数据项与所述第一数据表中的每个字段一一对应,所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应;  
    数据处理???,用于按照下述方式完成向数据库插入数据的操作:  
    使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;判断所述第一计数器中的计数值是否达到设定阈值;如果是,则使所述第一计数器中的计数值置为零,将所述第一缓冲区中缓冲的所有行数据放入所述 第一数据表中,清除所述第一缓冲区中缓冲的所有行数据,继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;如果否,则继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;其中,在至少一次的所述第一读写锁的访问控制期间完成上述操作中的读写操作,所述第一读写锁的访问控制期间是从开启所述第一读写锁后到关闭所述第一读写锁前的期间?!?nbsp;
    优选地,所述数据处理???,具体包括:  
    第一处理子???,用于在第一次开启所述第一读写锁的写模式后、且在第一次关闭所述第一读写锁的写模式前,使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;  
    阈值判断子???,用于判断所述第一计数器中的计数值是否达到设定阈值;  
    第二处理子???,用于在所述阈值判断子??榕卸系玫降乃龅谝患剖髦械募剖荡锏缴瓒ㄣ兄凳?,在第二次开启所述第一读写锁的写模式后、且在第二次关闭所述第一读写锁的写模式前,使所述第一计数器中的计数值置为零;在开启所述第一读写锁的读模式后、且在关闭所述第一读写锁的读模式前,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中;在第三次开启所述第一读写锁的写模式后、且在第三次关闭所述第一读写锁的写模式前,清除所述第一缓冲区中缓冲的所有行数据;继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;  
    第三处理子???,用于在所述阈值判断子??榕卸系玫降乃龅谝患剖髦械募剖滴创锏缴瓒ㄣ兄凳?,继续利用所述行数据获取??橹葱兴龌袢⌒枰蛩鍪菘獾牡谝皇荼聿迦氲男惺莸墓δ??!?nbsp;
    优选地,所述第一数据表与第一预处理表相互对应,所述第一预处理表中按预设顺序存储了所述第一数据表中的每个字段,所述第一预处理表中每个字段对应的初始数据为空值;  
    所述行数据获取???,具体包括:  
    数据替换子???,用于将所述行数据中的每个数据项与所述第一预处理表中的字段进行对应,并利用所述每个数据项替换所述第一预处理表中对应字段 所对应的空值;  
    行数据获取子???,用于按所述预设顺序获取与所述预处理表中每个字段对应的每个数据项?!?nbsp;
    优选地,所述第一预处理表为第一哈希表?!?nbsp;
    优选地,所述第一计数器的计数值和所述第一数据表的表名存储于第二哈希表中,所述第一缓冲区中缓冲的行数据和所述第一数据表的表名存储于第三哈希表中,所述第一读写锁的数据结构和所述第一数据表的表名存储于第四哈希表中;  
    所述装置还包括:  
    对应项获取???,用于根据哈希算法获取与所述第一数据表的表名对应的第一计数器、第一缓冲区和第一读写锁?!?nbsp;
    本发明实施例提供的向数据库插入数据的方法及装置,首先获取满足批量插入要求的行数据,然后,利用读写锁进行控制,以在每次关闭读写锁时,可允许对其它数据表进行计数器修改、数据插入缓冲区、从缓存区读取数据、清空缓冲区数据等相关操作,保证了并发操作的高效性。与现有方案相比,本发明实施例降低了数据入库的时间延迟,同时通过批量插入的方式提高了数据库操作的效率?!?nbsp;
    附图说明 
    为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图?!?nbsp;
    图1为本发明实施例向数据库插入数据的方法的流程示意图;  
    图2为本发明实施例数据读写操作的流程示意图;  
    图3为本发明实施例向数据库插入数据的装置的结构示意图?!?nbsp;
    具体实施方式 
    为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明 实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例?;诒痉⒚髦械氖凳├?,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明?;さ姆段??!?nbsp;
      
    本发明实施例提供的向数据库插入数据的方法及装置,不限制数据库的类型,所述数据库可以是关系型数据库也可以是其它类型的数据库。其中,所述数据库中的每个数据表与一个计数器、一个缓冲区和一个读写锁相互对应,对于所述数据库中的任意一个数据表,比如第一数据表,假设所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应?!?nbsp;
    参见图1,为本发明实施例提供的向数据库插入数据的方法的流程示意图,该方法包括以下步骤:  
    步骤101:获取需要向所述数据库的第一数据表插入的行数据,所述行数据中的每个数据项与所述第一数据表中的每个字段一一对应,所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应?!?nbsp;
    在本发明实施例中,所述数据库中的每个数据表都对应一个预处理表,其中,所述第一数据表与第一预处理表相互对应,所述第一预处理表中按预设顺序存储了所述第一数据表中的每个字段,所述第一预处理表中每个字段对应的初始数据为空值?!?nbsp;
    举例说明,参见表1,假设表1为所述第一预处理表的表结构,它可以是一个哈希表(包括Key值和Value值,Key值为第一数据表的字段,Value值为第一数据表的字段对应的实际数据项),即所述第一预处理表为第一哈希表。假设第一数据表的字段有:(第一字段,第二字段,第三字段),此时可按照字母顺序或是数字顺序将第一数据表的每个字段作为Key值进行排序,譬如,若按照字母顺序排序,则(第一字段,第二字段,第三字段)在表1中为(comlumnA,?。悖铮欤酰恚睿隆?,columnC)的形式。在每次使用所述第一预处理表前均要对表中的Value值进行初始化,即将每个Key值对应的Value值置为空值“NULL”?!?nbsp;
    表1    
    Key  Value 
     columnA  “NULL”  columnB  “NULL”  columnC  “NULL” 
    当获取到一个新的需要向第一数据表插入的行数据时,首先将新的行数据逐个填充到表1中。假如所述新的行数据为(columnA=?。?,columnC=?。?),由于(columnA=?。?,columnC=?。?)中存在缺省项即columnB对应的数据项,此时,将columnA对应的空值“NULL”替换为a1,将columnC对应的空值“NULL”替换为c1,而columnB对应的空值“NULL”保持不变,参见表2?!?nbsp;
    表2  
    Key  Value  columnA  a1  columnB  “NULL”  columnC  c1 
    最后,按照Key值的字母顺序,获取表2中的Value值(a1,NULL,?。?),(a1,NULL,?。?)即为需要向所述数据库的第一数据表插入的行数据??杉?,当行数据存在缺省项时,通过利用“NULL”替代缺省项,可保证每个行数据都没有缺省项,从而可以按照现有技术那样向数据库批量插入行数据且不会报错,而不必采用单行插入的方式?!?nbsp;
    基于上述举例,本发明实施例可按照下述方式实现步骤101:  
    将所述行数据中的每个数据项与所述第一预处理表中的字段进行对应,并利用所述每个数据项替换所述第一预处理表中对应字段所对应的空值;按所述预设顺序获取与所述预处理表中每个字段对应的每个数据项?!?nbsp;
    步骤102:按照下述方式完成向数据库插入数据的操作:  
    使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;判断所述第一计数器中的计数值是否达到设定阈值;如果是,则使所述第一计数器中的计数值置为零,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中,清除所述第一缓冲区中缓冲的所有行数据,继续执行步骤101;如果否,则继续执行步骤101;其中,在至少一次的所述第一读写锁的访问控制期间完成上述操作中的读写操作,所述第一读写锁的访问控制期间是从开启 所述第一读写锁后到关闭所述第一读写锁前的期间?!?nbsp;
    在本发明实施例中,参见图2所示的数据读写操作的流程示意图,可按照下述方式实现步骤102:  
    步骤201:在第一次开启所述第一读写锁的写模式后、且在第一次关闭所述第一读写锁的写模式前,使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中?!?nbsp;
    步骤202:判断所述第一计数器中的计数值是否达到设定阈值;如果是,则执行步骤203;如果否,则执行步骤201?!?nbsp;
    步骤203:在第二次开启所述第一读写锁的写模式后、且在第二次关闭所述第一读写锁的写模式前,使所述第一计数器中的计数值置为零?!?nbsp;
    步骤204:在开启所述第一读写锁的读模式后、且在关闭所述第一读写锁的读模式前,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中?!?nbsp;
    步骤205:在第三次开启所述第一读写锁的写模式后、且在第三次关闭所述第一读写锁的写模式前,清除所述第一缓冲区中缓冲的所有行数据;继续执行步骤201?!?nbsp;
    可见,本发明实施例是为数据库中的每个数据表配置一个缓冲区(而不是像现有技术那样为每个线程配置一个缓冲区),每个缓冲区中的数据可以是来自不同线程的行数据,所以,缓冲区中的行数据可以较快的达到设定阈值,此时,便可将缓存区中的所有数据批量插入到对应的数据表中,从而提高了向数据库插入数据的效率。此外,在行数据缓冲过程中,将计数器修改、数据插入缓冲区、从缓存区读取数据、清空缓冲区数据四个操作按读写的不同分开对待,通过利用读写锁进行控制,这样在每次关闭读写锁时,可允许对其它数据表进行上述四个操作中的相关操作,即通过调度机制对不同数据表进行操作,从而保证了公平性?!?nbsp;
    假设数据库有n个数据表,数据表平均有m列,缓冲行数的阈值平均为λ。本发明实施例在数据预处理过程中,通过初始化哈希表,将表字段作为Key值按字典顺序初始化为NULL,哈希表数据填充的时间整体开销为O(m*n),这种方法高效地解决了数据顺序性以及数据缺失的问题,而现有方案并没有相应的方法来解决这个问题。本发明实施例通过哈希方式能够保证在较短的时间内获得 目标数据表对应的计数器、缓冲区、以及读写锁,单次操作的时间开销为O(1)。数据缓冲过程中,通过阈值方式对批量插入的数量进行控制,并通过读写锁保证了并发操作的高效性。与现有方案相比,该方法降低了数据入库的时间延迟,同时通过批量插入的方式提高了数据库操作的效率,且本发明的整体空间复杂度仅为O(m*n*λ)?!?nbsp;
    另外,在实现步骤102前,需要预先获取与所述第一数据表对应的第一计数器、第一缓冲区和第一读写锁。在介绍获取方式之前首先对以下各个表格进行介绍:  
                                   表3  
    Key  Value  table_a table_a_count  table_b table_b_count ……  …… 
    参见表3,为计数器计数值的数据结构,表3的数据结构为一个哈希表。该哈希表的键(Key)为string类型,存储的实际值为数据库中数据表的表名(例如:table_a,table_b);该哈希表的值(Value)类型为int类型,代表计数器的计数值(例如:table_a_count,table_b_count),即需要向数据表插入的行数据的个数?!?nbsp;
    表4  
    Key  Value  table_a vector<string>  table_b  vector<string>  ……  …… 
    参见表4,为缓冲数据的数据结构,表4的数据结构为一个哈希表,是一个嵌套的哈希表结构。该哈希表的键(Key)为string类型,存储的实际值为数据库数据表的表名(例如:table_a,table_b),该哈希表的值(Value)类型为vector(容器)类型,对应一个缓冲区,所述缓冲区中可以存储动态个数的行数据,比如(a1,b1,c1),(a2,b2,c2)?!?nbsp;
    表5  
    Key  Value  table_a 读写锁_a  table_b 读写锁_b  ……  …… 
    参见表5,为读写锁的数据结构,表5的数据结构为一个哈希表。该哈希表的键(Key)为string类型,存储的实际值为数据库数据表的表名(例如:table_a,table_b),该哈希表的值(Value)为读写锁数据结构?!?nbsp;
    由于上述三个表的形式都是哈希表,所以为了能够在短时间内获得目标数据表对应的计数器、缓冲区和读写锁,可通过哈希算法实现?!?nbsp;
    基于上述内容,当所述第一计数器的计数值和所述第一数据表的表名存储于第二哈希表中,所述第一缓冲区中缓冲的行数据和所述第一数据表的表名存储于第三哈希表中,所述第一读写锁的数据结构和所述第一数据表的表名存储于第四哈希表中时,本发明实施例可根据哈希算法获取与所述第一数据表的表名对应的第一计数器、第一缓冲区和第一读写锁?!?nbsp;
      
    参见图3,为本发明实施例提供的向数据库插入数据的装置的结构示意图,所述数据库中的每个数据表与一个计数器、一个缓冲区和一个读写锁相互对应,所述装置包括:  
    行数据获取???01,用于获取需要向所述数据库的第一数据表插入的行数据,所述行数据中的每个数据项与所述第一数据表中的每个字段一一对应,所述第一数据表与第一计数器、第一缓冲区和第一读写锁相互对应;  
    数据处理???02,用于按照下述方式完成向数据库插入数据的操作:  
    使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;判断所述第一计数器中的计数值是否达到设定阈值;如果是,则使所述第一计数器中的计数值置为零,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中,清除所述第一缓冲区中缓冲的所有行数据,继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;如果否,则继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;其中,在至少一 次的所述第一读写锁的访问控制期间完成上述操作中的读写操作,所述第一读写锁的访问控制期间是从开启所述第一读写锁后到关闭所述第一读写锁前的期间?!?nbsp;
    优选地,所述数据处理???01,具体包括:  
    第一处理子???,用于在第一次开启所述第一读写锁的写模式后、且在第一次关闭所述第一读写锁的写模式前,使所述第一计数器累加一个计数,并将所述行数据放入所述第一缓冲区中;  
    阈值判断子???,用于判断所述第一计数器中的计数值是否达到设定阈值;  
    第二处理子???,用于在所述阈值判断子??榕卸系玫降乃龅谝患剖髦械募剖荡锏缴瓒ㄣ兄凳?,在第二次开启所述第一读写锁的写模式后、且在第二次关闭所述第一读写锁的写模式前,使所述第一计数器中的计数值置为零;在开启所述第一读写锁的读模式后、且在关闭所述第一读写锁的读模式前,将所述第一缓冲区中缓冲的所有行数据放入所述第一数据表中;在第三次开启所述第一读写锁的写模式后、且在第三次关闭所述第一读写锁的写模式前,清除所述第一缓冲区中缓冲的所有行数据;继续执行所述获取需要向所述数据库的第一数据表插入的行数据的步骤;  
    第三处理子???,用于在所述阈值判断子??榕卸系玫降乃龅谝患剖髦械募剖滴创锏缴瓒ㄣ兄凳?,继续利用所述行数据获取???03执行所述获取需要向所述数据库的第一数据表插入的行数据的功能?!?nbsp;
    基于所述第一数据表与第一预处理表相互对应,所述第一预处理表中按预设顺序存储了所述第一数据表中的每个字段,所述第一预处理表中每个字段对应的初始数据为空值;所述行数据获取???01,具体包括:  
    数据替换子???,用于将所述行数据中的每个数据项与所述第一预处理表中的字段进行对应,并利用所述每个数据项替换所述第一预处理表中对应字段所对应的空值;  
    行数据获取子???,用于按所述预设顺序获取与所述预处理表中每个字段对应的每个数据项?!?nbsp;
    优选地,所述第一预处理表为第一哈希表?!?nbsp;
    优选地,所述第一计数器的计数值和所述第一数据表的表名存储于第二哈希表中,所述第一缓冲区中缓冲的行数据和所述第一数据表的表名存储于第三哈希表中,所述第一读写锁的数据结构和所述第一数据表的表名存储于第四哈希表中;所述装置还包括:  
    对应项获取???,用于根据哈希算法获取与所述第一数据表的表名对应的第一计数器、第一缓冲区和第一读写锁?!?nbsp;
    本发明实施例提供的向数据库插入数据的装置,首先获取满足批量插入要求的行数据,然后,利用读写锁进行控制,以在每次关闭读写锁时,可允许对其它数据表进行计数器修改、数据插入缓冲区、从缓存区读取数据、清空缓冲区数据等相关操作,保证了并发操作的高效性。与现有方案相比,本发明实施例降低了数据入库的时间延迟,同时通过批量插入的方式提高了数据库操作的效率?!?nbsp;
      
    通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式来实现?;谡庋睦斫?,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执行本发明各个实施例或者实施例的某些部分所述的方法?!?nbsp;
    需要说明的是,对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可?!?nbsp;
    还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在 包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素?!?nbsp;
    对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围?!?nbsp;

    关于本文
    本文标题:一种向数据库插入数据的方法及装置.pdf
    链接地址://www.4mum.com.cn/p-6117190.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 江苏体育彩票网 手机买彩票 南国彩票论坛图规 哈灵江苏麻将作弊器 456游戏平台下载app 北京pk10遗漏历史 北京单场神单 江西时时彩在哪买 微乐贵州麻将ios pk10玩法 陕西11选5不开奖结果 跑码透码 9188彩票群 安徽快三开奖预测 快乐赛车大作战破解版下载手机版 七乐彩走势图