一种数据库分表分页查询方法及系统的制作方法

文档序号:6550757阅读:162来源:国知局
一种数据库分表分页查询方法及系统的制作方法
【专利摘要】本发明涉及一种数据库分表分页查询方法及系统,应用层向数据访问层发起查询请求,由数据访问层计算得出符合查询条件的N张表并分别查询每张表中满足条件的记录数,之后,根据请求页和请求页的记录数,定位到请求页所在的表和该表中记录所处的位置,再根据表和记录所处的位置查询数据库获取相应的记录,最后返回结果至应用层,在数据访问层访问数据库之前与处理完结果后都访问缓存区域,读取或保存相应数据,通过分层分页查询,提高了数据库资源的有效利用,缓解了数据库系统的压力。
【专利说明】一种数据库分表分页查询方法及系统

【技术领域】
[0001] 本发明涉及一种数据库分表分页查询的方法及系统。

【背景技术】
[0002] 随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅 是存储和管理数据,而转变成用户所需要的各种数据管理的方式,同时,数据库中的信息量 越来越大,而人们时常需要根据自身需要检索查询数据库中的各种信息。当数据量过大时, 查询时可能会导致各种各样的问题发生,如服务器资源被耗尽,因数据传输量过大而使处 理超时等,最终都会导致查询无法完成,查询得到的结构往往很多,甚至是海量数据。如果 统统一起显示,往往也让人无法找到其真正想要获知的信息。当数据库中一张表的数据量 过大时,我们会把该表的数据按照某种规则,如按时间区间进行切分,存储到多个结构相同 的表上,后续在对数据进行操作时,就不用再操作一张大表,而是把压力分摊到多个表上, 以提高执行效率。在进行分页查询时,由于数据可能分布在多张表上,则完成对多张表的查 询工作。
[0003] 如专利申请号为201310486341. X的中国专利申请提出了一种数据库分页查询及 数据库的构建方法和装置,接收分页查询请求,根据请求查询统计表,得到与被请求查询的 页面相关的索引表,在相关的索引表中获得被请求查询的页面所包含的消息的消息主键, 根据获得的被请求查询的页面所包含的消息的消息主键,在主信息表中获取相应的消息内 容。再如申请号为201310753860. 8的中国专利申请中提供了一种基于MVC的分页查询系 统,包括数据库读取单元、服务层传接数据单元和MVC单元,所述的数据库读取单元读取信 息后传输给服务层传接数据单元,服务层传接数据单元从MVC控制器中选择需要的方法并 获取,然后经MVC处理将数据反馈到服务层传接数据单元,服务层传接数据单元将请求参 数传输给数据库读取单元,进而反馈查询结果。
[0004] 这种技术利用数据库本身的能力解决了分表分页查询的功能,但是,考虑到数据 库是很重要的资源,如果每张表的数据量都很大,如图2所示,在利用数据库技术,联合查 询四张表获取满足条件的总记录数以及分页按创建时间倒序查询出满足条件的第一页的 记录将会长时间占用数据库连接,特别是对于一些需按时间倒序查询记录的事件,会极大 耗费数据库资源,造成其它线程等待,严重影响数据库和程序性能,如果存在多个同样的操 作,甚至可能造成数据库系统的崩溃。


【发明内容】

[0005] 为了解决上述问题,本发明提供一种解决数据库分表分页查询的方法及系统,以 解决分表分页查询时,严重耗费数据库资源的问题,以缓解数据库系统压力。
[0006] 本发明第一个方面提供了一种数据库分表分页查询的方法,通过计算得出符合查 询条件的N张表并对所述N张表进行查询以获得满足条件的记录,具体包括以下步骤: S1、分别查询每张表中满足条件的记录数; 52、 根据请求页和请求页的记录数,定位到请求页所在的表和该表中记录所处的位 置; 53、 根据表和记录所处的位置查询数据库获取相应的记录; 54、 对请求和请求结果进行缓存的建立及删除; 55、 返回请求结果。
[0007] 优选的是,所述步骤S1-S3包括对表进行查询,之后由缓存区域经过步骤S4对数 据进行存储。
[0008] 在上述任一方案中优选的是,所述计算得出符合查询条件的表之前判断缓存池中 是否有以查询条件为键的缓存对象,若存在此缓存对象,则直接将缓存池中的结果返回给 请求方。
[0009] 在上述任一方案中优选的是,所述N张表至少为一张表。
[0010] 在上述任一方案中优选的是,在所述步骤S4中,以查询条件为键,将查询条件及 查询结果放入缓存池中。
[0011] 在上述任一方案中优选的是,在数据库存储的信息发生变化时,删除缓存池中相 对应的缓存对象。
[0012] 在上述任一方案中优选的是,所述删除相对应的缓存对象指删除在与查询条件相 关的数据库发生变化时而导致不具备实时性的缓存对象。
[0013] 在上述任一方案中优选的是,所述N张表从同一数据库中进行调用。
[0014] 在上述任一方案中优选的是,所述N张表从不同数据库中进行调用。
[0015] 本发明另一个方面提供了一种数据库分表分页查询系统,包括: 应用层,用于发起分表分页查询请求; 数据访问层,计算需要查询的N张表; 处理单元:用于查询每张表中满足条件的记录数; 定位单元:用于在数据库中定位记录; 缓存区域:用于接收查询条件及查询结果并对数据进行缓存。
[0016] 优选的是,所述处理单元与定位单元位于数据访问层。
[0017] 在上述任一方案中优选的是,所述数据访问层连接缓存区域。
[0018] 在上述任一方案中优选的是,所述N张表至少为一张表。
[0019] 在上述任一方案中优选的是,所述缓存区域用于保存数据访问层处理后得到的结 果。
[0020] 在上述任一方案中优选的是,在数据库存储的信息发生变化时,删除缓存区域中 相对应的缓存对象。
[0021] 在上述任一方案中优选的是,所述删除相对应的缓存对象指删除在与查询条件相 关的数据库发生变化时而导致不具备实时性的缓存对象。
[0022] 在上述任一方案中优选的是,所述N张表位于同一数据库。
[0023] 在上述任一方案中优选的是,所述N张表位于不同数据库

【专利附图】

【附图说明】
[0024] 图1为按照本发明的数据库分表分页查询方法的一优选实施例的分表示意图。
[0025] 图2为现有技术数据库分页处理示意图。
[0026] 图3为按照本发明的数据库分表分页查询方法的图1所示实施例的一优选实施例 的分表示意图。
[0027] 图4为按照本发明的数据库分表分页查询方法的图1所示实施例的一优选实施例 的分表流程图。
[0028] 图5为按照本发明的数据库分表分页查询方法的图1所示实施例的一优选实施例 的清除缓存对象不意图。
[0029] 图6为按照本发明的数据库分表分页查询方法的图1所示实施例的一优选实施例 的清除缓存对象流程图。
[0030] 图7为按照本发明的数据库分表分页查询方法的图1所示实施例的一优选实施例 的数据库分表分页处理系统结构图。

