CN107918642A - 数据查询方法、服务器及计算机可读存储介质 - Google Patents
数据查询方法、服务器及计算机可读存储介质 Download PDFInfo
- Publication number
- CN107918642A CN107918642A CN201711019826.2A CN201711019826A CN107918642A CN 107918642 A CN107918642 A CN 107918642A CN 201711019826 A CN201711019826 A CN 201711019826A CN 107918642 A CN107918642 A CN 107918642A
- Authority
- CN
- China
- Prior art keywords
- data
- storehouse
- point
- business datum
- minimum
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2457—Query processing with adaptation to user needs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据查询方法、服务器及计算机可读存储介质,其中的数据查询方法包括:获取针对数据库的数据查询请求,根据数据查询请求确定分库查询条件并获取满足所述分库查询条件的业务数据;从各分库获取到的业务数据中确定一个最小查询键值数据,确定所述最小查询键值数据在各分库中的相对偏移量,进而计算所述最小查询键值数据的全局偏移量;根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量;输出满足所述数据查询请求的业务数据。本发明实施例通过查询分库中的少量业务数据并确定其全局偏移量,进而获取满足数据库查询条件的业务数据,可降低内存消耗,高性能完成业务需求。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据查询方法、服务器及计算机可读存储介质。
背景技术
互联网中的很多业务场景中都需要用到分页拉取数据,例如微信消息过多时,拉取第N页消息,购物网站下单过多时,拉取第N页订单,或者浏览搜索结果时,查看第N页内容等。在分页拉取数据的过程中,应用服务器根据客户端请求访问数据库,并获取需要的数据。
在现有的高并发大流量的互联网架构中,数据库中存储了大量的数据,且根据需要进行了分库处理。因此分页拉取数据涉及到跨库获取数据,现有的处理方法很多时候都通过服务层修改数据库查询语句,扩大数据召回量,在内存中进行大量排序来换取业务无损并且数据精确。这将消耗大量服务器内存并降低服务性能。
发明内容
有鉴于此,本发明实施例提供一种数据查询方法、服务器及计算机可读存储介质,可在无需增加大量内存消耗的情况下高性能完成业务需求。
为了解决上述技术问题,本发明实施例第一方面提供了一种数据查询方法,所述方法包括:
获取针对数据库的数据查询请求,所述数据库包括根据业务主键切分得到的多个数据分库,根据所述数据查询请求确定分库查询条件,并从各分库获取满足所述分库查询条件的业务数据,所述分库查询条件包括数据查询键值,所述数据查询键值为所述数据库的非业务主键。
从各分库获取到的业务数据中确定一个最小查询键值数据,确定所述最小查询键值数据在各分库中的相对偏移量,进而计算所述最小查询键值数据的全局偏移量;
根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量;
根据所述各个数据的全局偏移量,输出满足所述数据查询请求的业务数据。
相应地,本发明实施例第二方面还提供了一种服务器,所述服务器包括用于执行上述第一方面方法的单元。
相应地,本发明实施例第三方面还提供了一种服务器,所述服务器包括处理器、通信接口和存储器,所述处理器、通信接口和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,:
相应的,本发明实施例第四方面还提供了一种计算机可读存储介质,所述存储介质中存储有多条指令,所述指令适于由处理器加载并执行如本发明实施例第一方面提供的任一情况下的数据查询方法。
可以看出,在本发明实施例提供的技术方案中,数据查询服务器首先获取针对数据库的查询请求,然后根据该查询请求的条件获取满足分库查询条件的业务数据;从这些业务数据中获取最小查询键值数据,并确定该最小查询键值数据在各分库中的相对偏移量;获取最小查询键值数据与每个分库对应的最大键值数据之间的所有二次查询业务数据,计算获得最小查询键值的全局偏移量,并根据它确定之前获取二次查询业务数据对应的全局偏移量;根据二次查询业务数据的全局偏移量,输出满足初始查询请求的业务数据。可以看出,在这个过程中,由于是根据查询请求条件从分库中获取满足要求的业务数据,并且根据最小查询键值数据与每个分库对应的最大键值数据获得二次查询业务数据及其全局偏移量,最终获得查询结果,整个过程中只涉及到查询偏移量附近的少量业务数据,大大降低了内存消耗,并且能高性能地完成查询任务。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据查询方法的示意流程图;
图2是本发明实施例提供的一种确定最小查询键值数据在各分库中的相对偏移量的示意流程图;
图3是本发明实施例提供的一种具体的数据查询过程的示意流程图;
图4是本发明实施例提供的一种服务器示意框图;
图5是本发明另一实施例提供的一种服务器示意框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
本发明实施例中的数据查询方法在不加以特别说明的情况下,可以由本发明的数据查询服务器实施,而本发明实施例的数据查询服务器,可以实现在网络后台服务器侧,例如集成在应用后台服务器、网站服务器实现或独立于应用后台服务器或网站服务器实现。
参见图1,是本发明实施例提供的一种数据查询方法的示意流程图,如图所示数据查询方法可包括:
S101、获取针对数据库的数据查询请求,根据所述数据查询请求确定分库查询条件,并从各分库获取满足所述分库查询条件的业务数据。
具体地,获取针对数据库的数据查询请求,所述数据库包括根据业务主键切分得到的多个数据分库,根据所述数据查询请求确定分库查询条件,并从各分库获取满足所述分库查询条件的业务数据,所述分库查询条件包括数据查询键值,所述数据查询键值为所述数据库的非业务主键。
另外,所述数据查询请求包括所述数据查询键值、起始全局偏移量以及数据查询数量;
所述分库查询条件包括所述数据查询键值、根据所述起始全局偏移量以及数据查询数量确定得到的分库起始偏移量以及分库数据查询数量。
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库,通常分为层次式数据库、网络式数据库和关系式数据库。本发明中涉及的数据库为关系式数据库。
在本发明的技术方案中,数据库包括业务主键和非业务主键,业务主键表示在数据库表中把某一组特定的具有业务逻辑含义的字段作为业务主键,可以标识数据的唯一性。非业务主键是除了业务主键之外的其他字段,包括其他业务字段、逻辑字段和时间字段等。
当例如因为一个数据库的数据量过大,或者为满足业务需求时,就需要对数据库进行分库,在可选的实施例中,可以使用业务主键id(Identity,身份标识号码)取模的算法来分库,这样既能够保证每个分库的数据分布是平均的,又能够保证每个库的请求分布是均匀的。另外,也可根据主键id先进行hash计算再取模,或者根据数值型id奇偶性、整除性等规则进行分库。
本发明中的数据查询请求包括:数据查询键值、起始全局偏移量以及数据查询数据。其中,数据查询键值表示可用于建立索引排序的某一字段,从非业务主键中选取,且数据查询键值与数据库中的数据记录一一对应。起始全局偏移量表示数据查询请求获得的第一条数据对应的数据查询键值序列。数据查询数量表示数据查询请求需要获取从全局偏移量对应序列开始的最大数据记录条数。
在可选的实施例中,由于时间具有连续性和明确的先后性等特征,可以用时间字段作为数据查询键值,用于查询、添加和删除等操作。除此之外,也可以根据其他包含明确先后顺序的字母、数字、字符等作为数据查询键值。
获取数据查询请求后,根据所述数据查询请求确定分库查询条件,并从各分库获取满足所述分库查询条件的业务数据。
具体地,本发明技术方案中针对的数据库包含多个分库,因此查询过程中涉及到跨库查询的问题。根据数据查询请求确定分库查询条件的过程包括:
确定数据查询键值,确定某个统一的字段作为各分库的数据查询键值,并根据数据查询键值为各分库建立索引排序;
确定分库起始偏移量,根据数据查询请求中的起始全局偏移量,可推断分库查询中的分库起始偏移量。各分库起始偏移量之和,应该等于起始全局偏移量,以便查询的结果定位更准确。
确定分库数据查询数量,分库数据查询数量的设定,需要满足各分库查询数量的和不小于数据查询请求中的数据查询数量,用以确保分库返回的数据中包含了满足数据查询请求的所有数据。
在可选的实施例中,各分库起始偏移量可以根据全局偏移量平均划分,即根据起始全局偏移量除以分库个数得到的平均值。如果分库时根据业务主键id取模求得,一定程度上保证了分库的均衡性,所以平均划分偏移量可以更好地匹配原始偏移量对应的起始索引位置。另外,分库起始偏移量也可以不平均划分,根据分库的数据分布和数据量推断各分库不同的起始偏移量。
在可选的实施例中,分库数据查询数量在各分库中可以是相同的或者不同的。如果分库时根据业务主键id取模求得,一定程度上保证了分库的均衡性,那么分库中的数据在全局中的偏移量也应该是平均对应的,所以平均设置分库数据查询数量,可在一定程度上保证分库返回数据完全覆盖了需要查询的数据,并且保证返回数据条数较少,可减少计算内存的消耗。在另外的情况下,如果分库时设定的划分规则使得分库的数据量和数据分布不均衡,那么根据分库的不同情况,为各分库设定不同的分库数据查询数量。
确定分库查询条件后,从各分库获取满足分库查询条件的业务数据。具体地,各分库根据各自的查询条件,分别返回一页满足各自查询条件的数据,这些数据形成满足分库查询条件的业务数据,这些业务数据根据数据查询键值排序。
获取满足分库查询条件的业务数据后,进行步骤S102。
S102、从各分库获取到的业务数据中确定一个最小查询键值数据,确定所述最小查询键值数据在各分库中的相对偏移量,进而计算所述最小查询键值数据的全局偏移量。
具体地,最小查询键值数据,即是最小查询键值对应的数据记录。在各分库中,数据查询键值是唯一的,所以各分库都可以确定一个最小键值数据,比较这些最小键值数据,可确定一个最小查询键值数据。相对偏移量,是指业务数据在各分库中的偏移量,用来表示业务数据在分库中的位置。
在可选的实施例中,数据库的数据查询键值内容可以是时间,所以这里的最小查询键值数据,可对应为时间键值最小的数据。另外,也可以是其他字符、数字或字母等具有先后顺序的字段作为数据查询键值的内容。
在可选的实施例中,确定上述最小查询键值数据在各分库中的相对偏移量,包括如下步骤:
确定各分库获取到的业务数据中各个分库对应的最大键值数据;
从各个分库中获取数据键值处于从最小查询键值数据的数据键值与各个分库对应的最大键值数据的数据键值之间的二次返回业务数据;
根据各个分库的二次返回业务数据的数量,确定最小查询键值数据在各分库中的相对偏移量。
其中,对于确定各个分库获取到的业务数据中各个分库对应的最大键值数据这一步骤,因为各个分库获取到的业务数据根据数据查询键值进行排序,最大键值数据就是最大查询键值对应的数据。数据键值处于从最小查询键值数据的数据键值与各个分库对应的最大键值数据的数据键值之间的业务数据,这是在原本返回数据列表的基础上进一步扩大了范围,所以这些数据可能只包含原本获取到的数据,也可能添加新的数据,新数据根据数据查询键值大小顺序地插入原本获取的业务数据表中,并按对应顺序确定各自的分库偏移量,从而得到二次返回业务数据。相应的,根据各个分库的二次返回业务数据插入的数据量,可得到最小查询键值数据在各分库中的排序,从而计算得到最小查询键值数据对应在各分库中的相对偏移量。这个过程的具体描述可参见实施例二。
在可选的实施例中,确定上述最小查询键值数据在各分库中的相对偏移量,也可以包含以下步骤:
从各个分库中获取数据键值处于最小查询键值数据的数据键值与各分库对应的最小键值数据的数据键值之间的扩展返回业务数据;
将扩展返回业务数据插入各分库最小键值数据之前,形成二次返回业务数据;
根据各个分库的二次返回业务数据的数量,确定最小查询键值数据在各分库中的相对偏移量。
其中,由于根据所述分库查询条件从各分库获取到的满足所述分库查询条件的业务数据是按照数据查询键值排序的,因此,分库中的业务数据按照数据查询键值的增长依次排序,那么最小查询键值数据只与各分库的最小键值数据之间会包含新的业务数据,与其他键值数据之间则不会。所以可以只查询最小查询键值数据和各分库的最小键值数据之间的业务数据,再将其扩充进原本的满足分库查询条件的业务数据即可。根据各分库的二次返回业务数据的数据量,可得到最小查询键值数据在每个分库中的排序,从而计算得到最小查询键值数据对应在各分库中的相对偏移量。
确定最小查询键值数据在各分库中的相对偏移量后,进而计算所述最小查询键值数据的全局偏移量。具体地,分库中数据的全局偏移量,需要从全局的角度考虑。前面已经获得最小查询键值数据在各个分库的偏移量,由于数据查询键值是唯一的,那么在各个分库中由于数据查询键值小于最小查询键值而排序位于最小查询键值数据之前的业务数据,在组合所有分库形成的全局视角中根据数据查询键值大小也位于最小查询键值数据之前,所以最小查询键值数据的全局偏移量为它在各分库相对偏移量之和。
获得最小查询键值数据的全局偏移量之后,进行步骤S103。
S103、根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量。
具体地,形成全局视角后,各个分库的业务数据都有其对应的全局偏移量,将从各分库获取到的二次返回业务数据按照数据查询键值从小到大进行排序,根据最小查询键值数据的全局偏移量结合排序结果确定从各分库获取到的二次返回业务数据中各个业务数据的全局偏移量。
在可选的实施例中,根据时间键值进行排序,从分库中获取的二次返回业务数据按照时间键值进行从小到大的整体排序,排在最前面的是最小时间键值对应的业务数据,其次是时间键值仅大于最小查询键值的业务数据,以此类推,排在最后的是最大时间键值对应的业务数据。已经确定了最小查询键值数据对应的全局偏移量,比它大的键值数据的全局偏移量在其基础上按照排序依次加一即可获得。
得到二次返回业务数据中各个业务数据的全局偏移量后,执行步骤S104。
S104、根据所述各个数据的全局偏移量,输出满足所述数据查询请求的业务数据。
具体地,因为得到的二次返回业务数据是根据分库查询条件获取的返回业务数据基础上再次扩充的结果,考虑到分库查询条件已经考虑了满足初始查询条件这一前提,所以二次返回业务数据中理应已经包括了所有满足数据查询请求需要的数据。因此从已经得到对应全局偏移量的二次返回业务数据中提取与数据查询请求中的全局偏移量对应的数据记录即可。
可以看出,在本实施例方案中,根据针对数据库的查询请求条件,推断分库查询条件;根据分库查询条件,获得满足查询条件的业务数据;获取所有分库中综合对比后的一个最小查询键值数据,并确定该最小查询键值数据的相对偏移量;确定该最小查询键值数据在各分库的相对偏移量,并由此计算获得该最小查询键值的全局偏移量;计算各分库获取到的各个业务数据的全局偏移量,输出满足数据查询请求条件的业务数据。在这个过程中,由于通过分库的方法将数据库的计算体量缩小;又通过数据查询请求,确定分库查询条件,这个过程中,只需要查询分库中满足分库查询条件的少量业务数据;而通过非业务主键作为数据查询键值进行排序后,可方便计算各分库获取到的各个业务数据的全局偏移量,进而获得满足数据查询请求的业务数据。整个过程大大减少了排序索引数据的数量,降低了内存消耗,又快又精确地获取了满足数据查询请求需要的数据。
参见图2,是本发明实施例提供的一种确定最小查询键值数据在各分库中的相对偏移量的示意流程图,如图所示该方法可包括:
S201、确定所述各分库获取到的业务数据中各个分库对应的最大键值数据。
具体地,各个分库的业务数据将非业务主键作为数据查询键值并进行排序,数据查询键值可以是时间,其格式可以是yyyydd,如20100801,表示2010年8月1日,也可以是时间戳的形式,如1255574329,表示2009年10月15日;非业务主键也可以是逻辑主键1,2,3,……,或者字母a,b,c……这些有着明显先后顺序的字段都可以作为数据查询键值。各分库对应的最大键值数据,就是最大数据查询键值对应的数据。
S202、从各个分库中获取数据键值处于从所述最小查询键值数据的数据键值与所述各个分库对应的最大键值数据的数据键值之间的二次返回业务数据。
具体地,原本每个分库获取到的业务数据是各自的最小键值数据的数据键值与最大键值数据的数据键值之间的数据,比较各分库的最小键值数据的数据键值后,得出一个最小查询键值数据,然后查询最小查询键值数据的数据键值与各分库最大键值数据的数据键值之间的数据,因为最小查询键值数据的数据键值小于或等于各分库的最小键值数据的数据键值,所以该次查询的范围是在原有获取的业务数据的基础上扩大了。因此,有可能会有新的业务数据进入返回结果,获得二次返回业务数据。
在可选的实施例中,假设最小查询键值数据的数据键值是1232,原属于B库;A库的最小键值数据的数据键值是1234,而查询最小查询键值数据的数据键值1232与A库中的最大键值数据的数据键值之间的所有数据,除了返回A库已经获取的业务数据外,可能新增的业务数据的数据键值就在A库最小键值数据的数据键值1234与最小查询键值数据的数据键值1232之间,查询到如果两者之间有一个业务数据的数据键值为1233,那么A库的二次返回业务数据对应的数据键值为:1232,1233,1234再加上A中原本满足查询条件的返回业务数据的数据键值。
S203、根据各个分库的二次返回业务数据的数量,确定所述最小查询键值数据在各分库中的相对偏移量。
具体地,根据各个分库的二次返回业务数据的数量,可以对二次返回业务数据根据数据查询键值再次排序,已知各分库的最小键值数据相对偏移量情况下,根据插入业务数据的数量,可以推断最小查询键值在各分库中的相对偏移量。
在可选的实施例中,假设最小查询键值数据的数据键值是1232,原属于B库,且在B库中的相对偏移量是55;A库的最小键值数据的数据键值是1234,其相对偏移量是55,而查询最小查询键值数据的数据键值1232与A库中的最大键值数据的数据键值之间的所有数据,除了返回A库已经获取的业务数据外,可能新增的键值数据的数据键值就在A库最小键值数据的数据键值1234与最小查询键值数据的数据键值1232之间,如果两者之间有一个键值数据的数据键值为1233,那么三者在A库中的相对偏移量都可获取,分别为:数据键值1234的键值数据的相对偏移量为55;数据键值1233的键值数据的相对偏移量为54;数据键值1232的键值数据的相对偏移量为53。即根据二次返回业务数据的数量,可以推断最小查询键值数据在各分库中的相对偏移量。
可以看出,在本实施例的方案中,用查询各分库最大键值数据的数据键值与最小查询键值数据的数据键值之间的数据的方法,获得二次返回业务数据,并根据分库的二次返回业务数据数量,确定最小查询键值数据在各分库中的相对偏移量。这种方法可以有效获取某一个确定的键值数据在各分库的相对偏移量,且可以确定处于它之后的一定范围内的键值数据对应的相对偏移量,缩小了查询范围,减小了内存消耗。
参见图3,是本发明实施例提供一种具体的数据查询过程的示意流程图,如图所示该过程可包括:
S301、获取针对数据库的数据查询请求。
在可选的实施例中,假设已经存在数据库T,且其包含业务主键(id)和时间键(time),向数据库T发起一个分页查询请求,每页数据为5条,根据time键值对数据库进行排序建立索引,那么查询第201页的5条数据的SQL语句为:
select*from T order by time offset 1000limit 5。
S302、根据数据查询请求确定分库查询条件,根据所述分库查询条件从各分库获取满足所述分库查询条件的业务数据。
具体地,根据数据查询请求确定分库查询条件,根据分库查询条件从各分库获取满足所述分库查询条件的业务数据,其中分库查询条件包括数据查询键值、分库起始偏移量以及分库数据查询数量。
在可选的实施例中,由于数据库T的数据量很大,对其进行分库处理,根据业务主键id取模对其进行水平切分,得到相应分库T1,T2,T3。由于直接从T中查询第201页的5条数据需要较大的计算量,对三个分库进行分别查询可以减少计算量,假设这些分库已经达到了平均分配数据的要求。则跨库分页的算法第一步可改写为:
select*from Torder by time offset 333limit 5.
其中偏移量333是根据全局总偏移量1000除以分库个数3得到的。返回数据条数是根据初始返回数据获得,因为三个分库返回的数据中必须包含需要查询的返回条数,所以三个分库的返回值之和不能少于5。在这里,将每个分库的起始偏移量都设置为5,这样可以保证获取到的数据中包含了所有的需要查询的数据。
假设三个分库返回的数据(time,uid)如下:
表1
可以看到,每个分库都是返回的按照time排序的一页数据。默认按照升序asc进行排序。获得满足查询条件的业务数据后,进行步骤S303。
S303、确定所述各分库获取到的业务数据中对应各个分库的最小键值数据,对比之后确定一个唯一的最小查询键值数据。
在可选的实施例中,获取到满足查询条件的业务数据后,找到这3页数据各自的最小值。由于这些数据都是按照time键值升序排列,所以很容易就能找到它们各自的最小键值数据。由表1可得:
T1中,5条数据的time最小值是1487501123;
T2中,5条数据的time最小值是1487501133;
T3中,5条数据的time最小值是1487501143。
对比这三个分库中的time最小值,可以看出最小的是T1中的time值,所以,可以确定最小查询键值time_min=1487501123,最小查询键值对应的数据即为最小查询键值数据。在这个过程中,只需要比较各个分库的第一条数据,时间复杂度低。
获得最小查询键值数据后,执行步骤S304。
S304、确定所述各分库获取到的业务数据中各个分库对应的最大键值数据。
在可选的实施例中,获得的分库中的3页数据是按照time键值升序排列的,所以,可以容易得出每一页的最大键值数据。由表1可得:
T1的最大time为:1487501523;
T2的最大time为:1487501323;
T3的最大time为:1487501553,
各分库最大数据键值对应的键值数据即为各分库最大键值数据。
S305、从各个分库中获取数据键值处于从所述最小查询键值数据的数据键值与所述各个分库对应的最大键值数据的数据键值之间的二次返回业务数据。
在可选的实施例中,获取最小查询键值数据的数据键值与各个分库对应最大键值数据的数据键值之间的二次返回业务数据,需要改写一个between语句,between的起点是time_min,终点是原来每个分库各自返回数据的最大值,如下:
T1:select*from T order by time where time between time_min and1487501523;
T2:select*from T order by time where time between time_min and1487501323;
T3:select*from T order by time where time between time_min and1487501553.
可以知道,相对于第一次查询,第二次查询的条件放宽了,故第二次查询会返回比第一次查询结果集更多的数据,如表2所示:
表2
其中,由于time_min来自分库一,所以分库一的返回结果集合第一次查询的结果相同;分库二的结果集,比第一次多返回了一条数据,即头部的1条time最小的记录1487501132;分库三的结果集,比第一次多返回了2条数据,头部time最小的2条记录1487501141和1487501141。
S306、根据各个分库的二次返回业务数据的数量,确定所述最小查询键值数据在各分库中的相对偏移量。
表3
在可选的实施例中,由表3可以知道,在T1中,time_min的offset相对偏移量为333;在T2中,(1487501133,uid_aa)的offset是333(根据第一次查询条件得出的),故time_min对应的键值数据在第二个库的offset是331;在T3中,(1487501143,uid_aaa)的offset是333(根据第一次查询条件得出的),故time_min对应的键值数据在第三个库的offset是330。
S307、对最小查询键值数据在各分库中的相对偏移量进行求和,得到所述最小查询键值数据的全局偏移量。
在可选的实施例中,可以知道最小查询键值数据的键值是唯一的,那么在各个分库中time键值位于它之前的数据,在整个数据库中根据time键值排序也位于它之前,所以它的全局偏移量为它在各个分库相对偏移量之和。
因此,time_min对应的键值数据在全局的offset是333+331+330=994。
S308、将所述二次返回业务数据按照键值从小到大进行排序,根据所述最小查询键值数据的全局偏移量以及所述排序结果确定所述从所述各分库获取到的二次返回业务数据中各个业务数据的全局偏移量。
表4
在可选的实施例中,因为已经得到了time_min对应的键值数据的全局偏移量,就有了全局视野,将二次返回的业务数据全部按照数据查询键值从小到大进行整体排序,如表4所示,根据排序结果就可以确定所有二次返回数据的全局偏移量。
S309、根据所述各个数据的全局偏移量,输出满足所述数据查询请求的业务数据。
在可选的实施例中,从中摘取全局offset 1000limit 5这几条数据,对应表4中的几条数据为:
1000:(1487501143,uid_bb);
1001:(1487501223,uid_b);
1002:(1487501223,uid_cc);
1003:(1487501223,uid_bbb);
1004:(1487501233,uid_dd),
即为本次查询所需要的数据。
可以看出,在本实施例的方案中,给出了一个具体的跨库分页查询的过程。根据分库查询条件获取对应的满足分库查询条件的业务数据,这些业务数据根据时间键值进行升序排序;然后从中获取最小时间键值数据,查询得出最小时间键值数据与各分库最大时间键值数据之间的二次返回业务数据,得出最小时间键值数据在各分库中的相对偏移量;根据最小时间键值数据在各分库的相对偏移量,得出它的全局偏移量;根据最小时间键值数据的全局偏移量结合各分库二次返回业务数据的排序,计算得出二次返回业务数据的全局偏移量;最后,输出满足数据查询请求的业务数据。在这个过程中,由于将数据库分成了三个分库,并从每个分库中返回5条数据,然后在这3页数据中进行比较、计算并获取其偏移量,这大大降低了时间复杂度,减少了内存消耗,提高了查询性能。
本发明实施例还提供一种服务器,该服务器用于执行前述任一项所述的方法的单元。具体地,参见图4,是本实施例提供的一种服务器的示意框图。本实施例的服务器包括查询请求处理单元401,最小查询键值数据处理单元402,业务数据全局偏移量获取单元403,业务数据输出单元404。
查询请求处理单元401,用于获取针对数据库的数据查询请求,根据所述数据查询请求确定分库查询条件,并从各分库获取满足所述分库查询条件的业务数据;
最小查询键值数据处理单元402,用于从各分库获取到的业务数据中确定一个最小查询键值数据,确定所述最小查询键值数据在各分库中的相对偏移量,进而计算所述最小查询键值数据的全局偏移量;
业务数据全局偏移量获取单元403,用于根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量;
业务数据输出单元404,用于根据所述各个数据的全局偏移量,输出满足所述数据查询请求的业务数据。
可选地,所述查询请求处理单元401根据数据查询请求确定分库查询条件,还用于:
根据所述起始全局偏移量以及分库的数量确定针对各分库的分库起始偏移量。
可选地,所述最小查询键值数据处理单元402从各分库获取到的业务数据中确定一个最小查询键值数据,还用于:
确定所述各分库获取到的业务数据中对应各个分库的最小键值数据;
对比各个分库对应的最小键值数据,确定一个从各分库获取到的业务数据中的最小查询键值数据;
确定所述各分库获取到的业务数据中各个分库对应的最大键值数据;
从各个分库中获取数据键值处于从所述最小查询键值数据的数据键值与所述各个分库对应的最大键值数据的数据键值之间的二次返回业务数据;
根据各个分库的二次返回业务数据的数量,确定所述最小查询键值数据在各分库中的相对偏移量。
可选地,所述业务数据全局偏移量获取单元403还用于:
将从所述各分库获取到的二次返回业务数据按照键值从小到大进行排序,根据所述最小查询键值数据的全局偏移量以及所述排序结果确定所述从所述各分库获取到的二次返回业务数据中各个业务数据的全局偏移量。
可以看出,本发明实施例所描述的数据查询服务器,通过查询请求处理单元401查询各分库中与初始查询条件对应的查询条件数据,得到第一次返回数据集并获取业务数据,通过最小查询键值数据处理单元402获取时间键值最小的数据,得出它的在各分库中的相对偏移量,进而得出它的全局偏移量;业务数据全局偏移量获取单元403根据各分库业务数据的排序,以及它们在分库中的相对偏移量,计算它们的全局偏移量;最后,业务数据输出单元404输出满足初始查询的偏移量和查询数据量对应的业务数据。在这个过程中大大降低了时间复杂度,减少了内存消耗,提高了查询性能。
参见图5,是本发明另一实施例提供的一种服务器示意框图。如图所示的本实施例中的终端可以包括:一个或多个处理器501、存储器502和一个或多个通信接口503。上述处理器501、存储器502和通信接口503通过总线504连接。存储器502用于存储计算机程序,所述计算机程序包括程序指令,处理器501用于执行存储器502存储的程序指令。其中,处理器501被配置用于调用所述程序指令执行:
获取针对数据库的数据查询请求,所述数据库包括根据业务主键切分得到的多个数据分库,根据所述数据查询请求确定分库查询条件,并从各分库获取满足所述分库查询条件的业务数据,所述分库查询条件包括数据查询键值,所述数据查询键值为所述数据库的非业务主键。
从各分库获取到的业务数据中确定一个最小查询键值数据,确定所述最小查询键值数据在各分库中的相对偏移量,进而计算所述最小查询键值数据的全局偏移量;
根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量;
根据所述各个数据的全局偏移量,输出满足所述数据查询请求的业务数据。
在可选的实施例中,所述指令由处理器501加载后执行根据数据查询请求确定分库查询条件包括:
根据所述起始全局偏移量以及分库的数量确定针对各分库的分库起始偏移量。
在可选的实施例中,所述指令由处理器501加载后执行从各分库获取到的业务数据中确定一个最小查询键值数据包括:
确定所述各分库获取到的业务数据中对应各个分库的最小键值数据;
对比各个分库对应的最小键值数据,确定一个从各分库获取到的业务数据中的最小查询键值数据。
在可选的实施例中,所述指令由处理器501加载后执行确定所述最小查询键值数据在各分库中的相对偏移量包括:
确定所述各分库获取到的业务数据中各个分库对应的最大键值数据;
从各个分库中获取数据键值处于从所述最小查询键值数据的数据键值与所述各个分库对应的最大键值数据的数据键值之间的二次返回业务数据;
根据各个分库的二次返回业务数据的数量,确定所述最小查询键值数据在各分库中的相对偏移量。
在可选的实施例中,所述指令由处理器501加载后执行根据所述最小查询键值数据在各分库中的相对偏移量,确定所述最小查询键值数据的全局偏移量包括:
所述最小查询键值数据的全局偏移量为所述最小查询键值数据最小键值数据在各个分库的相对偏移量之和。
在可选的实施例中,所述指令由处理器501加载后执行根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量包括:
将从所述各分库获取到的二次返回业务数据按照键值从小到大进行排序,根据所述最小查询键值数据的全局偏移量以及所述排序结果确定所述从所述各分库获取到的二次返回业务数据中各个业务数据的全局偏移量。
应当理解,在本发明实施例中,所称处理器501可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器502可以包括只读存储器和随机存取存储器,并向处理器501提供指令和数据。存储器502的一部分还可以包括非易失性随机存取存储器。例如,存储器502还可以存储设备类型的信息。
具体实现中,本发明实施例中所描述的处理器501可执行本发明实施例提供的数据查询方法的第一实施例、第二实施例和第三实施例中所描述的实现方式,也可执行本发明实施例所描述的服务器的实现方式,在此不再赘述。
在本发明的另一实施例中提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时实现图1~3中的数据查询方法。
所述计算机可读存储介质可以是前述任一实施例所述的终端的内部存储单元,例如终端的硬盘或内存。所述计算机可读存储介质也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述计算机可读存储介质还可以既包括所述终端的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的服务器和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的服务器和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种数据查询方法,其特征在于,包括:
获取针对数据库的数据查询请求,所述数据库包括根据业务主键切分得到的多个数据分库,根据所述数据查询请求确定分库查询条件,并从各分库获取满足所述分库查询条件的业务数据,所述分库查询条件包括数据查询键值,所述数据查询键值为所述数据库的非业务主键。
从各分库获取到的业务数据中确定一个最小查询键值数据,确定所述最小查询键值数据在各分库中的相对偏移量,进而计算所述最小查询键值数据的全局偏移量;
根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量;
根据所述各个数据的全局偏移量,输出满足所述数据查询请求的业务数据。
2.如权利要求1所述的方法,其特征在于,所述数据查询请求包括所述数据查询键值、起始全局偏移量以及数据查询数量;
所述分库查询条件包括所述数据查询键值、根据所述起始全局偏移量以及数据查询数量确定得到的分库起始偏移量以及分库数据查询数量。
3.如权利要求2所述的方法,其特征在于,所述根据数据查询请求确定分库查询条件包括:
根据所述起始全局偏移量以及分库的数量确定针对各分库的分库起始偏移量。
4.如权利要求1所述的方法,其特征在于,所述从各分库获取到的业务数据中确定一个最小查询键值数据包括:
确定所述各分库获取到的业务数据中对应各个分库的最小键值数据;
对比各个分库对应的最小键值数据,确定一个从各分库获取到的业务数据中的最小查询键值数据。
5.如权利要求1所述的方法,其特征在于,所述确定所述最小查询键值数据在各分库中的相对偏移量包括:
确定所述各分库获取到的业务数据中各个分库对应的最大键值数据;
从各个分库中获取数据键值处于从所述最小查询键值数据的数据键值与所述各个分库对应的最大键值数据的数据键值之间的二次返回业务数据;
根据各个分库的二次返回业务数据的数量,确定所述最小查询键值数据在各分库中的相对偏移量。
6.如权利要求5所述的方法,其特征在于,所述计算所述最小查询键值数据的全局偏移量包括:
所述最小查询键值数据的全局偏移量为所述最小查询键值数据在各个分库的相对偏移量之和。
7.如权利要求1-6中的任一项所述的方法,其特征在于,所述根据所述最小查询键值数据的全局偏移量,计算从各分库获取到的各个业务数据的全局偏移量包括:
将从所述各分库获取到的二次返回业务数据按照键值从小到大进行排序,根据所述最小查询键值数据的全局偏移量以及所述排序结果确定所述从所述各分库获取到的二次返回业务数据中各个业务数据的全局偏移量。
8.一种服务器,其特征在于,包括用于执行如权利要求1-7任一权利要求所述的方法的单元。
9.一种服务器,其特征在于,包括处理器、通信接口和存储器,所述处理器、通信接口和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711019826.2A CN107918642A (zh) | 2017-10-26 | 2017-10-26 | 数据查询方法、服务器及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711019826.2A CN107918642A (zh) | 2017-10-26 | 2017-10-26 | 数据查询方法、服务器及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107918642A true CN107918642A (zh) | 2018-04-17 |
Family
ID=61895795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711019826.2A Withdrawn CN107918642A (zh) | 2017-10-26 | 2017-10-26 | 数据查询方法、服务器及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107918642A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109164977A (zh) * | 2018-07-23 | 2019-01-08 | 中国建设银行股份有限公司 | 一种数据存储系统和方法、存储介质 |
CN111061759A (zh) * | 2018-10-17 | 2020-04-24 | 联易软件有限公司 | 数据查询方法及装置 |
CN111460240A (zh) * | 2020-04-13 | 2020-07-28 | 吉林亿联银行股份有限公司 | 一种跨地域多活微服务架构下翻页数据查询方法及装置 |
CN111752986A (zh) * | 2019-03-27 | 2020-10-09 | 杭州海康威视数字技术股份有限公司 | 数据查询方法及装置、设备、存储介质 |
CN112347077A (zh) * | 2020-11-06 | 2021-02-09 | 北京神州数字科技有限公司 | 一种数据查询方法 |
CN113127568A (zh) * | 2021-05-11 | 2021-07-16 | 中国电信股份有限公司江西分公司 | 一种分布式内存数据库数据路由和分库分表的方法及装置 |
CN114398378A (zh) * | 2022-03-25 | 2022-04-26 | 北京奥星贝斯科技有限公司 | 确定索引代价的方法和装置 |
CN114996552A (zh) * | 2022-05-09 | 2022-09-02 | 福建天泉教育科技有限公司 | 一种数据获取方法及终端 |
CN115062045A (zh) * | 2022-06-20 | 2022-09-16 | 北京中睿天下信息技术有限公司 | 一种基于golang解决分库分表下检索排序和分页问题的优化方法 |
WO2023103338A1 (zh) * | 2021-12-06 | 2023-06-15 | 深圳前海微众银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
-
2017
- 2017-10-26 CN CN201711019826.2A patent/CN107918642A/zh not_active Withdrawn
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109164977A (zh) * | 2018-07-23 | 2019-01-08 | 中国建设银行股份有限公司 | 一种数据存储系统和方法、存储介质 |
CN111061759A (zh) * | 2018-10-17 | 2020-04-24 | 联易软件有限公司 | 数据查询方法及装置 |
CN111752986A (zh) * | 2019-03-27 | 2020-10-09 | 杭州海康威视数字技术股份有限公司 | 数据查询方法及装置、设备、存储介质 |
CN111460240A (zh) * | 2020-04-13 | 2020-07-28 | 吉林亿联银行股份有限公司 | 一种跨地域多活微服务架构下翻页数据查询方法及装置 |
CN111460240B (zh) * | 2020-04-13 | 2023-08-15 | 吉林亿联银行股份有限公司 | 一种跨地域多活微服务架构下翻页数据查询方法及装置 |
CN112347077A (zh) * | 2020-11-06 | 2021-02-09 | 北京神州数字科技有限公司 | 一种数据查询方法 |
CN113127568A (zh) * | 2021-05-11 | 2021-07-16 | 中国电信股份有限公司江西分公司 | 一种分布式内存数据库数据路由和分库分表的方法及装置 |
WO2023103338A1 (zh) * | 2021-12-06 | 2023-06-15 | 深圳前海微众银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN114398378A (zh) * | 2022-03-25 | 2022-04-26 | 北京奥星贝斯科技有限公司 | 确定索引代价的方法和装置 |
CN114996552A (zh) * | 2022-05-09 | 2022-09-02 | 福建天泉教育科技有限公司 | 一种数据获取方法及终端 |
CN115062045A (zh) * | 2022-06-20 | 2022-09-16 | 北京中睿天下信息技术有限公司 | 一种基于golang解决分库分表下检索排序和分页问题的优化方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107918642A (zh) | 数据查询方法、服务器及计算机可读存储介质 | |
CN110321344B (zh) | 关联数据的信息查询方法、装置、计算机设备及存储介质 | |
CN103577440B (zh) | 一种非关系型数据库中的数据处理方法和装置 | |
CN104281701B (zh) | 分布式多尺度空间数据查询方法及系统 | |
CN104246765A (zh) | 图像检索装置、图像检索方法、程序以及计算机可读取的存储介质 | |
US10068033B2 (en) | Graph data query method and apparatus | |
CN106325756B (zh) | 一种数据存储、数据计算方法和设备 | |
CN107818115A (zh) | 一种处理数据表的方法及装置 | |
JP2008059438A (ja) | 記憶システム、そのデータ再配置方法、データ再配置プログラム | |
CN107967135A (zh) | 计算引擎实现方法、电子装置及存储介质 | |
CN104112011B (zh) | 一种海量数据提取的方法及装置 | |
CN106326475A (zh) | 一种高效的静态哈希表实现方法及系统 | |
CN102737123B (zh) | 一种多维数据分布方法 | |
CN109086133A (zh) | 管理内存数据及在内存中维护数据的方法和系统 | |
CN109062936A (zh) | 一种数据查询方法、计算机可读存储介质及终端设备 | |
CN104636349A (zh) | 一种索引数据压缩以及索引数据搜索的方法和设备 | |
CN110969000B (zh) | 数据合并的处理方法及装置 | |
CN103577455A (zh) | 用于数据库聚集操作的数据处理方法和系统 | |
CN109344302A (zh) | 一种组织架构信息的展示方法、存储介质和服务器 | |
CN105359142A (zh) | 哈希连接方法、装置和数据库管理系统 | |
CN108009250A (zh) | 一种多分类赛事数据缓存建立、查询方法及装置 | |
CN110020272A (zh) | 缓存方法、装置以及计算机存储介质 | |
CN106126681A (zh) | 一种增量式流式数据聚类方法及系统 | |
CN106484818A (zh) | 一种基于Hadoop和HBase的层次聚类方法 | |
CN110709824B (zh) | 一种数据查询方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20180417 |