CN113157689A - 数据索引方法、装置及电子设备 - Google Patents
数据索引方法、装置及电子设备 Download PDFInfo
- Publication number
- CN113157689A CN113157689A CN202010073516.4A CN202010073516A CN113157689A CN 113157689 A CN113157689 A CN 113157689A CN 202010073516 A CN202010073516 A CN 202010073516A CN 113157689 A CN113157689 A CN 113157689A
- Authority
- CN
- China
- Prior art keywords
- key
- data
- index
- value pair
- hash
- 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.)
- Pending
Links
Images
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (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
技术领域
本发明涉及数据处理技术,尤其涉及一种数据索引方法、装置、电子设备及存储介质。
背景技术
键值对(key-value)是一种数据存储的通用形式,键与值之间存在对应关系,在将键值对数据进行存储后,可通过键查询对应的值。索引是对存储的键值对数据进行排序的一种结构,其主要用途在于定位键值对数据,从而提升查询的响应效率。
在相关技术提供的方案中,通常是通过结构化合并树(LSM,Log StructuredMerge tree)架构中的排序字符串表(SSTable,Sorted String Table)方式,来存储键值对数据,并建立键值对数据的索引。但是,该种方式是对数据块进行索引,当键值对数据中的值容量较大时,块的数量较多,块索引所占的内存空间也较大。
发明内容
本发明实施例提供一种数据索引方法、装置、电子设备及存储介质,能够降低键值对数据的索引所占的内存空间。
本发明实施例的技术方案是这样实现的:
本发明实施例提供一种数据索引方法,包括:
对键值对数据中的键进行哈希处理,得到键哈希;
确定所述键值对数据在存储空间中的数据地址;
根据所述键哈希及所述数据地址,建立所述键值对数据对应的键索引;
其中,所述键索引用于响应对所述键值对数据的查询请求。
本发明实施例提供一种数据索引方法,包括:
接收包括目标键的查询请求;
对所述目标键进行哈希处理,得到目标键哈希;
查找键哈希与所述目标键哈希匹配的键索引,并
根据所述查找出的键索引中的数据地址,确定对应的键值对数据,以响应所述查询请求。
本发明实施例提供一种数据索引装置,包括:
第一哈希处理模块,用于对键值对数据中的键进行哈希处理,得到键哈希;
地址确定模块,用于确定所述键值对数据在存储空间中的数据地址;
建立模块,用于根据所述键哈希及所述数据地址,建立所述键值对数据对应的键索引;
其中,所述键索引用于响应对所述键值对数据的查询请求。
本发明实施例提供一种数据索引装置,包括:
接收模块,用于接收包括目标键的查询请求;
第二哈希处理模块,用于对所述目标键进行哈希处理,得到目标键哈希;
查找模块,用于查找键哈希与所述目标键哈希匹配的键索引,并
根据所述查找出的键索引中的数据地址,确定对应的键值对数据,以响应所述查询请求。
本发明实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本发明实施例提供的数据索引方法。
本发明实施例提供一种存储介质,存储有可执行指令,用于引起处理器执行时,实现本发明实施例提供的数据索引方法。
本发明实施例具有以下有益效果:
本发明实施例通过对键值对数据中的键进行哈希处理,得到键哈希,同时确定键值对数据在存储空间中的数据地址,根据键哈希和键值对数据的数据地址建立键索引,由于键哈希的体积较小,故大大降低了索引所占的内存空间。
附图说明
图1是本发明实施例提供的数据索引系统的一个可选的架构示意图;
图2A是本发明实施例提供的电子设备的一个可选的架构示意图;
图2B是本发明实施例提供的电子设备的一个可选的架构示意图;
图3是本发明实施例提供的数据索引装置的一个可选的架构示意图;
图4A是本发明实施例提供的数据索引方法的一个可选的流程示意图;
图4B是本发明实施例提供的数据索引方法的一个可选的流程示意图;
图5A是本发明实施例提供的数据索引方法的一个可选的流程示意图;
图5B是本发明实施例提供的数据索引方法的一个可选的流程示意图;
图5C是本发明实施例提供的数据索引方法的一个可选的流程示意图;
图6是本发明实施例提供的一个可选的索引示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本发明实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
1)键值对(key-value)数据:一种数据存储的常用形式,键与值之间存在对应关系,在查找时通过键得到对应的值。
2)哈希(Hash)处理:将任意长度的输入通过散列算法变换成固定长度的输出,该输出即为哈希值。
3)哈希碰撞:指不同的两个输入经散列算法后变换成相同的哈希值的情况。
4)数据地址:数据地址可以是数据的实际存储地址,可以是数据的地址偏移量(offset),也可以是其他形式的地址。其中,地址偏移量是数据的实际存储地址与基地址之间的距离,基地址是为了降低地址偏移量的范围,以便用更短的数据编码地址长度来表示偏移量。
5)索引:对数据进行排序的一种结构,索引的主要目的是加快对于数据的检索效率,即尽快地查找到符合限制条件的数据。
6)字节对齐:内存空间按照字节划分,字节对齐是指将数据按照一定的规则在空间上排列,而不是顺序一个接一个地存放。字节对齐所依赖的排列规则可体现为对齐单位,例如,数据地址编码长度为2字节,则其编码范围为64千字节(kb),如果待进行字节对齐的数据共有256kb,则可得到对齐单位为256/64=4字节。
7)结构化合并树(LSM,Log Structured Merge tree)架构:一种主流的数据组织的方式,通过将磁盘的随机写转化为顺序写,从而提高写性能,LSM架构被应用于多种数据库。
8)排序字符串表(SSTable,Sorted String Table):LSM架构下的一种数据索引方式,SSTable由一系列的数据块组成,并通过建立块索引来定位数据块。
在相关技术中,对于键值对数据,通常是采用LSM架构下的SSTable来建立索引,但是,该种方式是对数据块进行索引,访问数据时需要从磁盘加载整个数据块,导致磁盘的输入/输出(I/O)效率较低,尤其是在应用固态驱动器(SSD,Solid State Disk)时,低效率体现得更为明显。同时,在键值对数据中的值容量较大时,数据块的数量较多,块索引所占的内存空间也较大。举例来说,SSTable方式通常会限制数据块的大小,如数据块的最大数据容量为64千字节,此时,若某个键值对数据本身的数据容量达到了64kb,那么按照SST able方式,就会建立仅包括该键值对数据的数据块,并为该数据块建立块索引,由于块索引本身占用的内存空间较大,故在数据容量较大的键值对数据越多的情况下,建立的所有块索引所占用的内存空间会直线上升。
本发明实施例提供一种数据索引方法、装置、电子设备和存储介质,能够降低索引所占的内存空间,同时提升磁盘I/O效率,下面说明本发明实施例提供的电子设备的示例性应用。
参见图1,图1是本发明实施例提供的数据索引系统100的一个可选的架构示意图,为实现支撑一个数据索引应用,终端设备400(示例性示出了终端设备400-1和终端设备400-2)通过网络300连接服务器200,服务器200连接数据库500,其中,网络300可以是广域网或者局域网,又或者是二者的组合。
服务器200用于获取键值对数据,并对键值对数据中的键进行哈希处理,得到键哈希,其中,键值对数据可以是用户通过终端设备400录入的,或通过其他方式得到的;将键值对数据存储至数据库500,确定键值对数据在数据库500中的数据地址;根据键哈希及数据地址,建立键值对数据对应的键索引,并将键索引保存在服务器200的内存中;终端设备400用于接收包括目标键的查询请求,并将目标键发送至服务器200;服务器200还用于对目标键进行哈希处理,得到目标键哈希;查找键哈希与目标键哈希匹配的键索引,根据查找出的键索引中的数据地址,确定对应的键值对数据,并将该键值对数据中的值发送至终端设备400;终端设备400还用于,在图形界面410(示例性示出了图形界面410-1和图形界面410-2)显示查询得到的值。
下面继续说明本发明实施例提供的电子设备的示例性应用。电子设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的终端设备,也可以实施为服务器。下面,以电子设备为服务器为例进行说明。
参见图2A,图2A是本发明实施例提供的电子设备600(例如,可以是图1所示的服务器200或终端设备400)的架构示意图,图2A所示的电子设备600包括:至少一个处理器610、存储器650、至少一个网络接口620和用户接口630。电子设备600中的各个组件通过总线系统640耦合在一起。可理解,总线系统640用于实现这些组件之间的连接通信。总线系统640除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2A中将各种总线都标为总线系统640。
处理器610可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口630包括使得能够呈现媒体内容的一个或多个输出装置631,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口630还包括一个或多个输入装置632,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器650可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器650可选地包括在物理位置上远离处理器610的一个或多个存储设备。
存储器650包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Me mory),易失性存储器可以是随机存取存储器(RAM,Random Access Memor y)。本发明实施例描述的存储器650旨在包括任意适合类型的存储器。
在一些实施例中,存储器650能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统651,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块652,用于经由一个或多个(有线或无线)网络接口620到达其他计算设备,示例性的网络接口620包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块653,用于经由一个或多个与用户接口630相关联的输出装置631(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块654,用于对一个或多个来自一个或多个输入装置632之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本发明实施例提供的数据索引装置可以采用软件方式实现,图2A示出了存储在存储器650中的数据索引装置6551,其可以是程序和插件等形式的软件,包括以下软件模块:第一哈希确定模块65511、地址确定模块65512及建立模块65513,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在一些实施例中,图2B示出了存储在存储器650中的数据索引装置6552,其可以是程序和插件等形式的软件,包括以下软件模块:接收模块65521、第二哈希处理模块65522及查找模块65523,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分,其中,图2B除了示出的数据索引装置6552外,其余部分可均与图2A相同。将在下文中说明各个模块的功能。
在另一些实施例中,本发明实施例提供的数据索引装置可以采用硬件方式实现,作为示例,本发明实施例提供的数据索引装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的数据索引方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Progra mmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmabl e Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
上述的执行数据索引方法的电子设备的可以是各种类型的设备,例如,本发明实施例提供的数据索引方法可以由上述的服务器执行,也可以由终端设备(例如,可以是图1所示的终端设备400-1或终端设备400-2)执行,或者由服务器和终端设备共同执行。
下面将结合上文记载的电子设备的示例性应用和结构,说明电子设备中通过嵌入的数据索引装置6551而实现数据索引方法的过程。
参见图3和图4A,图3是本发明实施例提供的数据索引装置9551的架构示意图,示出了通过一系列模块建立索引的流程,图4A是本发明实施例提供的数据索引方法的流程示意图,将结合图3对图4A示出的步骤进行说明。
在步骤101中,对键值对数据中的键进行哈希处理,得到键哈希。
作为示例,参见图3,在第一哈希处理模块65511中,对键值对数据中的键(key)进行哈希处理,为了便于区分,将得到的哈希值命名为键哈希。其中,可根据实际应用场景设定键哈希的长度,如设定为2个字节。
在步骤102中,确定键值对数据在存储空间中的数据地址。
将键值对数据存储至设定的存储空间,并确定键值对数据在存储空间中的数据地址,该数据地址用于表示键值对数据的存储情况,便于在后续查询时,根据数据地址找到相应的键值对数据。值得说明的是,数据地址可以是键值对数据的实际存储地址,也可以是地址偏移量,另外,在本发明实施例中,是将键值对数据中的键和值进行共同存储,而并不是如传统方案中仅存储键值对数据中的值,将键作为索引。
在步骤103中,根据键哈希及数据地址,建立键值对数据对应的键索引;其中,键索引用于响应对键值对数据的查询请求。
这里,根据键值对数据对应的键哈希及数据地址,建立键索引,由于键哈希的容量相较于键来说通常更小,例如某些键的容量可达到几十字节,故相较于直接在索引中保存键的本身信息的方式,本发明实施例建立的键索引所占用的内存空间更小。建立的键索引提供了对键值对数据的查询通道,即用于响应对该键值对数据的查询请求。除此之外,键索引中还可包括值容量,该值容量用于表示键值对数据中的值的大小。在已建立并存储键索引的情况下,若需要查询键值对数据,则可通过键哈希进行查找,并在查找到对应的键索引后,根据键索引中的数据地址,访问对应的键值对数据。
通过发明实施例对于图4A的上述示例性实施可知,本发明实施例根据键哈希及数据地址建立键值对数据对应的键索引,由于在键索引中保存的是占用较小的键哈希,故大大降低了对内存的需求,即降低了键索引所占的内存空间。
在一些实施例中,参见图4B,图4B是本发明实施例提供的数据索引方法的一个可选的流程示意图,基于图4A,在步骤101之前,还可以在步骤201中,根据键值对数据中的键,对键值对数据进行排序处理。
作为示例,参见图3,在数据排序模块中,可按照键从小到大的顺序,或按照键从大到小的顺序,对所有键值对数据进行排序处理。举例来说,键值对数据包括“100-value1”、“56-value2”及“101-value3”,其中,“100”、“56”及“101”表示键,则按照键从小到大的顺序进行排序处理后,可得到序列:“56-value2”-“100-value1”-“101-value3”。
在步骤202中,将排序处理后的键值对数据存储至划分的子存储空间;其中,子存储空间存储的键值对数据的数量不超过数量上限。
作为示例,参见图3,在存储模块中,可根据键值对数据的数量,从存储空间中划分子存储空间。例如,设定子存储空间进行存储的数量上限为128个键值对数据,而待存储的键值对数据共有200个,则从存储空间中划分出2个子存储空间,当然,根据实际应用场景的不同,也可将数量上限设定为其他数值,并不限于上文的128个。然后,将排序处理后的键值对数据依次存储至子存储空间中,在达到子存储空间的数量上限时,继续将未存储的键值对数据存储至下一个子存储空间,直到所有的键值对数据都存储完毕。在完成存储的同时,也确定了键值对数据的数据地址。
在一些实施例中,可以通过这样的方式来实现上述的对键值对数据中的键进行哈希处理,得到键哈希:将键值对数据中的键映射为设定哈希长度的键哈希;其中,子存储空间内的哈希碰撞概率为数量上限与设定哈希长度对应的编码种类之间的比值。
在本发明实施例中,可根据哈希算法,将键值对数据中的键映射为设定哈希长度的键哈希,通过调整设定哈希长度及子存储空间的数据上限,可控制子存储空间内的哈希碰撞概率,使其不超过碰撞概率阈值,碰撞概率阈值可根据实际应用场景进行设定。举例来说,设定哈希长度为2个字节,则对应的编码种类(相当于编码范围)为216,子存储空间的数据上限为128个,则子存储空间内的哈希碰撞概率为128/216=0.195%。通过上述方式,可尽量减少子存储空间内哈希碰撞情况的出现。
在步骤203中,将子存储空间内最大或最小的键确定为标识键,并将标识键所在键值对数据的数据地址,确定为标识数据地址;其中,标识键用于表示子存储空间的键范围。
作为示例,参见图3,在标识确定模块中,对于划分的子存储空间进行标识选取,具体将子存储空间内最大或最小的键确定为用于索引的标识键,该标识键用于表示子存储空间的键范围,例如,若在步骤201中按照键从小到大的顺序进行排序,且设定标识键是子存储空间内的最大键,则子存储空间A的键范围为(子存储空间B的标识键,子存储空间A的标识键],其中,子存储空间B是子存储空间A的上一个子存储空间,即在步骤202中是先将排序处理后的键值对数据存储至子存储空间B,达到子存储空间B的数量上限后,再存储至子存储空间A。在选取出子存储空间的标识键后,将标识键所在键值对数据的数据地址,确定为对应的子存储空间的标识数据地址。
在步骤204中,根据标识键及标识数据地址,建立子存储空间的空间索引。
作为示例,参见图3,在空间索引建立模块中,根据标识键及标识数据地址,建立子存储空间的空间索引,该空间索引相当于键索引的上级索引,用于和键索引共同响应对键值对数据的查询请求。
在一些实施例中,步骤204之后,还包括:根据空间索引中的标识键,对空间索引进行排序处理,得到空间索引序列;其中,空间索引序列用于响应对空间索引的查找操作。
在建立了子存储空间的空间索引后,可根据空间索引中的标识键,对所有空间索引进行排序处理,得到空间索引序列,其中,排序处理可以是按照标识键从小到大的顺序,也可以按照标识键从大到小的顺序。排序后得到的空间索引序列可用于响应对空间索引的有序查找操作,提升查找效率。
在一些实施例中,步骤103之后,还包括:根据键哈希,对键索引进行排序处理,得到键索引序列;其中,键索引序列用于响应对键索引的查找操作。
同理,也可根据键索引内的键哈希,对存储空间内的所有键索引进行排序处理,得到键索引序列,排序处理同样是可以按照键哈希从小到大的顺序,或是按照键哈希从大到小的顺序。值得说明的是,基于键哈希的排序处理并不是传统的散列桶排序,而是直接根据键哈希的数值进行排序,便于后续的有序查找处理。例如,键索引1中的键哈希为187,键索引2中的键哈希为154,键索引3中的键哈希为150,若按照键哈希从小到大的顺序进行排序,则可得到键索引序列为:键索引3-键索引2-键索引1。排序后得到的键索引序列可用于响应对存储空间内的键索引的有序查找操作,提升查找效率。在划分了子存储空间的基础上,可针对每个子存储空间,对子存储空间内的所有键索引进行排序处理,得到子存储空间对应的键索引序列。
在图4B中,图4A示出的步骤102可更新为步骤205,在步骤205中,将键值对数据的数据地址,减去键值对数据所在子存储空间的标识数据地址,得到键值对数据的相对数据地址。
作为示例,参见图3,在地址确定模块65512中,在已确定子存储空间的标识数据地址的基础上,可根据标识数据地址对子存储空间内每一个键值对数据的数据地址进行更新。具体地,将键值对数据的数据地址,减去键值对数据所在子存储空间的标识数据地址,得到该键值对数据的相对数据地址,在后续根据该相对数据地址建立键索引。相较于键值对数据原有的数据地址来说,通过确定出相对数据地址,能够根据更短的数据地址编码长度描述键值对数据的存储情况。
在一些实施例中,可以通过这样的方式来实现上述的将排序处理后的键值对数据存储至划分的子存储空间:确定划分的子存储空间的待存储容量;根据待存储容量和数据地址编码长度,确定对齐单位;将排序处理后的键值对数据写入至划分的子存储空间,并在写入过程中,根据对齐单位对写入的键值对数据进行字节对齐处理,得到写入的键值对数据的数据地址。
对于划分的子存储空间来说,可确定待进行存储的待存储容量,并根据待存储容量和设定的数据地址编码长度,确定对齐单位,其中,数据地址编码长度如2个字节,当然也可为其他字节长度。在确定对齐单位时,首先根据数据地址编码长度,确定对应的编码范围,例如在数据地址编码长度为2个字节时,其编码范围为216=65536byte=64kb。然后,将待存储容量除以编码范围,得到对齐单位,如在待存储容量为256kb、且数据地址编码长度为2个字节时,得到对齐单位为4个字节。
在得到对齐单位后,将排序处理后的键值对数据写入至划分的子存储空间,并在写入过程中,根据对齐单位对写入的键值对数据进行字节对齐处理,从而得到写入的键值对数据的数据地址。值得说明的是,这里得到的数据地址可以是键值对数据在子存储空间内原有的数据地址,也可以是相对数据地址。通过上述方式,使得得到的数据地址能够有效地表示写入的键值对数据。在一些实施例中,可以通过这样的方式来实现上述的确定划分的子存储空间的待存储容量:执行以下任意一种处理以得到划分的子存储空间的待存储容量:确定划分的子存储空间的上一个子存储空间的已存储容量,并根据已存储容量,预测划分的子存储空间的待存储容量;确定待写入划分的子存储空间的键值对数据,并将待写入的键值对数据的数据容量,确定为划分的子存储空间的待存储容量。
本发明实施例提供了两种方式来确定划分的子存储空间的待存储容量。第一种方式是,确定划分的子存储空间的上一个子存储空间,该上一个子存储空间已存储完毕键值对数据。然后,根据上一个子存储空间的已存储容量,预测划分的子存储空间的待存储容量,这里,可以直接将上一个子存储空间的已存储容量作为划分的子存储空间的待存储容量,由于数据的容量存在一定的不可控性,即相邻两个子存储空间存储的数据容量不一定相近,故也可以在上一个子存储空间的已存储容量的基础上加上设定的附加值,得到划分的子存储空间的待存储容量,例如,上一个子存储空间的已存储容量为2兆字节(mb),则加上附加值1mb,得到划分的子存储空间的待存储容量为3mb。通过读取上一个子存储空间的已存储容量,能够较为快速地得到待存储容量,提升存储效率。在此基础上,还可读取待写入划分的子存储空间的所有键值对数据的数据容量,当该数据容量超过预测的待存储容量时,增加数据地址编码长度,如将2个字节的数据地址编码长度增加为4个字节,以使后续得到的数据地址能够有效地表示写入的键值对数据。
第二种方式是,直接获取待写入划分的子存储空间的所有键值对数据的数据容量,并将该数据容量确定为划分的子存储空间的待存储容量。该种方式得到的待存储容量较为准确,但速度较慢。根据实际应用场景,可采用上文的任意一种方式得到待存储容量。
在图4B中,图4A示出的步骤103可更新为步骤206,在步骤206中,将键哈希、相对数据地址以及值容量,组合为键值对数据对应的键索引;其中,值容量用于表示键值对数据中的值的大小;空间索引及键索引用于响应对键值对数据的查询请求。
作为示例,参见图3,在建立模块65513中,对于每一个键值对数据,将键值对数据的键哈希、相对数据地址以及值容量,组合为键索引,其中,值容量用于表示键值对数据中的值的大小,便于在查询时,根据值容量加载键值对数据中的值。建立的空间索引和键索引用于共同响应对键值对数据的查询请求。
通过发明实施例对于图4B的上述示例性实施可知,本发明实施例通过建立空间索引和键索引,形成了两级索引的架构,在收到查询请求时,先查找子存储空间,再查找键值对数据,有效地提升了对键值对数据的查询效率,同时,通过设定哈希长度及数量上限,可有效减小子存储空间内哈希碰撞情况的出现。
下面将结合上文记载的电子设备的示例性应用和结构,说明电子设备中通过嵌入的数据索引装置6552而实现数据索引方法的过程。
参见图5A,图5A是本发明实施例提供的数据索引方法的一个可选的流程示意图,将结合图5A示出的步骤进行说明。
在步骤301中,接收包括目标键的查询请求;。
这里,电子设备接收包括键的查询请求,为了便于区分,将查询请求中的键命名为目标键。
在步骤302中,对目标键进行哈希处理,得到目标键哈希。
由于建立的键索引包括的是键哈希,故在根据查询请求进行查询时,对目标键进行哈希处理,得到目标键哈希。
在步骤303中,查找键哈希与目标键哈希匹配的键索引,并根据查找出的键索引中的数据地址,确定对应的键值对数据。
这里,查找键哈希与目标键哈希相同的键索引,例如可根据目标键哈希在所有键索引中进行遍历匹配,直至得到键哈希与目标键哈希相同的键索引。然后,根据查找出的键索引中的数据地址,确定对应的键值对数据的实际存储地址,根据实际存储地址访问该键值对数据,以响应该查询请求。
通过发明实施例对于图5A的上述示例性实施可知,本发明实施例在对每个键值对数据建立了键索引的基础上,根据目标键哈希找到对应的键索引,从而响应查询请求,提升了查询效率。
在一些实施例中,参见图5B,图5B是本发明实施例提供的数据索引方法的一个可选的流程示意图,基于图5A,在步骤303之后,还可以在步骤401中,将查找出的键索引对应的键值对数据中的键,确定为对比键。
哈希处理是将任意长度的输入通过散列算法变换成固定长度的输出,得到哈希值,而对于不同的输入来说,通过哈希处理后,可能会得到同一个哈希值,即产生哈希碰撞。由于本发明实施例并不如传统方案一般,将键值对数据中的键作为索引,将值进行存储,而是将键和值共同进行存储,并基于键哈希建立键索引,故本发明实施例可通过存储的键值对数据克服哈希碰撞的问题。具体地,在查找到键哈希与目标键哈希匹配的键索引时,将查找出的键索引对应的键值对数据中的键,确定为对比键。
在步骤402中,当对比键与目标键相同时,确定查找出的键索引中的值容量。
这里。将对比键与查询请求中的目标键进行比对,当对比键与目标键不同时,跳过该对比键对应的键索引;当对比键与目标键相同时,确定该对比键对应的键索引中的值容量。值得说明的是,在步骤401中可能查找到至少两个键索引,其中查找到的键索引中的键哈希与目标键哈希匹配,对于这种情况,当查找到的某个键索引对应的对比键与目标键相同时,即确定查询成功,进一步确定该键索引中的值容量;当查找到的所有键索引对应的对比键与目标键均不同时,返回查询失败的提示。
在步骤403中,根据值容量,加载查找出的键索引对应的键值对数据中的值,以响应查询请求。
这里,电子设备根据确定出的值容量,从存储空间中加载查找出的键索引对应的键值对数据中的值,以响应查询请求,例如将值呈现于终端设备的图像界面,以使用户获知。
通过发明实施例对于图5B的上述示例性实施可知,本发明实施例通过将查找出的键索引对应的键与目标键进行比对,有效地避免了因哈希碰撞而得到错误的查询结果的情况,即在本发明实施例中,键不存在碰撞可能,提升了查询的精度。
在一些实施例中,参见图5C,图5C是本发明实施例提供的数据索引方法的一个可选的流程示意图,图5A示出的步骤303可以通过步骤501至步骤509实现,将结合各步骤进行说明。
在步骤501中,将空间索引序列内位于中间位置的空间索引,确定为对比空间索引。
在已建立空间索引序列的基础上,可根据查询请求中的目标键,对空间索引序列进行有序查找处理,得到目标空间索引,其中,目标空间索引的标识键所表示的键范围包括目标键。值得说明的是,本发明实施例对有序查找处理的方式不做限定,例如有序查找处理的方式可包括二分查找、插值查找及斐波那契查找等。为了便于理解,以二分查找的方式,说明得到目标空间索引的过程。
在进行二分查找时,首先获取空间索引序列,该空间索引序列中的空间索引已按特定的顺序完成排序。然后,将空间索引序列内位于中间位置的空间索引,确定为对比空间索引,进行子存储空间的二分查找。
在步骤502中,根据对比空间索引将空间索引序列划分为第一空间索引序列和第二空间索引序列。
根据对比空间索引将空间索引序列划分为第一空间索引序列和第二空间索引序列,其中,第一空间索引序列中空间索引的标识键小于对比空间索引中的标识键,第二空间索引序列中空间索引的标识键大于对比空间索引中的标识键。
在步骤503中,当目标键落入对比空间索引的标识键所表示的键范围时,将对比空间索引确定为目标空间索引,并确定目标空间索引对应的子存储空间,将子存储空间的键索引序列内位于中间位置的键索引,确定为对比键索引。
将对比空间索引的标识键所表示的键范围与目标键进行比对,当目标键落入对比空间索引的标识键所表示的键范围时,将对比空间索引确定为目标空间索引。进一步地,确定目标空间索引对应的子存储空间,并根据目标键哈希,对该子存储空间对应的键索引序列进行有序查找处理,得到键哈希与目标键哈希匹配的键索引。值得说明的是,本发明实施例对键索引序列的有序查找处理方式同样不做限定,为了便于理解,以二分查找进行说明。
此外,在未划分子存储空间的情况下,同样也可进行对键索引序列的有序查找处理。具体地,将存储空间的键索引序列内位于中间位置的键索引,确定为对比键索引,从而进行键索引的二分查找。
在步骤504中,当目标键未落入对比空间索引的标识键所表示的键范围、且目标键大于对比空间索引的标识键时,将第二空间索引序列内位于中间位置的空间索引,确定为新的对比空间索引。
这里,当目标键未落入对比空间索引的标识键所表示的键范围、且目标键大于对比空间索引的标识键时,将第二空间索引序列内位于中间位置的空间索引,确定为新的对比空间索引,以根据新的对比空间索引,将第二空间索引序列进行划分,继续进行二分查找。
在步骤505中,当目标键未落入对比空间索引的标识键所表示的键范围、且目标键小于对比空间索引的标识键时,将第一空间索引序列内位于中间位置的空间索引,确定为新的对比空间索引。
当目标键未落入对比空间索引的标识键所表示的键范围、且目标键小于对比空间索引的标识键时,将第一空间索引序列内位于中间位置的空间索引,确定为新的对比空间索引,以根据新的对比空间索引,将第一空间索引序列进行划分,继续进行二分查找。值得说明的是,若在对子存储空间的二分查找完成时,仍未查找到键范围容纳目标键的子存储空间,则返回查找失败的提示。
在步骤506中,根据对比键索引,将键索引序列划分为第一键索引序列和第二键索引序列。
在查找到子存储空间时,获取子存储空间的键索引序列,该键索引序列中的键索引对应子存储空间内的键值对数据,且键索引序列中的键索引已按特定的顺序完成排序。将键索引序列内位于中间位置的键索引,确定为对比键索引,并根据对比键索引,将键索引序列划分为第一键索引序列和第二键索引序列,其中,第一键索引序列中键索引的键哈希小于对比键索引中的键哈希,第二键索引序列中键索引的键哈希大于对比键索引中的键哈希。
在步骤507中,当目标键哈希与对比键索引中的键哈希相同时,将对比键索引,确定为与目标键哈希匹配的键索引。
将目标键哈希与对比键索引中的键哈希进行比对,当目标键哈希与对比键索引中的键哈希相同时,将对比键索引确定为与目标键哈希匹配的键索引。
在步骤508中,当目标键哈希小于对比键索引中的键哈希时,将第一键索引序列内位于中间位置的键索引,确定为新的对比键索引。
当目标键哈希小于对比键索引中的键哈希时,将第一键索引序列内位于中间位置的键索引,确定为新的对比键索引,以根据新的对比键索引,将第一键索引序列进行划分,从而继续进行二分查找。
在步骤509中,当目标键哈希大于对比键索引中的键哈希时,将第二键索引序列内位于中间位置的键索引,确定为新的对比键索引。
当目标键哈希大于对比键索引中的键哈希时,将第二键索引序列内位于中间位置的键索引,确定为新的对比键索引,以根据新的对比键索引,将第二键索引序列进行划分,从而继续进行二分查找。值得说明的是,若在对键索引的二分查找完成时,仍未查找到键哈希与目标键哈希相同的键索引,则返回查找失败的提示。
在步骤510中,根据键哈希与目标键哈希匹配的键索引中的数据地址,确定对应的键值对数据,以响应查询请求。
在确定出键哈希与目标键哈希匹配的键索引时,根据该键索引中的数据地址,访问对应的键值对数据,以响应查询请求。
在一些实施例中,可以通过这样的方式实现上述的根据查找出的键索引中的数据地址,确定对应的键值对数据:确定查找出的键索引中的相对数据地址,并确定查找出的键索引所在子存储空间的标识数据地址;对相对数据地址和标识数据地址进行求和处理,并根据求和处理得到的数据地址,确定用于响应查询请求的键值对数据。
对于查找出的键索引包括相对数据地址的情况,确定查找出的键索引所在子存储空间的标识数据地址,并对相对数据地址和标识数据地址进行求和处理,并根据求和处理得到的数据地址,确定用于响应查询请求的键值对数据,通过上述方式,提升了访问键值对数据在不同情况下的适用性。
通过发明实施例对于图5C的上述示例性实施可知,本发明实施例通过有序查找处理的方式确定符合查询请求的子存储空间及键索引,从而得到对应的键值对数据,相较于遍历查找的方式,提升了查询效率,加快了响应查询请求的速度。
下面,将说明本发明实施例在一个实际的应用场景中的示例性应用。
首先,根据键值对数据中的键,对所有的键值对数据进行排序处理。根据排序处理后的键值对数据,划分子存储空间,并将排序处理后的键值对数据存储至子存储空间,其中,每个子存储空间的包括的键值对数据的数量不超过数据上限,数据上限如128个。对于每个子存储空间,建立对应的空间索引,空间索引包括该子存储空间的标识键,标识键可为最大的键或最小的键,空间索引还包括base offset,base offset即相当于上文中标识键对应的标识数据地址。在存储时,可根据设定的数据地址编码长度来对键值对数据进行字节对齐处理,为了便于说明,以数据地址编码长度为2个字节举例,则对于子存储空间内的每个键值对数据来说,可将自身原有的数据地址减去标识数据地址,得到长度为2个字节的相对数据地址。此外,对于所有的空间索引,还可进行排序处理,得到空间索引序列。
然后,建立空间索引下一级的键索引。具体对子存储空间内的每一个键进行哈希处理,得到设定哈希长度的键哈希,为了便于说明,以设定哈希长度为2个字节进行举例。根据得到的键哈希建立键索引,在键索引中保存如下信息:2字节(byte)的键哈希+2byte的相对数据地址+2位(bit)的值容量,值容量用于表示键值对数据中的值的大小,可用最多4个页(page)进行存储。此外,对于得到的所有键索引,还可进行排序处理,得到键索引序列。
本发明实施例提供了如图6所示的索引示意图,在图6中,示出了一个子存储空间,该子存储空间内的三个键值对数据按照键从小到大的顺序存储,其中,键值对数据1中的键为10,值为value1;键值对数据2中的键为13,值为value2;键值对数据3中的键为19,值为value3。图6示出的数据地址可为实际存储地址,也可为地址偏移量,根据具体的存储及寻址方式而定,通常来说,数据地址3>数据地址2>数据地址1。为了便于说明,以标识键为子存储空间内最大的键的情况进行举例,则图6所示的子存储空间的空间索引中的标识键为键值对数据3中的键,即19,对应的标识数据地址为数据地址3。在建立键索引时,对于键值对数据1,其对应的键索引包括数值为10的键的哈希值、数据地址1减去数据地址3得到的相对数据地址以及value1的容量;对于键值对数据2,其对应的键索引包括数值为13的键的哈希值、数据地址2减去数据地址3得到的相对数据地址以及value2的容量;对于键值对数据3,其对应的键索引包括数值为19的键的哈希值、数据地址3减去数据地址3得到的相对数据地址(为0)以及value3的容量。值得说明的是,子存储空间内存储的键值对数据本身是有序存储的,键值对数据对应的键索引可根据其内的键哈希进行排序处理,子存储空间对应的空间索引可根据其内的标识键进行排序处理。
在建立了空间索引及键索引后,可接收查询请求,进行相应的查询。在查询时,首先根据查询请求中的目标键,对空间索引序列进行二分查找,得到对应的子存储空间,然后再在该子存储空间内,根据目标键的目标键哈希,对键索引序列进行二分查找,得到对应的键索引。当然,二分查找可能存在查找失败的情况,对于该情况,返回查找失败的提示。
在经二分查找得到键索引时,根据键索引中的相对数据地址,获取对应的键值对数据。值得说明的是,由于本发明实施例同时存储了键值对数据中的键和值,而不是如传统方式中仅存储值,将键作为索引,故本发明实施例在查找得到键值对数据时,还将键值对数据中的键与目标键进行比对,在两个键相同的情况下,才确定查找成功,返回键值对数据中的值。在子存储空间包括的键值对数据的数量为128个、且设定哈希长度是2byte的情况下,发生哈希碰撞的概率为128/65536=0.195%,如果发生了哈希碰撞,那么其代价是1个I/O请求,即多访问一次键值对数据,这种较低概率下的代价处于可接受范围内。
对于本发明实施例提供的数据索引方法,从时间代价和空间代价两个方面说明其有益效果。
对于时间代价,由于在查找时应用二分查找的方式,因此,查找的时间代价为log(n),相较于传统方式,提升了查找效率,其中,n为待查找的对象的总数。
对于空间代价,由于每128个键对应一个子存储空间,每个子存储空间的存储大小不超过64byte,因此子存储空间的存储成本为64/128=0.5byte。另外,每个键对应一个键索引,键索引的大小为4.25byte。故在本发明实施例中,每个键所需的索引的大小为4.75byte,远小于目前主流查询引擎的索引容量(通常在24byte以上),大概为主流索引的20%。通过本发明实施例,对于100亿数量的键值对数据,索引仅需45吉字节(GB)左右的内存。
经发明人实验验证,在值容量>4000byte的应用场景中,将本发明实施例提供的方案与目前LSM架构(Leveldb、RocksDB、HBase及Cassandra等)中普遍采用的SSTable格式相比,本发明实施例的内存效率提升了5倍以上,具体测试数据如下。其中,以Leveldb的c语言版本的SSTable作为参照。
在磁盘I/O场景中,要求数据量远大于操作系统的内存,因此,在随机测试时,缓存命中基本会失效,故能够有效测试磁盘I/O的效率。这里,使用的测试机器包括2个20核的中央处理器(CPU,Central Processing Unit),192G B内存,4*3.6太字节(TB)的非易失性存储器标准(NVMe,Non-Volatile Me mory express)硬盘,1*480GB的SSD,2*10G网口,在测试过程中仅使用一个NVMe硬盘。
在值容量>4000byte的随机查询场景下,采用80线程对各种索引进行压力测试。从内存的角度,相较于SSTable,本发明实施例提供的方案的内存效率提高了400%;从性能的角度,相较于SSTable,本发明实施例提供的方案的每秒查询率(QPS,Queries-Per-Second)提高了52%;从响应速度,即达到99.9%响应速度的耗时的角度,本发明实施例提供的方案相较于SSTable,提升了147%。详细测试数据如下。
测试场景:
性能数据:
从性能的角度,本发明实施例提供方案的性能较于SSTable,有显著的提升。
从内存的角度,本发明实施例提供方案所占用的内存和键值对数据的数量成正比,而SSTable因为只对数据块编制了一级索引,在相同数量的键的情况下,当值容量增大时,一级索引会相对增多,索引占用内存会持续增大,直到值容量>=数据块大小。
在全内存场景中,测试系统的内存大于实际测试数据的情况,在该情况下,随机查询时基本会命中系统缓存,更多体现的是CPU性能。为了提升测试的稳定性,进行了两遍内存测试,并采用第二遍的测试结果,其中,第一遍的内存测试用于将数据强制刷到系统的页高速缓冲存储器(page cache)中。
从性能的角度,对于采用40线程进行的随机查询测试,本发明实施例提供方案的QPS超过1700万,而SSTable则仅有350万。除此之外,还采用20线程进行了顺序扫描的测试,在该测试中,本发明实施例提供方案的QPS超过1亿8千万,而SSTable则在2千万左右。
在功能特性方面,本发明实施例提供的方案能够支持如下特性:
1)随机查询:在接收到包括目标键的查询请求后,能够通过有序查找处理,找到对应的子存储空间和子存储空间内的键值对数据,以响应查询请求。
2)范围查询:在本发明实施例中构建了键索引序列及空间索引序列,此外,子存储空间内的键值对数据本身也是有序的。若接收到范围查询的请求,则可根据键值对数据本身的有序关系,得到对应的查询结果。例如,某子存储空间存储有有序的键值对数据“10-value1”、“13-value2”及“19-value3”,其中,“10”、“13”及“19”均表示键,若范围查询的请求是查询键大于12的键值对数据,且在查询过程中访问到键值对数据“10-value1”,则可根据键值对数据之间的有序关系,访问“10-value1”的下一个键值对数据(即键更大的键值对数据),并判断下一个键值对数据中的键是否大于12。由于“13-value2”中的键大于12,故将“13-value2”以及“13-value2”之后的所有键值对数据,作为查询结果返回。
3)键可变大小:由于键索引中保存的是键哈希,故本发明实施例对键本身的大小并无要求,即键可变大小。
4)键不存在碰撞可能:虽然键哈希存在碰撞可能,但本发明实施例通过键对比的方式,避免了这一问题,能够得到准确的查询结果。
5)对每个键建立内存索引。
值得说明的是,对于SSTable来说,其内存中编制的是块索引,而一级索引则是与值混合编制在数据块中的,即SSTable并不支持对每个键建立内存索引。
此外,本发明实施例还提供了如下的访问指标表(示出了通过本发明实施例提供的方案得到的访问指标):
在对值容量(value size)=5000byte的键值对数据进行测试的过程中,本发明实施例提供的方案平均每次只读取16.27*块大小(512byte)=8330字节的数据,大约是2个page。由于本发明实施例是对每个键值对数据都编制索引,并且每次只读取到的值容量加载键值对数据中的值,故加载的数据较少。而对于SSTable来说,由于SSTable是基于块的索引,故每次查询都需要加载整个数据块,加载的数据较多,会浪费较多的资源。
下面继续说明本发明实施例提供的数据索引装置6551实施为软件模块的示例性结构,在一些实施例中,如图2A所示,存储在存储器650的数据索引装置6551中的软件模块可以包括:第一哈希处理模块65511,用于对键值对数据中的键进行哈希处理,得到键哈希;地址确定模块65512,用于确定键值对数据在存储空间中的数据地址;建立模块65513,用于根据键哈希及数据地址,建立键值对数据对应的键索引;其中,键索引用于响应对键值对数据的查询请求。
在一些实施例中,数据索引装置6551还包括:数据排序模块,用于根据键值对数据中的键,对键值对数据进行排序处理;存储模块,用于将排序处理后的键值对数据存储至划分的子存储空间;其中,子存储空间存储的键值对数据的数量不超过数量上限;标识确定模块,用于将子存储空间内最大或最小的键确定为标识键,并将标识键所在键值对数据的数据地址,确定为标识数据地址;其中,标识键用于表示子存储空间的键范围;空间索引建立模块,用于根据标识键及标识数据地址,建立子存储空间的空间索引;其中,空间索引及键索引用于响应对键值对数据的查询请求。
在一些实施例中,地址确定模块65512,还用于:将键值对数据的数据地址,减去键值对数据所在子存储空间的标识数据地址,得到键值对数据的相对数据地址;
建立模块65513,还用于:将键哈希、相对数据地址以及值容量,组合为键值对数据对应的键索引;其中,值容量用于表示键值对数据中的值的大小。
在一些实施例中,存储模块,还用于:确定划分的子存储空间的待存储容量;根据待存储容量和数据地址编码长度,确定对齐单位;将排序处理后的键值对数据写入至划分的子存储空间,并在写入过程中,根据对齐单位对写入的键值对数据进行字节对齐处理,得到写入的键值对数据的数据地址。
在一些实施例中,存储模块,还用于:执行以下任意一种处理以得到划分的子存储空间的待存储容量:确定划分的子存储空间的上一个子存储空间的已存储容量,并根据已存储容量,预测划分的子存储空间的待存储容量;确定待写入划分的子存储空间的键值对数据,并将待写入的键值对数据的数据容量,确定为划分的子存储空间的待存储容量。
在一些实施例中,数据索引装置6551还包括:空间索引排序模块,用于根据空间索引中的标识键,对空间索引进行排序处理,得到空间索引序列;其中,空间索引序列用于响应对空间索引的查找操作。
在一些实施例中,第一哈希处理模块65511,还用于:将键值对数据中的键映射为设定哈希长度的键哈希;其中,子存储空间内的哈希碰撞概率为数量上限与设定哈希长度对应的编码种类之间的比值。
在一些实施例中,数据索引装置6551还包括:键索引排序模块,用于根据键哈希,对键索引进行排序处理,得到键索引序列;其中,键索引序列用于响应对键索引的查找操作。
下面继续说明本发明实施例提供的数据索引装置6552实施为软件模块的示例性结构,在一些实施例中,如图2B所示,存储在存储器650的数据索引装置6552中的软件模块可以包括:接收模块65521,用于接收包括目标键的查询请求;第二哈希处理模块65522,用于对目标键进行哈希处理,得到目标键哈希;查找模块65523,用于查找键哈希与目标键哈希匹配的键索引,并根据查找出的键索引中的数据地址,确定对应的键值对数据,以响应查询请求。
在一些实施例中,查找模块65523,还用于:根据目标键哈希,对键索引序列进行有序查找处理,得到键哈希与目标键哈希匹配的键索引;
数据索引装置6552还包括:空间索引查找模块,用于根据目标键,对空间索引序列进行有序查找处理,得到目标空间索引,以在目标空间索引对应子存储空间的键索引序列中,查找键哈希与目标键哈希匹配的键索引;其中,目标空间索引的标识键所表示的键范围包括目标键。
在一些实施例中,查找模块65523,还用于:确定查找出的键索引中的相对数据地址,并确定查找出的键索引所在子存储空间的标识数据地址;对相对数据地址和标识数据地址进行求和处理,并根据求和处理得到的数据地址,确定用于响应查询请求的键值对数据。
在一些实施例中,数据索引装置6552还包括:对比键确定模块,用于将查找出的键索引对应的键值对数据中的键,确定为对比键;对比模块,用于当对比键与目标键相同时,根据查找出的键索引对应的键值对数据,响应查询请求。
在一些实施例中,数据索引装置6552还包括:容量确定模块,用于确定查找出的键索引中的值容量;加载模块,用于根据值容量,加载查找出的键索引对应的键值对数据中的值,以响应查询请求。
本发明实施例提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本发明实施例提供的数据索引方法,例如,如图4A或图4B示出的数据索引方法,或如图5A、图5B或图5C示出的数据索引方法。
在一些实施例中,存储介质可以是FRAM、ROM、PROM、EPROM、EE PROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(H TML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上,通过本发明实施例能够实现以下技术效果:
1)本发明实施例通过在索引中存储键哈希,极大地降低了对内存的需求量,降低了索引的存储成本,存储成本大概仅需主流索引的20%。
2)由于对每个键值对数据编制了索引,在加载时仅需加载对应的键值对数据中的值,降低了每次加载的数据量。
3)通过设定哈希长度及子存储空间的数量上限,有效地减少了哈希碰撞的概率,就算出现了哈希碰撞,其代价也处于可接受范围内。
4)建立的索引支持随机查询及范围查询,查询的灵活性较高,并且通过键对比的方式,避免了因哈希碰撞而得到错误的查询结果,即键本身不存在碰撞可能,此外,键的大小可变,而非仅支持固定大小。
5)大大提升了通过建立的索引进行查询的性能,降低了时间代价和空间代价,具体体现在内存消耗、QPS及平均耗时等方面。
以上,仅为本发明的实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。
Claims (15)
1.一种数据索引方法,其特征在于,包括:
对键值对数据中的键进行哈希处理,得到键哈希;
确定所述键值对数据在存储空间中的数据地址;
根据所述键哈希及所述数据地址,建立所述键值对数据对应的键索引;
其中,所述键索引用于响应对所述键值对数据的查询请求。
2.根据权利要求1所述的数据索引方法,其特征在于,还包括:
根据所述键值对数据中的键,对所述键值对数据进行排序处理;
将排序处理后的所述键值对数据存储至划分的子存储空间;其中,所述子存储空间存储的所述键值对数据的数量不超过数量上限;
将所述子存储空间内最大或最小的键确定为标识键,并将所述标识键所在键值对数据的数据地址,确定为标识数据地址;其中,所述标识键用于表示所述子存储空间的键范围;
根据所述标识键及所述标识数据地址,建立所述子存储空间的空间索引;
其中,所述空间索引及所述键索引用于响应对所述键值对数据的查询请求。
3.根据权利要求2所述的数据索引方法,其特征在于,
所述确定所述键值对数据在存储空间中的数据地址,包括:
将所述键值对数据的数据地址,减去所述键值对数据所在子存储空间的标识数据地址,得到所述键值对数据的相对数据地址;
所述根据所述键哈希及所述数据地址,建立所述键值对数据对应的键索引,包括:
将所述键哈希、所述相对数据地址以及值容量,组合为所述键值对数据对应的键索引;
其中,所述值容量用于表示所述键值对数据中的值的大小。
4.根据权利要求2所述的数据索引方法,其特征在于,所述将排序处理后的所述键值对数据存储至划分的子存储空间,包括:
确定划分的子存储空间的待存储容量;
根据所述待存储容量和数据地址编码长度,确定对齐单位;
将排序处理后的所述键值对数据写入至所述划分的子存储空间,并
在写入过程中,根据所述对齐单位对写入的所述键值对数据进行字节对齐处理,得到写入的所述键值对数据的数据地址。
5.根据权利要求4所述的数据索引方法,其特征在于,所述确定划分的子存储空间的待存储容量,包括:
执行以下任意一种处理以得到所述划分的子存储空间的待存储容量:
确定所述划分的子存储空间的上一个子存储空间的已存储容量,并
根据所述已存储容量,预测所述划分的子存储空间的待存储容量;
确定待写入所述划分的子存储空间的所述键值对数据,并
将待写入的所述键值对数据的数据容量,确定为所述划分的子存储空间的待存储容量。
6.根据权利要求2所述的数据索引方法,其特征在于,
所述根据所述标识键及所述标识数据地址,建立所述子存储空间的空间索引之后,还包括:
根据所述空间索引中的所述标识键,对所述空间索引进行排序处理,得到空间索引序列;
其中,所述空间索引序列用于响应对所述空间索引的查找操作;
所述对键值对数据中的键进行哈希处理,得到键哈希,包括:
将键值对数据中的键映射为设定哈希长度的键哈希;
其中,所述子存储空间内的哈希碰撞概率为所述数量上限与所述设定哈希长度对应的编码种类之间的比值。
7.根据权利要求1至6任一项所述的数据索引方法,其特征在于,所述根据所述键哈希及所述数据地址,建立所述键值对数据对应的键索引之后,还包括:
根据所述键哈希,对所述键索引进行排序处理,得到键索引序列;
其中,所述键索引序列用于响应对所述键索引的查找操作。
8.一种数据索引方法,其特征在于,包括:
接收包括目标键的查询请求;
对所述目标键进行哈希处理,得到目标键哈希;
查找键哈希与所述目标键哈希匹配的键索引,并
根据所述查找出的键索引中的数据地址,确定对应的键值对数据,以响应所述查询请求。
9.根据权利要求8所述的数据索引方法,其特征在于,
所述查找键哈希与所述目标键哈希匹配的键索引,包括:
根据所述目标键哈希,对键索引序列进行有序查找处理,得到键哈希与所述目标键哈希匹配的键索引;
所述查找键哈希与所述目标键哈希匹配的键索引之前,还包括:
根据所述目标键,对空间索引序列进行有序查找处理,得到目标空间索引,以
在所述目标空间索引对应子存储空间的键索引序列中,查找键哈希与所述目标键哈希匹配的键索引;
其中,所述目标空间索引的标识键所表示的键范围包括所述目标键。
10.根据权利要求9所述的数据索引方法,其特征在于,所述根据所述查找出的键索引中的数据地址,确定对应的键值对数据,包括:
确定所述查找出的键索引中的相对数据地址,并确定所述查找出的键索引所在子存储空间的标识数据地址;
对所述相对数据地址和所述标识数据地址进行求和处理,并根据求和处理得到的数据地址,确定用于响应所述查询请求的键值对数据。
11.根据权利要求8至10任一项所述的数据索引方法,其特征在于,还包括:
将所述查找出的键索引对应的键值对数据中的键,确定为对比键;
当所述对比键与所述目标键相同时,根据所述查找出的键索引对应的键值对数据,响应所述查询请求。
12.根据权利要求8至10任一项所述的数据索引方法,其特征在于,还包括:
确定所述查找出的键索引中的值容量;
根据所述值容量,加载所述查找出的键索引对应的键值对数据中的值,以响应所述查询请求。
13.一种数据索引装置,其特征在于,包括:
第一哈希处理模块,用于对键值对数据中的键进行哈希处理,得到键哈希;
地址确定模块,用于确定所述键值对数据在存储空间中的数据地址;
建立模块,用于根据所述键哈希及所述数据地址,建立所述键值对数据对应的键索引;
其中,所述键索引用于响应对所述键值对数据的查询请求。
14.一种数据索引装置,其特征在于,包括:
接收模块,用于接收包括目标键的查询请求;
第二哈希处理模块,用于对所述目标键进行哈希处理,得到目标键哈希;
查找模块,用于查找键哈希与所述目标键哈希匹配的键索引,并
根据所述查找出的键索引中的数据地址,确定对应的键值对数据,以响应所述查询请求。
15.一种电子设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至7任一项所述的数据索引方法,或权利要求8至12任一项所述的数据索引方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010073516.4A CN113157689A (zh) | 2020-01-22 | 2020-01-22 | 数据索引方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010073516.4A CN113157689A (zh) | 2020-01-22 | 2020-01-22 | 数据索引方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113157689A true CN113157689A (zh) | 2021-07-23 |
Family
ID=76881760
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010073516.4A Pending CN113157689A (zh) | 2020-01-22 | 2020-01-22 | 数据索引方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113157689A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113821171A (zh) * | 2021-09-01 | 2021-12-21 | 浪潮云信息技术股份公司 | 一种基于哈希表与lsm树的键值存储方法 |
CN113961514A (zh) * | 2021-12-20 | 2022-01-21 | 支付宝(杭州)信息技术有限公司 | 数据查询方法及装置 |
CN114416651A (zh) * | 2022-03-30 | 2022-04-29 | 支付宝(杭州)信息技术有限公司 | 数据存储方法及装置、数据查找方法及装置 |
CN115061637A (zh) * | 2022-07-12 | 2022-09-16 | 平安科技(深圳)有限公司 | 磁盘数据索引方法、装置、计算机设备及存储介质 |
WO2023160115A1 (zh) * | 2022-02-28 | 2023-08-31 | 华为技术有限公司 | 键值对检索方法、装置及存储介质 |
-
2020
- 2020-01-22 CN CN202010073516.4A patent/CN113157689A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113821171A (zh) * | 2021-09-01 | 2021-12-21 | 浪潮云信息技术股份公司 | 一种基于哈希表与lsm树的键值存储方法 |
CN113821171B (zh) * | 2021-09-01 | 2024-06-11 | 上海沄熹科技有限公司 | 一种基于哈希表与lsm树的键值存储方法 |
CN113961514A (zh) * | 2021-12-20 | 2022-01-21 | 支付宝(杭州)信息技术有限公司 | 数据查询方法及装置 |
WO2023160115A1 (zh) * | 2022-02-28 | 2023-08-31 | 华为技术有限公司 | 键值对检索方法、装置及存储介质 |
CN114416651A (zh) * | 2022-03-30 | 2022-04-29 | 支付宝(杭州)信息技术有限公司 | 数据存储方法及装置、数据查找方法及装置 |
CN115061637A (zh) * | 2022-07-12 | 2022-09-16 | 平安科技(深圳)有限公司 | 磁盘数据索引方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113157689A (zh) | 数据索引方法、装置及电子设备 | |
US10579683B2 (en) | Memory system including key-value store | |
JP6362316B2 (ja) | バッファ・プールをメモリ常駐型データのための常在インメモリ・ストレージとして用いた、ハイブリッド・テーブル実装のための方法、システム、およびコンピュータ・プログラム製品 | |
CN111221776B (zh) | 面向非易失性内存的文件系统的实现方法、系统及介质 | |
US9043293B2 (en) | Table boundary detection in data blocks for compression | |
US20180113767A1 (en) | Systems and methods for data backup using data binning and deduplication | |
O'Neil et al. | Bitmap index design choices and their performance implications | |
KR20080063466A (ko) | 플래시 메모리 관리 | |
US11809427B2 (en) | Storing nested complex data structures in a data store | |
CN115964002B (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
JP6258436B2 (ja) | メモリシステムのローカルコントローラ | |
JP5646775B2 (ja) | key−valueストア方式を有するメモリシステム | |
US20240220470A1 (en) | Data storage device and storage control method based on log-structured merge tree | |
CN117215485A (zh) | Zns ssd管理方法及数据写入方法、存储装置、控制器 | |
CN111522820A (zh) | 数据存储结构、存储检索方法、系统、设备及存储介质 | |
JP5833212B2 (ja) | key−valueストア方式を有するメモリシステム | |
CN116595059A (zh) | 数据排序方法、装置、电子设备及存储介质 | |
CN113342819B (zh) | 一种卡号生成方法、装置、设备及存储介质 | |
CN112328630B (zh) | 数据查询方法、装置、设备及存储介质 | |
JP6034467B2 (ja) | システム | |
US20160292168A1 (en) | File retention | |
KR20220099745A (ko) | 지리공간 블록체인 데이터 검색을 위한 공간 분할 기반의 트리 인덱싱 및 질의어 처리 방법 및 장치 | |
US11914587B2 (en) | Systems and methods for key-based indexing in storage devices | |
Pagh | Basic external memory data structures | |
CN115827573B (zh) | 基于Linux的key-value形数据存储和使用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40048709 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |