1.本技术涉及数据处理技术领域,尤其涉及一种榜单数据查询方法、装置、电子设备和存储介质。
背景技术:2.随着移动互联网应用技术的发展,产生了各种不同的业务场景,这些业务场景无时无刻不在产生与之对应的信息流,这些信息流又通过积累聚合产生新的信息价值:排行榜。
3.榜单作为互联网平台一个重要信息来源,在大量应用场景中得到广泛应用,如好友卡片榜单、游戏等级榜单、新闻热点榜单、话题榜单等。
4.相关技术,榜单排序一般采用跳表索引数据结构,跳表索引数据结构往往具有多层索引,在查询待查询的数据时,往往需要逐层索引,以确定跳表索引数据结构中的待查询的数据。示例性的以图1所示的两级索引进行说明。假设根据跳表来进行分页查询第6-8号数据,则需要通过l2层索引找到节点5,发现l2层节点5的下一个节点大于6,向下再查询l1层节点5,但是l1索引的下个节点依旧大于6,继续向下落到zset上继续查询,再经过5-》6-》7-》8的遍历,返回6-8号的分页数据。而在数据量较大时,索引的层级会更多。因此,采用跳表索引数据结构进行分页查询时,不能非常快速地定位到分页起始的节点,使查询时间复杂度较高。
技术实现要素:5.本技术提供了一种榜单数据查询方法、装置、电子设备和存储介质,用以解决现有技术中,采用跳表索引数据结构进行分页查询时,不能非常快速地定位到分页起始的节点,使查询时间复杂度较高的问题。
6.第一方面,本技术实施例提供了一种榜单数据查询方法,包括:
7.获取查询参数,所述查询参数指示待查询数据在榜单中的位置;
8.从预先构建的存储结构中,确定所述查询参数对应的目标哈希桶,所述存储结构中包括至少一个哈希桶,每个所述哈希桶中存储的索引键值对的数量不超过预设数量;
9.从所述目标哈希桶中确定所述查询参数对应的目标索引键值对;
10.基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据。
11.可选的,构建存储结构的过程,包括:
12.获取所述榜单中榜单数据的第一数量和每条所述榜单数据的第一序列号;
13.根据所述第一数量确定所述哈希桶的第二数量;
14.对每个所述哈希桶配置第二序列号;
15.对每条所述榜单数据的所述第一序列号进行预设哈希运算,得到哈希结果;
16.将所述第一序列号对应的索引键值对,存储至第一哈希桶,所述第一哈希桶的第二序列号与所述第一序列号的所述哈希结果一致。
17.可选的,所述根据所述第一数量确定所述哈希桶的第二数量,包括:
18.将所述第一数量与预设的哈希桶占比相乘,得到所述第二数量。
19.可选的,确定所述查询参数对应的目标哈希桶,包括:
20.对所述查询参数进行预设哈希运算,得到哈希结果;
21.确定所述哈希桶的第二序列号与所述哈希结果一致的哈希桶为所述目标哈希桶。
22.可选的,索引键值对包括所述榜单数据的第一序列号;
23.所述从所述目标哈希桶中确定所述查询参数对应的目标索引键值对,包括:
24.遍历所述目标哈希桶中的索引键值对;
25.确定所述第一序列号与所述查询参数一致的索引键值对为所述目标索引键值对。
26.可选的,所述获取查询参数,包括:
27.获取分页参数和页码参数;
28.根据所述分页参数和页码参数,确定查询范围;
29.确定所述查询范围内的参数为所述查询参数。
30.可选的,所述索引键值对包括榜单中的榜单数据的索引;
31.所述基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据,包括:
32.从预设的数据存储库中,确定所述榜单数据的索引对应的榜单数据为所述目标榜单数据。
33.第二方面,本技术实施例提供了一种榜单数据查询装置,包括:
34.获取模块,用于获取查询参数,所述查询参数指示待查询数据在榜单中的位置;
35.第一确定模块,用于从预先构建的存储结构中,确定所述查询参数对应的目标哈希桶,所述存储结构中包括至少一个哈希桶,每个所述哈希桶中存储的索引键值对的数量不超过预设数量;
36.第二确定模块,用于从所述目标哈希桶中确定所述查询参数对应的目标索引键值对;
37.第三确定模块,用于基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据。
38.第三方面,本技术实施例提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;
39.所述存储器,用于存储计算机程序;
40.所述处理器,用于执行所述存储器中所存储的程序,实现第一方面所述的榜单数据查询方法。
41.第四方面,本技术实施例提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的榜单数据查询方法。
42.本技术实施例提供的上述技术方案与现有技术相比具有如下优点:本技术实施例提供的该方法,通过获取查询参数,所述查询参数指示待查询数据在榜单中的位置;从预先构建的存储结构中,确定所述查询参数对应的目标哈希桶,所述存储结构中包括至少一个哈希桶,每个所述哈希桶中存储的索引键值对的数量不超过预设数量;从所述目标哈希桶中确定所述查询参数对应的目标索引键值对;基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据。如此,在获取到查询参数后,通过从预先构建的存储结构中确定查
询参数对应的目标哈希桶,由于在每个哈希桶中索引键值对的数量有限,不超过预设数量,从而在确定目标哈希桶后,索引次数不超过预设数量便可从目标哈希桶中确定对应的目标索引键值对,从而能够在目标哈希桶中快速确定目标索引键值对,降低了查询时间的复杂度。
附图说明
43.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
44.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
45.图1为现有技术提供的一种两级索引查询方式的示意图;
46.图2为本技术一实施例提供的榜单数据查询方法的应用场景图;
47.图3为本技术一实施例提供的榜单数据查询方法的流程图;
48.图4为本技术另一实施例提供的榜单数据查询方法中存储结构示意图;
49.图5为本技术一实施例提供的榜单数据查询装置的结构图;
50.图6为本技术一实施例提供的电子设备的结构图。
具体实施方式
51.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
52.在对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
53.时间复杂度:用于描述某一算法的运行时间。通常,时间复杂度常用大o符号表述。
54.哈希碰撞:指不同的数据计算出的哈希值是一样的。
55.根据本技术一实施例提供了一种榜单数据查询方法。可选地,在本技术实施例中,上述榜单数据查询方法可以应用于如图2所示的由终端201和服务器202所构成的硬件环境中。如图2所示,服务器202通过网络与终端201进行连接,可用于为终端或终端上安装的客户端提供服务(如视频服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器202提供数据存储服务,上述网络包括但不限于:广域网、城域网或局域网,终端201并不限定于pc、手机、平板电脑等。
56.本技术实施例的榜单数据查询方法可以由服务器202来执行,也可以由终端201来执行,还可以是由服务器202和终端201共同执行。其中,终端201执行本技术实施例的榜单数据查询方法,也可以是由安装在其上的客户端来执行。
57.以终端执行本技术实施例的榜单数据查询方法为例,图3是根据本技术实施例的一种可选的榜单数据查询方法的流程示意图,如图3所示,该方法的流程可以包括以下步骤:
58.步骤301、获取查询参数,所述查询参数指示待查询数据在榜单中的位置。
59.一些实施例中,查询参数可以是用户在终端的显示界面中输入或选择的。其中,查询参数可以是待查询数据榜单中的具体位置。
60.例如,用户想要查询在榜单中的第11位的数据时,可以在显示界面中的相应位置输入11,以使终端获取到查询参数11。又例如,用户想要查询榜单中分页大小为5的第二页的数据时,用户可以在终端的显示界面选择分页大小和页码,从而确定查询参数。
61.进一步的,所述获取查询参数,包括:获取分页参数和页码参数;根据所述分页参数和页码参数,确定查询范围;确定所述查询范围内的参数为所述查询参数。
62.一些实施例中,在用户输入的查询入参为分页参数和页码参数时,由于其指示的为榜单中的某一范围,因此,在获取到分页参数和页码参数后,可以先通过分页参数和页码参数,确定查询范围,例如,分页大小为m,页码为k,则应该查询范围为[(k-1)*m,k*m),其中k≥1,m》0,其中,榜单中的排序从0开始。进而,确定查询范围[(k-1)*m,k*m)内的参数均为查询参数。
[0063]
示例性的,以分页参数为5,页码参数为2为例,则可确定出查询范围为5-9,进而,确定5、6、7、8和9为查询参数。
[0064]
步骤302、从预先构建的存储结构中,确定所述查询参数对应的目标哈希桶,所述存储结构中包括至少一个哈希桶,每个所述哈希桶中存储的索引键值对的数量不超过预设数量。
[0065]
一些实施例中,在获取到查询参数后,
[0066]
预先构建的存储结构中包括至少一个哈希桶,每个所述哈希桶中存储的索引键值对的数量不超过预设数量。其中,预设数量可以是在确定哈希桶数量后确定的。
[0067]
在一个可选实施例中,构建存储结构的过程,包括:
[0068]
获取所述榜单中榜单数据的第一数量和所述榜单数据的第一序列号;根据所述第一数量确定所述哈希桶的第二数量;对每个所述哈希桶配置第二序列号;对每条所述榜单数据的所述第一序列号进行预设哈希运算,得到哈希结果;将所述第一序列号对应的索引键值对,存储至第一哈希桶,所述第一哈希桶的第二序列号与所述第一序列号的所述哈希结果一致。
[0069]
一些实施例中,在构建存储结构时,对于榜单中榜单数据是一定的,通过获取榜单数据的总数量即第一数量,根据该第一数量按照预设的哈希桶占比,确定出哈希桶的第二数量,并为每个哈希桶配置第二序列号。进而,便可以确定每条榜单数据对应的哈希桶。
[0070]
具体的可以是,对每条榜单数据的第一序列号进行哈希运算,将得到的哈希结果,与第一哈希桶的第二序列号一致时,将该第一序列号对应的索引键值对存储至该第一哈希桶。
[0071]
示例性的,参见图4,以第一数量为30,预设的哈希桶占比为0.75,哈希运算为模运算为例,在获取到榜单数据的第一数据30后,便可以确定哈希桶的第二数量为30*0.75,即24个。由于模运算为求余运算,因此,在对第一序列号进行模运算之后,可能会存在不同的第一序列号的哈希结果相同的情况,例如,第一序列号为1和25时,二者的模运算的结果均为1。
[0072]
在为每个哈希桶配置第二序列号后,对每个榜单数据的第一序列号进行模运算,
进而可知,在第二序列号为1的哈希桶中,其存储的榜单数据的第一序列号包括1和25,在第二序列号为2的哈希桶中,其存储的榜单数据的第一序列号包括2和26,等等;进而将第一序列号对应的索引键值对存储至对应的哈希桶中。
[0073]
进一步的,确定所述查询参数对应的目标哈希桶,包括:
[0074]
对所述查询参数进行预设哈希运算,得到哈希结果;确定所述哈希桶的第二序列号与所述哈希结果一致的哈希桶为所述目标哈希桶。
[0075]
一些实施例中,由于存储结构在构建时,是根据榜单数据的第一序列号进行预设哈希运算后,将哈希结果对应的索引键值对存储到对应的哈希桶中的,因此,在获取到查询参数后,可以对查询参数进行预设哈希运算,将得到的哈希结果,与每个哈希桶的第二序列号进行比较,若二者一致,将该哈希桶作为目标哈希桶。
[0076]
示例性的,查询参数为5,对改成查询参数进行预设哈希运算后,得到的哈希结果为5,将其与哈希桶的第二序列号进行比较,从而确定第二序列号为5的哈希桶为目标哈希桶。
[0077]
需要说明的是,在查询参数为两个以上时,可以依次确定每个查询参数对应的目标哈希桶。例如,查询参数为5-8时,在确定查询参数为5时的目标哈希桶后,再确定查询参数为6的目标哈希桶,依次类推,直至所有的查询参数均确定各自对应的目标哈希桶。
[0078]
步骤303、从所述目标哈希桶中确定所述查询参数对应的目标索引键值对。
[0079]
一些实施例中,由于在每个哈希桶中存储的内容包括索引键值对,因此,在确定目标哈希桶后,便可以根据查询参数确定该目标哈希桶中的目标索引键值对。
[0080]
其中,索引键值对中包括榜单数据的第一系列号,因此,可以将查询参数与第一序列号进行比较,将与查询参数一致的索引键值对作为目标索引键值对。
[0081]
在一个可选实施例中,索引键值对包括所述榜单数据的第一序列号;所述从所述目标哈希桶中确定所述查询参数对应的目标索引键值对,包括:
[0082]
遍历所述目标哈希桶中的索引键值对;确定所述第一序列号与所述查询参数一致的索引键值对为所述目标索引键值对。
[0083]
一些实施例中,由于在存储结构的构建过程中,对不同榜单数据的第一序列号进行预设哈希运算的结果可能相同,因此,在每个哈希桶中的索引键值对可能不止是1个,因此,可以通过遍历目标哈希桶中的索引键值对,将每个索引键值对中的第一序列号与查询参数进行比较,若二者一致,则将第一序列号与所述查询参数一致的索引键值对为所述目标索引键值对。
[0084]
步骤304、基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据。
[0085]
一些实施例中,在目标索引键值对中存储有榜单数据或榜单数据的索引,因此,在确定目标索引键值对后,可以从目标索引键值对中获取目标榜单数据,或者按照榜单数据的索引获取到目标榜单数据。
[0086]
在一个可选实施例中,所述索引键值对包括榜单中的榜单数据的索引;所述基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据,包括:
[0087]
从预设的数据存储库中,确定所述榜单数据的索引对应的榜单数据为所述目标榜单数据。
[0088]
一些实施例中,在榜单数据的数据量较大时,若已将其存储在索引键值对中,可能
会造成数据量过大,增加在查询过程中的算力,因此,将榜单数据存储在预设的数据存储库中,将每个榜单数据在预设的数据存储库中的索引,作为索引键值对中的参量。
[0089]
进而,可以通过目标索引键值对中的榜单数据的索引,从预设的数据存储库中确定该榜单数据的索引对应的目标榜单数据。
[0090]
本技术的榜单数据查询方法,能够提升存在诸如榜单、大数据分页查询功能的页面查询接口响应性能,从而提升整体页面的响应速度,提升用户体验。
[0091]
在本技术的一个具体实施例中,本技术中采用hash数据结构(即上述的存储结构)代替现有技术中zset数据结构(即上述的跳表索引数据结构)存储数据的排序,将榜单数据总量第一数量设置为30,预设的哈希桶占比为0.75,哈希运算为模运算。从而确定哈希桶的第二数量为24个。
[0092]
参见图2,hash结构访问某一节点的时间复杂度为o(1)或o(2),则遍历返回m个分页数据,整体分页查询的时间复杂度为o(m),近似为o(1)。
[0093]
根据hash数据结构的性质,即使存在哈希碰撞的情况,遍历单个bucket链表的时间复杂度同样为o(1),因此,借助hash数据结构进行分页查询,查询时间复杂度为o(m),m为分页大小,远低于使用zset数据结构进行分页查询的o((log2n)+m)。
[0094]
本技术中查询操作可以基于redis的hmget命令,根据查询请求入参的分页大小(即上述的分页参数)及页码(即上述的页码参数)确定数据的起始和结束下标,使用hmget命令批量查询获得对应的数据。其中,若请求的分页大小为m,页码为k,则应该查询排序下标范围为[(k-1)*m,k*m),其中k》=1,m》0,其中,整体排序下标从0开始。
[0095]
针对榜单的分页查询无需返回数据总量,如需返回数据总量,可以通过size命令,对hash数据总量进行统计。
[0096]
本技术中,在redis进行分页查询的时候,使用hash数据结构代替相关技术中使用的zset数据结构,在不增加空间复杂度的前提下,达到优化分页查询时间复杂度的目的,将查询时间复杂度从o(log(n)+m)降低至o(m),n为数据总量,m为分页页码大小。
[0097]
基于同一构思,本技术实施例中提供了一种榜单数据查询装置,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图5所示,该装置主要包括:
[0098]
获取模块501,用于获取查询参数,所述查询参数指示待查询数据在榜单中的位置;
[0099]
第一确定模块502,用于从预先构建的存储结构中,确定所述查询参数对应的目标哈希桶,所述存储结构中包括至少一个哈希桶,每个所述哈希桶中存储的索引键值对的数量不超过预设数量;
[0100]
第二确定模块503,用于从所述目标哈希桶中确定所述查询参数对应的目标索引键值对;
[0101]
第三确定模块504,用于基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据。
[0102]
基于同一构思,本技术实施例中还提供了一种电子设备,如图6所示,该电子设备主要包括:处理器601、存储器602和通信总线603,其中,处理器601和存储器602通过通信总线603完成相互间的通信。其中,存储器602中存储有可被处理器601执行的程序,处理器601执行存储器602中存储的程序,实现如下步骤:
[0103]
获取查询参数,所述查询参数指示待查询数据在榜单中的位置;
[0104]
从预先构建的存储结构中,确定所述查询参数对应的目标哈希桶,所述存储结构中包括至少一个哈希桶,每个所述哈希桶中存储的索引键值对的数量不超过预设数量;
[0105]
从所述目标哈希桶中确定所述查询参数对应的目标索引键值对;
[0106]
基于所述目标索引键值对,确定所述查询参数对应的目标榜单数据。
[0107]
上述电子设备中提到的通信总线603可以时外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该通信总线603可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0108]
存储器602可以包括随机存取存储器(random access memory,简称ram),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器601的存储装置。
[0109]
上述的处理器601可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等,还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0110]
在本技术的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述实施例中所描述的榜单数据查询方法。
[0111]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本技术实施例所述的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、微波等)方式向另外一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如dvd)或者半导体介质(例如固态硬盘)等。
[0112]
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0113]
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。