【具体实施方式】
[0031] 为使本发明的上述目的、特征和优点更加明显易懂,下面结合附图和具体实施方 式对本发明做进一步详细的说明。
[0032] 本发明第一个方面提供了一种数据库分表分页查询的方法,通过计算得出符合查 询条件的N张表并对所述N张表进行查询以获得满足条件的记录,如图4所示,具体包括以 下步骤: 51、 分别查询每张表中满足条件的记录数; 52、 根据请求页和请求页的记录数,定位到请求页所在的表和该表中记录所处的位 置; 53、 根据表和记录所处的位置查询数据库获取相应的记录; 54、 对请求和请求结果进行缓存的建立及删除; 55、 返回请求结果。
[0033] 所述步骤S1-S3为对表进行查询的过程,之后由缓存区域经过步骤S4对数据进行 存储。
[0034] 所述计算得出符合查询条件的表之前判断缓存池中是否有以查询条件为键的缓 存对象,若存在此缓存对象,则直接将缓存池中的结果返回给请求方,或者如图4所示,首 先取出缓存对象,之后依据缓存对象中的表及记录的位置来查询数据库获得相应的记录。
[0035] 在本实施例中,所述N张表至少为一张表,对于多张表,如步骤S1所示,分别查询 每张表中满足条件的记录数,之后定位至每一张表的每一处记录点,从中获取记录。
[0036] 为了与之前所述计算得出符合查询条件的表之前判断缓存池中是否有以查询条 件为键的缓存对象相匹配,在所述步骤S4中,以查询条件为键,特别的,可将查询条件及查 询结果一并放入缓存池中,在数据库存储的信息发生变化时,删除缓存池中相对应的缓存 对象。即所述删除相对应的缓存对象指删除在与查询条件相关的数据库发生变化时而导致 不具备实时性的缓存对象。
[0037] 在本实施例中,所述N张表从同一数据库中进行调用或者从不同的数据库中进行 调用。
[0038] 本发明另一个方面提供了一种一种数据库分表分页查询系统,包括: 应用层,用于发起分表分页查询请求; 数据访问层,计算需要查询的N张表; 处理单元:用于查询每张表中满足条件的记录数; 定位单元:用于在数据库中定位记录; 缓存区域:用于接收查询条件及查询结果并对数据进行缓存。
[0039] 在本实施例中,所述处理单元与定位单元位于数据访问层,而缓存区域与数据库 并列存储数据,由数据访问层视情况读取数据库或缓存区域内的数据,所述情况为数据访 问层调用读取缓存区域,判断缓存池中是否有以查询条件为键的缓存对象,若存在此缓存 对象,则直接将缓存池中的结果返回给应用层。
[0040] 在本实施例中,所述数据访问层连接缓存区域,所述N张表至少为一张表,同样为 了使缓存区域有足够的缓存对象,使数据访问层不必每次都访问数据库,所述缓存区域同 样用于保存数据访问层处理后得到的结果。在数据库存储的信息发生变化时,删除缓存区 域中相对应的缓存对象,即所述删除相对应的缓存对象指删除在与查询条件相关的数据库 发生变化时而导致不具备实时性的缓存对象。
[0041] 在本实施例中,所述N张表位于同一数据库或者位于不同的数据库。
[0042] 下面以具体的查询请求对本发明做进一步详细的说明。
[0043] 对于要分页查询多张相同表的请求,本发明提出了一种新的数据库分表分页查询 的方法,该方法在查询满足条件的纪录数时,对每个表分开处理,然后定位出请求页所在的 表和位置,直接定位数据库记录;同时,还可以对查询条件进行缓存,方便下次以同样条件 的查询请求使。
[0044] 本实施例首先从分页来讲,如果只是为了分页,可以考虑这种分表,就是表的id 是范围性的,且id是连续的,比如第一张表id是1到10万,第二张是10万到20万,再如本 实施例的按照月份、年份、日、星期等进行分页,如果是其他的分表方式,建议用sphinx先 建索引,然后查询分页。
[0045] 本发明适用于很多领域大数据量分表分页查询的情况,例如论坛的帖子、博客微 博的博文、订单系统的订单数据、交易系统的交易数据等。特别适合处理按照某种顺序进行 分表的场景。
[0046] 图1为在查询之前的分表示意图,这里我们以创建时间createTime按月份拆分为 分表依据,分别存储每个createTime下的记录attribute。
[0047] 如图3、图4所示,本发明提供一种数据库分表分页处理方法示意图和流程图,具 体步骤如下: A1.应用层发起分页查询多张相同表的请求至数据访问层,所述的多张表可以在同一 个数据库,也可以在多个数据库; 例如查询条件包括如下几个方面: a. 查询的表:T_0RDER_YYYYMM(当然也可以按其他时间单位分表,如年、周、日等,这里 以月为例), b. 订单时间范围:2014. 1. 15-2014. 4. 15, c. 请求页:第1000页, d. 每页的记录数:20条, e.排序顺序:按订单时间最近的记录靠前。
[0048] f.金额范围:消费金额大于100元, A2.数据访问层在获取到查询数据以后,计算出需要查询的表:T_0RDER_201401、T_ 0RDER_201402、T_0RDER_201403、T_0RDER_201404。
[0049] 传统的,在计算出需要查询的表之后,如图2所示,利用数据库技术,联合查询四 张表获取满足条件的总记录数,之后利用数据库技术,分页按创建时间倒序查询出满足条 件的第一页的记录,最后将结果返回至应用层,然而这种技术在利用数据库技术时 A3.判断缓存区域中是否存在以 a (T_0RDER_201401、T_0RDER_201402、T_0RDER_201403、 T_0RDER_201404四张表)、b、c、d、e、f为键的缓存对象。 A4.若缓存区域中不存在以a、b、c、d、e、f为键的缓存对象,则走以下步骤A401-A404 : (假如没有根据a、b、c、d、e、f条件查询过) A401.分别查询出这4张表中订单时间在2014. 1. 15与2014. 4. 15之间,金额大于100 元的记录数,假如分别为:1〇88、10021、11、19977 ; A402.根据要查询的1000页,每页20条记录,倒序排列等条件,可以计算出要获取T_ 0RDER_201401、T_0RDER_201402、T_0RDER_201403、T_0RDER_201404 这四张表中按订单时间 倒序排列的第19981到20000之间的记录,由此可定位到需要获取T_0RDER_201403表中按 订单时间倒序排列的第4-11条记录和T_0RDER_201402表中按订单时间倒序排列的第1-8 条记录;(如果每张表的数据量都很大,大多数情况需要的记录会在一张表中,最坏情况是 每张表中都有记录) A403.以查询条件 a(T_0RDER_201401、T_0RDER_201402、T_0RDER_201403、T_ 0RDER_201404四张表)、b、c、d、e、f为键,以4张表的记录数、定位到两张表及位置为值放 入缓存中; A404.查询数据库,获取T_0RDER_201403表中按订单时间倒序排列的第4-11条记录和 T_0RDER_201402表中按订单时间倒序排列的第1-8条记录,到步骤A6 ; A5.若缓存区域中存在以a、b、c、d、e、f为键的缓存对象,则走以下步骤A501-A502 : (假如已经根据a、b、c、d、e、f条件查询过) A501.从缓存中取出 T_0RDER_201401、T_0RDER_201402、T_0RDER_201403、T_ 0RDER_201404四张表的记录数,要查询的两张表及位置; A502.查询数据库,获取T_0RDER_201403表中按订单时间倒序排列的第4-11条记录和 T_0RDER_201402表中按订单时间倒序排列的第1-8条记录,到步骤A6 ; A6.将得到的这20条记录、4张表记录数之和31097返回给应用层。
[0050] 本实施例还提供了清除缓存对象的方法,图5、图6分别是清除缓存对象示意图和 流程图,具体如下: B1.当对实施本方案的表进行增加或删除操作时,例如对T_0RDER_201403表增加了一 条记录,触发一个事件,在本实施例中,实施本方案的表可以再某个地方进行配置。
[0051] B2.依据B1中的事件进行判断,缓存区域中是否已经缓存过与表T_0RDER_201403 相关的对象,例如上述例子的缓存对象需要调用表T_0RDER_201403中的相关数据,故该缓 存对象是关联该事件的。
[0052] 4.若缓存对象与该事件关联,则将此缓存对象删除。
[0053] 如图7所示,为数据库分表分页查询方法及系统整体结构图,应用层通过网络获 取到客户的需求,将查询条件上传至数据访问层,数据访问层连接缓存区域与数据库,首先 读取缓存区域,判断缓存区域中是否存在相同查询条件为键值的请求,如果有,则可以直接 从缓存区域来读取数据结果或者从缓存区域读取数据库中的页及位置信息,之后从数据库 获取详细记录,如果缓存区域中不存在该请求,则读取数据库中的表,已经步骤A2-A5来获 取所述记录,同时将结果存储在缓存区域中,当以同样的条件再次进行查询时,可以直接从 缓存中获取每张表满足条件的记录数、请求页记录所在的表和位置,据此获取相应的数据 库记录。
[0054] 通过本发明的分页查询方法,使得数据的查询不仅通过分页分表的形式完成,而 且在计算过程中,也是分表分页进行统计,在得到所需结果后,从数据库进行读取,通过本 发明的实施例,更能清楚、高效的完成对多张表的查询工作。
[0055] 需要说明的是,按照本发明的数据库分表分页查询方法及系统包括上述实施例中 的任何一项及其任意组合,但上面所述的实施例仅仅是对本发明的优选实施方式进行描 述,并非对本发明范围进行限定,在不脱离本发明设计精神前提下,本领域普通工程技术人 员对本发明的技术方案作出的各种变形和改进,均应落入本发明的权利要求书确定的保护 范围内。
【权利要求】
1. 一种数据库分表分页查询方法,通过计算得出符合查询条件的N张表并对所述N张 表进行查询以获得满足条件的记录,其特征在于,包括以下步骤: 51、 分别查询每张表中满足条件的记录数; 52、 根据请求页和请求页的记录数,定位到请求页所在的表和该表中记录所处的位 置; 53、 根据表和记录所处的位置查询数据库获取相应的记录; 54、 对请求和请求结果进行缓存的建立及删除; 55、 返回请求结果。
2. 如权利要求1所述的数据库分表分页查询方法,其特征在于:所述步骤S1-S3包括 对表进行查询,之后由缓存区域经过步骤S4对数据进行存储。
3. 如权利要求1所述的数据库分表分页查询方法,其特征在于:在所述计算得出符合 查询条件的N张表之前判断缓存池中是否有以查询条件为键的缓存对象,若存在此缓存对 象,则直接将缓存池中的结果返回给请求方。
4. 如权利要求1所述的数据库分表分页查询方法,其特征在于:在所述步骤S4中,以 查询条件为键,将查询条件及查询结果放入缓存池中。
5. 如权利要求4所述的数据库分表分页查询方法,其特征在于:在数据库存储的信息 发生变化时,删除缓存池中相对应的缓存对象。
6. 如权利要求5所述的数据库分表分页查询方法,其特征在于:所述删除的缓存对象 为与查询条件相关的数据库发生变化时而不具备实时性的缓存对象。
7. 如权利要求1所述的数据库分表分页查询方法,其特征在于:所述N张表从同一数 据库中进行调用。
8. 如权利要求1所述的数据库分表分页查询方法,其特征在于:所述N张表从不同数 据库中进行调用。
9. 一种数据库分表分页查询系统,包括: 应用层,用于发起分表分页查询请求; 数据访问层,计算需要查询的N张表,其特征在于还包括: 处理单元:用于查询每张表中满足条件的记录数; 定位单元:用于在数据库中定位记录; 缓存区域:用于接收查询条件及查询结果并对数据进行缓存。
10. 如权利要求9所述的数据库分表分页查询系统,其特征在于:所述处理单元与定位 单元位于数据访问层。
【文档编号】G06F17/30GK104123340SQ201410287735
【公开日】2014年10月29日 申请日期:2014年6月25日 优先权日:2014年6月25日
【发明者】薛继东 申请人:世纪禾光科技发展(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1