数据库读写方法和读写装置的制造方法

文档序号:10594188阅读:178来源:国知局
数据库读写方法和读写装置的制造方法
【专利摘要】本发明实施例提供的数据库读写方法中,包括:将数据库写入请求写入到一个HASH队列中,所述HASH队列按照键值对方式存储所述数据库写入请求,通过请求键唯一标识一个所述数据库写入请求;从所述HASH队列中读取所述数据库写入请求;以及根据读取到所述数据库写入请求进行数据库操作。通过按照键值对的方式将数据库写入请求写入到HASH队列中,能够合并具有相同键值的HASH队列,从而减少数据库操作的次数,减轻数据库压力,提高数据库访问效率。进一步地,增加数据库缓存用于数据库的读取操作,为了避免数据库缓存和数据库的不同步,在将数据库写入请求写入到HASH队列的同时,根据数据库写入请求更新数据库缓存。
【专利说明】
数据库读写方法和读写装置
技术领域
[0001 ]本发明涉及计算机领域,具体涉及一种数据库读写方法和读写装置。
【背景技术】
[0002]目前很多应用系统采用数据库表存储数据。由于应用系统需要频繁地从数据库表中读取和写入数据,从而使读写数据的效率直接关系到应用系统的整体效率。计算机技术的快速发展使工程师们提出各种方法提高数据库的访问效率,比较实用的有数据库读写分离技术和缓存技术。
[0003]数据库读写分离技术建立数据库副表,从副表中读取数据,写入数据时直接写入到主表中,同时同步到副表中,如图1a所示。数据库读写分离技术能显著提高数据库读取的效率,但对提高数据库写入效率提升效果不大。
[0004]缓存技术将数据库表的数据读取到内存中,应用系统直接从内存中读取数据,如果在内存中读取不到相关数据,再从数据库表中读取数据,并更新到内存中,如图1b所示。缓存技术用于数据库的读取操作,能有效避免对数据库的频繁读取。但如果数据库表的数据更新,而缓存表中的数据没有更新,则可能导致应用系统读取不到最新的数据。

【发明内容】

[0005]有鉴于此,本发明提供一种数据库读写方法和读写装置,用于解决上述问题。
[0006]根据本发明的第一方面,本发明提供一种数据库读写方法,包括:将数据库写入请求写入到一个HASH队列中,所述HASH队列按照键值对方式存储所述数据库写入请求,通过请求键唯一标识一个所述数据库写入请求;从所述HASH队列中读取所述数据库写入请求;以及根据读取到所述数据库写入请求进行数据库操作。
[0007]优选地,按照先进先出的原则从所述HASH队列中读取所述数据库写入请求。
[0008]优选地,所述数据库写入请求包括表更新和表添加,所述请求键包括所述数据库写入请求的表名和表的主键。
[0009]优选地,所述将数据库写入请求写入到HASH队列包括:以所述数据库写入请求的请求键检索所述HASH队列;如果检索到对应项,则将所述数据库写入请求和对应项合并;以及如果没有检索到对应的数据库写入请求,则将所述数据库写入请求添加到所述HASH队列尾。
[0010]优选地,所述将所述数据库写入请求和对应项合并包括:如果所述数据库写入请求和所述对应项包含对表的同一字段的操作,则用所述数据库写入请求的值替换所述对应项的值;以及如果所述数据库写入请求和所述对应项包含对表的不同字段的操作,则组合不同字段的值。
[0011 ]优选地,还包括:从数据库中读取数据,存储到数据库缓存中。
[0012]优选地,还包括:当将数据库写入请求写入到HASH队列时,根据所述数据库写入请求同步更新所述数据库缓存。
[0013]根据本发明的第二方面,本发明提供一种数据库读写装置,包括队列管理模块和缓存管理单元,所述队列管理模块包括写入单元和读取单元,所述写入单元用于将数据库写入请求写入到HASH队列;所述读取单元用于从所述HASH队列中读取所述数据库写入请求,进行数据库操作,其中,所述HASH队列按照键值对方式存储所述数据库写入请求,通过请求键唯一标识一个所述数据库写入请求;所述缓存管理单元,用于建立数据库缓存,所述缓存中存储有从数据库中读取的数据。
[0014]优选地,所述读取单元按照先进先出的原则读取所述数据库写入请求。
[0015]优选地,所述数据库写入请求包括表更新和表添加,所述请求键包括所述数据库写入请求的表名和表的主键。
[0016]优选地,所述写入单元包括:以所述数据库写入请求的请求键检索所述HASH队列;如果检索到对应项,则将所述数据库写入请求和对应项合并;以及如果没有检索到对应项,则将所述数据库写入请求添加到所述HASH队列尾。
[0017]本发明实施例提供的数据库读写方法中,通过按照键值对方式将数据库写入请求写入到HASH队列中,能够合并具有相同键值的HASH队列,从而减少数据库操作的次数,减轻数据库压力,提高数据库访问效率。进一步地,为了避免数据库缓存和数据库的不同步,在将数据库写入请求写入到HASH队列的同时,根据数据库写入请求更新数据库缓存。上述方法如果应用于一些对同一数据库表频繁更新的场景,能极大地提升数据库读写效率。
【附图说明】
[0018]通过参照以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
[0019]图la,lb分别是现有技术中的数据库读写分离技术和缓存技术的示意图;
[0020]图2是根据本发明实施例的数据库读写方法的示意图;
[0021]图3a_3c是根据本发明实施例中写入HASH队列的示意图;
[0022]图4是根据本发明实施例的数据库读写方法的流程图;
[0023]图5是根据本发明另一实施例的数据库读写方法的流程图。
【具体实施方式】
[0024]以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
[0025]图2是根据本发明实施例的数据库读写方法的示意图。在图2中,①表示客户端将数据库写入请求写入到HASH队列,②表示根据数据库写入请求更新数据库缓存,③表示从HASH队列中读取数据库写入请求,并把请求数据写入数据库中,④表示从数据库中读取数据存储到数据库缓存中,⑤表示客户端从数据库缓存读取数据。在图2中,客户端不直接操作数据库,直接数据库写入请求丢入HASH队列,同时客户端会根据数据库写入请求更新数据库缓存中的数据。可以使用一个进程从HASH队列里读取数据写入到数据库,这样高峰期就不会出现数据库连接过多的问题。而同时更新数据库缓存又可以保证在HASH队列没有及时更新数据库时还能获取最新的数据。另外,为了防止HASH队列中数据冗余,减少数据库操作次数,每个数据库写入请求按照键值对方式存储,如果后一个数据库写入请求和已有的数据库写入请求的键相同,则后一个数据库写入请求和前一个数据库写入请求进行合并,这种方式将相关的多个数据库写入请求合并成一次操作,从而从数量上减少了数据库操作的次数,提高了数据库访问效率。
[0026]在下文中,以图3a_3c为例,具体说明HASH队列的写入步骤。
[0027]在图3a_3c中,301,302和303表示具有相同键值的数据库写入请求。在图3a中,数据库写入请求301首先被存储到HASH队列的尾部。当客户端继续向HASH队列写入数据库写入请求302,由于HASH队列按照键值对方式存储数据,所以首先根据数据库写入请求302的键值查到301,然后根据数据库写入请求302更新301,如图3b所示。以此类推,当客户端继续向HASH队列写入数据库写入请求303,以数据库写入请求303更新301。由于数据库写入请求的请求键可以通过数据库表和主键字段组合表示,所以上述操作相当于将对同一个数据库表的多个写操作合并为一个写操作。注意,从HASH队列中读取数据存储到数据库时,一般按照先进先出的方式进行读取,如果一个新的数据库写入请求到达时,和它相同键的写入请求已经取出,则依然把这个数据库写入请求写入到HASH队列的尾部。
[0028]这种数据库写入方法对某些数据库应用场景特别有用。例如,如果在短时间内将order_inf ο中的status Id字段更新为A,B,C,D,E,并分别将这些更新请求写入到HASH队列中,可以发现,更新操作只被执行了一次(最后一次),并得到了statusld为E的最后结果。再例如,如果分三次修改order_infο中的statusld ,operator和operTime字段,则可以将三个修改合并为一个修改操作,同时修改status Id ,operator和operTime三个字段。
[0029]总而言之,如果多个数据库写入请求(主要是数据库表的insert和update操作)对同一数据库表的同一字段进行操作,则使用最后提交的数据库请求中的值,如果是多个数据库写入请求对同一数据库表的不同字段进行操作,则将这些操作的值组合起来。该数据库写入方法由于减少了数据库连接次数和操作次数,从而降低了数据库的压力。
[0030]图4是根据本发明实施例的数据库读写方法的流程图,包括步骤403-405。
[0031 ] 在步骤403中,将数据库写入请求写入到HASH队列。
[0032 ] HASH队列按照键值对方式存储数据库写入请求,通过请求键唯一标识一个数据库写入请求。一般地,将新的数据库写入请求存放到HASH队列的尾部。但如果该新的数据库写入请求和已有的数据库写入请求具有相同的键,则可以将两者合并(如前所述),或者,使用新的数据库写入请求的值替换已有的数据库写入请求的值,再或者,直接将新的数据库写入请求抛弃。
[0033]在步骤404中,从HASH队列中读取数据库写入请求。
[0034]在步骤405中,根据读取到数据库写入请求进行数据库操作。
[0035]图5是根据本发明另一实施例的数据库读写方法的流程图。包括步骤501-506。
[0036]在步骤501中,以数据库写入请求的请求键检索HASH队列。
[0037]HASH队列存储着数据库写入请求的键值对。通过写入请求的请求键检索HASH队列,确定是否已有对应项。
[0038]在步骤502中,判断是否检索到对应项。如果是,执行步骤503,如果否,执行步骤504。
[0039]在步骤503中,将数据库写入请求和对应项合并。
[0040]数据库写入请求包含对数据库表的insert、update操作。在本步骤中,将具有相同请求键的insert和/update操作合并成一个写入请求(相同字段的操作使用最新的值,不同字段的操作将值合并到一起)。
[0041 ] 在步骤504中,数据库写入请求添加到HASH队列尾。
[0042]在步骤505中,从HASH队列中读取数据库写入请求。
[0043]在步骤506中,根据读取到数据库写入请求进行数据库操作。
[0044]步骤505和506从HASH队列中分别读取每个写入请求,并根据请求完成数据库操作(即执行insert或update操作)。
[0045]优选地,将数据库缓存技术和本发明结合起来,建立数据库缓存用于数据库数据的存储,同时为了避免缓存中的数据和数据库表的数据不同步,在将数据库写入请求写入到HASH队列时,根据数据库写入请求同步更新数据库缓存。
[0046]在本发明实施例提供的数据库读写方法中,通过按照键值对的方式将数据库写入请求写入到HASH队列中,能够合并具有相同键值的HASH队列,从而减少数据库操作的次数,减轻数据库压力,提高数据库访问效率。进一步地,通过数据库缓存用于数据库的读取操作,为了避免数据库缓存和数据库的不同步,在将数据库写入请求写入到HASH队列的同时,根据数据库写入请求更新数据库缓存,从而减轻数据库读写的压力,提高数据库整体性能。
[0047]本发明实施例还提供一种数据库读写装置,包括队列管理模块和缓存管理单元,队列管理模块包括写入单元和读取单元,写入单元用于将数据库写入请求写入到HASH队列;读取单元用于从HASH队列中读取数据库写入请求,进行数据库操作,其中,HASH队列按照键值对方式存储数据库写入请求,通过请求键唯一标识一个数据库写入请求,缓存管理单元,用于建立数据库缓存,从数据库中读取数据存储到数据库缓存中。
[0048]在一个优选的实施例中,读取单元按照先进先出的原则读取数据库写入请求。虽然HASH队列会将相同的请求键的数据库写入请求合并,但是合并后的数据库写入请求被认为其进入时间为较早的那个数据库写入请求的进入时间。
[0049]在一个优选的实施例中,请求键包括所述数据库写入请求对应的表名称和主键字段。
[0050]在一个优选的实施例中,所述写入单元包括:以数据库写入请求的请求键检索HASH队列,如果检索到对应项,则将数据库写入请求和对应项合并;没有检索到对应的数据库写入请求,则将数据库写入请求添加到HASH队列尾。
[0051]在一个优选的实施例中,缓存管理单元会根据数据库写入请求实时更新缓存内的数据。
[0052]附图中的流程图、框图图示了本发明实施例的系统、方法、装置的可能的体系框架、功能和操作,流程图和框图上的方框可以代表一个模块、程序段或仅仅是一段代码,所述模块、程序段和代码都是用来实现规定逻辑功能的可执行指令。也应当注意,所述实现规定逻辑功能的可执行指令可以重新组合,从而生成新的模块和程序段。因此附图的方框以及方框顺序只是用来更好的图示实施例的过程和步骤,而不应以此作为对发明本身的限制。
[0053]系统的各个模块或单元可以通过硬件、固件或软件实现。软件例如包括采用JAVA、C/C++/C#、SQL等各种编程语言形成的编码程序。虽然在方法以及方法图例中给出本发明实施例的步骤以及步骤的顺序,但是所述步骤实现规定的逻辑功能的可执行指令可以重新组合,从而生成新的步骤。所述步骤的顺序也不应该仅仅局限于所述方法以及方法图例中的步骤顺序,可以根据功能的需要随时进行调整。例如将其中的某些步骤并行或按照相反顺序执行。
[0054]根据本发明的系统和方法可以部署在单个或多个服务器上。例如,可以将不同的模块分别部署在不同的服务器上,形成专用服务器。或者,可以在多个服务器上分布式部署相同的功能单元、模块或系统,以减轻负载压力。所述服务器包括但不限于在同一个局域网以及通过Internet连接的多个PC机、PC服务器、刀片机、超级计算机等。
[0055]以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种数据库读写方法,包括: 将数据库写入请求写入到一个HASH队列中,所述HASH队列按照键值对方式存储所述数据库写入请求,通过请求键唯一标识一个所述数据库写入请求; 从所述HASH队列中读取所述数据库写入请求;以及 根据读取到所述数据库写入请求进行数据库操作。2.根据权利要求1所述的数据库读写方法,其中,按照先进先出的原则从所述HASH队列中读取所述数据库写入请求。3.根据权利要求1所述的数据库读写方法,其中,所述数据库写入请求包括表更新和表添加,所述请求键包含所述数据库写入请求的表名和表的主键。4.根据权利要求3所述的数据库读写方法,其中,所述将数据库写入请求写入到HASH队列包括: 以所述数据库写入请求的请求键检索所述HASH队列; 如果检索到对应项,则将所述数据库写入请求和对应项合并;以及 如果没有检索到对应项,则将所述数据库写入请求添加到所述HASH队列尾。5.根据权利要求4所述的数据库读写方法,其中,所述将所述数据库写入请求和对应项合并包括: 如果所述数据库写入请求和所述对应项包含对表的同一字段的操作,则用所述数据库写入请求的值替换所述对应项的值;以及 如果所述数据库写入请求和所述对应项包含对表的不同字段的操作,则组合不同字段的值。6.根据权利要求1所述的数据库读写方法,还包括:从数据库中读取数据,存储到数据库缓存中。7.根据权利要求6所述的数据库读写方法,还包括:当将数据库写入请求写入到HASH队列时,根据所述数据库写入请求同步更新所述数据库缓存。8.—种数据库读写装置,包括队列管理模块和缓存管理单元, 所述队列管理模块包括写入单元和读取单元,所述写入单元用于将数据库写入请求写入到HASH队列;所述读取单元用于从所述HASH队列中读取所述数据库写入请求,进行数据库操作,其中,所述HASH队列按照键值对方式存储所述数据库写入请求,通过请求键唯一标识一个所述数据库写入请求; 所述缓存管理单元,用于建立数据库缓存,所述缓存中存储有从数据库中读取的数据。9.根据权利要求8所述的数据库读写装置,其中,所述读取单元按照先进先出的原则读取所述数据库写入请求。10.根据权利要求8所述的数据库读写装置,其中,所述数据库写入请求包括表更新和表添加,所述请求键包括所述数据库写入请求的表名和表的主键。11.根据权利要求8所述的数据库读写装置,其中,所述写入单元包括: 以所述数据库写入请求的请求键检索所述HASH队列; 如果检索到对应项,则将所述数据库写入请求和对应项合并;以及 如果没有检索到对应项,则将所述数据库写入请求添加到所述HASH队列尾。
【文档编号】G06F17/30GK105956166SQ201610339089
【公开日】2016年9月21日
【申请日】2016年5月19日
【发明人】郭秋实
【申请人】北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1