CN111881317A - 基于键值***的数据存储方法、装置、电子设备及介质 - Google Patents
基于键值***的数据存储方法、装置、电子设备及介质 Download PDFInfo
- Publication number
- CN111881317A CN111881317A CN202010757251.XA CN202010757251A CN111881317A CN 111881317 A CN111881317 A CN 111881317A CN 202010757251 A CN202010757251 A CN 202010757251A CN 111881317 A CN111881317 A CN 111881317A
- Authority
- CN
- China
- Prior art keywords
- data
- storage block
- key
- index information
- memory
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000013500 data storage Methods 0.000 title claims abstract description 33
- 238000012545 processing Methods 0.000 claims abstract description 20
- 230000002085 persistent effect Effects 0.000 claims abstract description 15
- 230000002159 abnormal effect Effects 0.000 claims description 6
- 230000009467 reduction Effects 0.000 abstract description 5
- 230000007547 defect Effects 0.000 abstract description 3
- 238000005516 engineering process Methods 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 9
- 238000011084 recovery Methods 0.000 description 9
- 238000012423 maintenance Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 206010027339 Menstruation irregular Diseases 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
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/70—Information retrieval; Database structures therefor; File system structures therefor of video data
- G06F16/71—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/70—Information retrieval; Database structures therefor; File system structures therefor of video data
- G06F16/73—Querying
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开是关于基于键值***的数据存储方法、装置、电子设备及介质,其中,用于存储键值对数据的持久化索引空间划分为多个存储块,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址,该方法包括:获取待存储索引信息;对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块;当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块;将所述待存储索引信息存储到所述候选存储块中。根据本公开提供的数据存储方法,解决了相关技术中存在的无论扩容和缩容都需要维护两张目录表的缺点。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种基于键值***的数据存储方法、装置、电子设备及介质。
背景技术
随着互联网技术的快速发展,对于数据存储***的要求愈来愈高。以推荐业务为例,由于推荐业务的快速发展,导致推荐***面临着多方面的挑战,包括以下几方面:随着用户量和模型复杂度的快速发展,对推荐***的吞吐量和时延造成了巨大挑战;用户上传的视频数据也日益增多,推荐***的索引量也迅速达到了亿规模的级别,如何快速的对视频进行检索也是一个巨大挑战;在如此庞大使用量下,如何提高存储***的可靠性也是至关重要的。
相关技术中的索引空间结构采用两层式可扩展哈希的设计,其存在无论扩容和缩容都需要维护两张目录表的缺点。
发明内容
本公开提供基于键值***的数据存储方法、装置、电子设备及介质,以至少解决相关技术中无论扩容和缩容都需要维护两张目录表的缺点,实现了无论存储块内需要存储的内容如何增多和减少都不需要维护两跳的存储表。本公开的技术方案如下:
根据本公开实施例的第一方面,提供一种基于键值***的数据存储方法,持久化索引空间划分为多个存储块,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址,所述方法包括:
获取待存储索引信息;
对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块;
当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块;
将所述待存储索引信息存储到所述候选存储块中。
在一种可能的实施例中,经指定运算处理后取值相同的键数据为同一类键数据;所述对应关系用于将同一类键数据分配到同一候选存储块,将不同类键数据分配到不同候选存储块。
在一种可能的实施例中,所述预先建立的键数据与候选存储块的对应关系,包括:
根据以下公式得到步长值:
f(key)=FingerPrint(hash(key))*C1+C2
其中,C1、C2表示常数值,hash(key)表示所述键数据的哈希值,FingerPrint表示所述键数据的哈希值的指纹,f(key)表示所述步长值;
根据以下公式确定所述待存储索引信息的候选存储块:
Bi=f(key)+Ai
其中,Bi表示所述待存储索引信息的候选存储块的标识;Ai表示所述待存储索引信息对应的存储块的标识。
在一种可能的实施例中,所述将所述待存储索引信息存储到所述候选存储块中之后,所述方法还包括:
查询数据时,确定待查询数据的键数据的取模值对应的存储块;
若在所述存储块中未查询到所述待查询数据,并检测到所述存储块的计数器的计数值大于指定值时,根据所述对应关系,确定所述待查询数据的键数据的候选存储块;
从所述候选存储块中查询所述待查询数据。
在一种可能的实施例中,预先存储有内存字典,所述内存字典中维护有空闲的内存容量和内存地址之间的对应关系;
所述获取待存储索引信息之前,所述方法还包括:
确定所述值数据所需的内存容量;
从所述内存字典中查找所述内存容量对应的空闲内存地址;
将从所述内存字典中查找到的空闲内存地址分配给所述值数据作为所述值数据的内存地址。
在一种可能的实施例中,所述方法还包括:
根据以下方法维护所述内存字典:
当任一内存块被释放后,将所述内存块的内存容量及其对应的内存地址添加到所述内存字典中;以及,
当所述内存字典中的任一内存地址被占用之后,将所述内存地址从所述内存字典中移出。
在一种可能的实施例中,各所述存储块中还存储有指定信息,所述指定信息包括以下信息中的至少一种:所述键值对数据的指纹信息、属于所述存储块的索引信息的数量、属于所述存储块但存储在其他存储块中的索引信息的数量;
所述方法还包括:
响应于***发生异常退出事件,将所有待更新索引信息更新至对应的存储块之后,执行重启操作;
重启后,根据所述存储块中的索引信息重新确定所述指定信息;
对比所述存储块中存储的指定信息与所述重新确定的指定信息是否一致;
若所述指定信息中存在至少一种信息不一致,则根据所述重新确定的指定信息更新不一致的所述至少一种信息。
在一种可能的实施例中,所述方法还包括:
重启时扫描所述内存字典,将所述内存字典中的每个内存地址与所述索引空间的存储块中的内存地址进行比对;
若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块;
或者,
不定期的从所内存字典中获取一条未比对的内存地址;
将所述内存地址与所述索引空间的存储块中的内存地址进行对比;
若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块。
根据本公开实施例的第二方面,提供一种基于键值***的数据存储装置,持久化索引空间划分为多个存储块,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址,所述装置包括:
获取模块,被配置为执行获取待存储索引信息;
第一确定模块,被配置为执行对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块;
第二确定模块,被配置为执行当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块;
存储模块,被配置为执行将所述待存储索引信息存储到所述候选存储块中。
在一种可能的实施例中,经指定运算处理后取值相同的键数据为同一类键数据;所述对应关系用于将同一类键数据分配到同一候选存储块,将不同类键数据分配到不同候选存储块。
在一种可能的实施例中,所述第二确定模块,被配置为执行预先建立的键数据与候选存储块的对应关系时,具体执行:
根据以下公式得到步长值:
f(key)=FingerPrint(hash(key))*C1+C2
其中,C1、C2表示常数值,hash(key)表示所述键数据的哈希值,FingerPrint表示所述键数据的哈希值的指纹,f(key)表示所述步长值;
根据以下公式确定所述待存储索引信息的候选存储块:
Bi=f(key)+Ai
其中,Bi表示所述待存储索引信息的候选存储块的标识;Ai表示所述待存储索引信息对应的存储块的标识。
在一种可能的实施例中,所述装置还包括:
第三确定模块,被配置为将所述待存储索引信息存储到所述候选存储块中之后,执行查询数据时,确定待查询数据的键数据的取模值对应的存储块;
第四确定模块,被配置为将所述待存储索引信息存储到所述候选存储块中之后,执行若在所述存储块中未查询到所述待查询数据,并检测到所述存储块的计数器的计数值大于指定值时,根据所述对应关系,确定所述待查询数据的键数据的候选存储块;
查询模块,被配置为将所述待存储索引信息存储到所述候选存储块中之后,执行从所述候选存储块中查询所述待查询数据。
在一种可能的实施例中,预先存储有内存字典,所述内存字典中维护有空闲的内存容量和内存地址之间的对应关系;所述装置还包括:
第五确定模块,被配置为所述获取待存储索引信息之前,执行确定所述值数据所需的内存容量;
查找模块,被配置为所述获取待存储索引信息之前,执行从所述内存字典中查找所述内存容量对应的空闲内存地址;
分配模块,被配置为所述获取待存储索引信息之前,执行将从所述内存字典中查找到的空闲内存地址分配给所述值数据作为所述值数据的内存地址。
在一种可能的实施例中,所述装置还包括:
维护模块,被配置为执行根据以下方法维护所述内存字典:
当任一内存块被释放后,将所述内存块的内存容量及其对应的内存地址添加到所述内存字典中;以及,
当所述内存字典中的任一内存地址被占用之后,将所述内存地址从所述内存字典中移出。
在一种可能的实施例中,各所述存储块中还存储有指定信息,所述指定信息包括以下信息中的至少一种:所述键值对数据的指纹信息、属于所述存储块的索引信息的数量、属于所述存储块但存储在其他存储块中的索引信息的数量;
所述装置还包括:
变更模块,被配置为执行响应于***发生异常退出事件,将所有待更新索引信息更新至对应的存储块之后,执行重启操作;
重新确定模块,被配置为执行重启后,根据所述存储块中的索引信息重新确定所述指定信息;
对比模块,被配置为执行对比所述存储块中存储的指定信息与所述重新确定的指定信息是否一致;
更新模块,被配置为执行若所述指定信息中存在至少一种信息不一致,则根据所述重新确定的指定信息更新不一致的所述至少一种信息。
在一种可能的实施例中,所述装置还包括:
扫描模块,被配置为执行重启时扫描所述内存字典,将所述内存字典中的每个内存地址与所述索引空间的存储块中的内存地址进行比对;
回收模块,被配置为执行若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块;
或者,
不定期的从所内存字典中获取一条未比对的内存地址;
将所述内存地址与所述索引空间的存储块中的内存地址进行对比;
若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块。
根据本公开实施例的第三方面,提供一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现本公开实施例第一方面中任一项所述的基于键值***的数据存储方法。
根据本公开实施例的第四方面,提供一种非易失性可读存储介质,当所述存储介质中的指令由基于键值***的数据存储装置的处理器执行时,使得基于键值***的数据存储装置能够执行本公开实施例第一方面中任一项所述的基于键值***的数据存储方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,当所述计算机程序产品在电子设备上运行时,使得所述电子设备执行实现本公开实施例上述第一方面以及第一方面任一可能涉及的方法。
本公开的实施例提供的技术方案至少带来以下有益效果:首先,采用本公开提供的方法的持久化索引空间划分为多个存储块,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址;其次,实施时,获取待存储索引信息;对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块;当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块;将所述待存储索引信息存储到所述候选存储块中。通过本公开提供的方法进行数据存储,使得数据在进行存储和读取时只需要对键数据进行取模即可直接确定对应的存储块,存储块内部为了实现扩容,基于键数据与候选存储块的对应关系即可方便的确定对应的候选存储块,由此不需要因为扩容和缩容维护两张表,执行两跳查表操作能够实现大量的索引数据的存储和读取,故此,本公开提供的方法在数据存取方面更加方便快捷,并且存在持久性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的基于键值***的数据存储方法的流程图;
图2是根据一示例性实施例示出的一种持久化索引空间的示意图;
图3是根据一示例性实施例示出的一种值数据的内存地址分配的示意图;
图4是根据一示例性实施例示出的一种基于键值***的数据存储装置的结构示意图。
图5是根据一示例性实施例示出的一种电子设备的示意图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本公开实施例描述的应用场景是为了更加清楚的说明本公开实施例的技术方案,并不构成对于本公开实施例提供的技术方案的限定,本领域普通技术人员可知,随着新应用场景的出现,本公开实施例提供的技术方案对于类似的技术问题,同样适用。其中,在本公开的描述中,除非另有说明,“多个”的含义。
本公开的技术方案可以应用于任何用于数据存储的***中,例如,一种可能的应用场景为通过推荐***实现用户视频的存储和推荐,由于用户数据量的庞大,相关技术中采用的数据存储***采用的有两层式的可扩展哈希的设计,其存在无论扩容和缩容都需要维护两张目录表的缺点。
有鉴于此,为了简化索引空间的存储和查询的过程,本公开实施例提供一种基于键值***的数据存储方法。
一种可能的场景下,例如推荐***包括存储***和客户端,其中存储***由服务端和数据库构成,在进行数据存储时,如用户通过客户端进行短视频的上传是,基于用户的短视频上传操作及信息,构建该用户本次短视频上传事件对应的键值对数据,首先为键值对数据中的值数据分配内存空间,从而根据键数据和值数据的内存地址生成待存储索引信息;其次对待存储信息存储到存储块中,若其对应的存储块的剩余存储空间不足时,则确定候选存储块进行存储。此外,在根据本公开提供的数据存储方法进行存储后,在读取时,不仅在键数据确定的存储块中检索,还需要在根据对应关系确定的候选存储块中进行查询。
图1是根据一示例性实施例示出的一种基于键值***的数据存储方法的流程图,如图1所示,包括以下步骤。
步骤S101:获取待存储索引信息。
实施时,由于索引信息包括键数据和值数据的内存地址,因此在进行键值对数据的索引信息的存储之前,需要确定值数据的内存地址。
参阅图2,为本公开一示例性实施例提供的一种值数据的内存地址分配的示意图,确定值数据的内存地址的一种可能的实施方式为,通过对位图(Bitmap)的遍历,确定其中空闲内存地址,其中当位图中“0”表示为空闲内存地址,“1”表示为已分配内存地址,并且按8个字节为单位进行数据的存储;例如假设值数据需要的存储容量为32,则其需要4个单位的内存地址存储值数据以及1个单位的内存地址用来存储该值数据的存储容量的大小,则需要从Bitmap中遍历出5个连续0的内存地址用于存储该值数据,其中第一个0对应的内存地址用于存储标识该数据为多大的内存容量,即存储“32”的标识,第二个到第五个0对应的内存地址存储该值数据。
结合该图2说明本公开提供的确定值数据的内存地址的另一种实施方式为:通过预先存储有内存字典,其中内存字典中维护有空闲的内存容量和内存地址之间的对应关系,即包括各个空闲的内存容量,以及各空闲的内存容量对应的内存地址的对应关系。例如,假设图2中的存储容量为32的内存容量的内存地址被释放,则将该内存地址存储到内存字典中存储容量为32的空闲内存地址。通过预先存储有内存字典,可以实现对于值数据的内存地址的快速分配,从而提高数据存储的速度减少处理时间。
需要说明的是,若在内存地址中未查找到值数据需要的内存容量对应的空闲地址,则可继续通过前一种实施方式,即通过对Bitmap进行遍历实现对于值数据的内存地址的分配。
上述实施方式中,根据以下方法维护所述内存字典:内存字典中的内存地址增加的实施方式为,当任一内存块被释放后,将所述内存块的内存容量及其对应的内存地址添加到所述内存字典中;即,实施时当有内存地址被释放时,确定被释放的内存地址占用的内存容量,并将该内存地址存储到内存字典中,以便于后续进分配空闲内存地址时,则直接从该内存字典中获取到该内存地址,而无需再对全部内存地址的Bitmap进行遍历操作,从而实现了对于值数据的内存地址的快速分配。内存字典中的内存地址移出的实施方式为,当所述内存字典中的任一内存地址被占用之后,即该内存地址被分配为值数据的内存地址之后,将所述内存地址从所述内存字典中移出。
在确定内存字典之后,根据值数据所需的内存容量;从所述内存字典中查找所述内存容量对应的空闲内存地址;将从所述内存字典中查找到的空闲内存地址分配给所述值数据作为所述值数据的内存地址。然后,将该内存地址从该内存字典中移出。
在确定值数据的内存地址后,则继续确定将该待存储索引信息在持久化索引空间的存储位置,从而将根据键数据和确定的值数据的内存地址作为待存储索引信息存储到索引空间中。
步骤S102:对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块。
其中,持久化索引空间划分为多个存储块,也可称Chunk,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址。参阅图3,为本公开一示例性实施例提供的一种索引空间的结构示意图,例如索引空间划分为存储块1、存储块2……存储块n,可选的,各存储块的大小可以为等分的,即各存储块的大小相同。
上述实施方式中,持久化索引空间可选的通过NVM(非易失性内存,Non-volatileMemory)实现,其具有DARM(Dynamic Random Access Memory,动态随机存取存储器)级别的延迟和带宽,并且具有持久化的特征。
步骤S103:当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块。
需要说明的是,经指定运算处理后取值相同的键数据为同一类键数据;所述对应关系用于将同一类键数据分配到同一候选存储块,将不同类键数据分配到不同候选存储块。其中,指定运算处理,可选的为对键数据的哈希值进行取模处理后相同的为同一类键数据,例如一般情况下存储块2中各键数据的哈希取模值为相同值。
由于各存储块的存储空间为有限的,当存储块中的可用的索引空间不足时,则确定键值对数据的索引信息可存储的候选存储块,即索引空间中其他存储空间充足的存储块来存储待存储索引信息。由于本公开采用的NVM具有键值负载基本恒定的特点,因此为了使得每个采用NVM的设备的内存空间得到最大的利用度,通过本公开提供的当存储块的存储空间不足时,则将待存储索引信息存储到候选存储块中的实施方式,相对于相关技术中的可扩展哈希的多层设计方法来说,减少了目录多跳的读取操作,从而极大的提高了读取的速度。
在一种可能的实施方式中,所述预先建立的键数据与候选存储块的对应关系,包括:根据以下公式(1)得到步长值:
f(key)=FingerPrint(hash(key))*C1+C2 公式(1)
其中,C1、C2表示常数值,例如C1取值为2、C2取值为1;hash(key)表示计算的所述键数据的哈希值,FingerPrint表示根据所述键数据的哈希值计算得到的指纹,f(key)表示最后计算得到的所述步长值。
在根据公式1得到的步长值的基础上,根据以下公式(2)进一步确定所述待存储索引信息的候选存储块:
Bi=f(key)+Ai 公式(2)
其中,Bi表示所述待存储索引信息的候选存储块的标识;Ai表示所述待存储索引信息对应的存储块的标识。可以理解的是,首先根据键数据通过公式(1)的实施方式得到步长值,然后根据键数据确定的存储块和步长值通过公式(2)的实施方式得到候选存储块。例如,假设根据键数据初步确定的为存储块2,但存储块2的索引空间不足以存储待存储索引信息,则计算得到步长值为f(key),则根据公式(2)得到存储块2加上步长值f(key)后确定的候选存储块为存储4,那么将待存储索引信息存储到存储块4中。
需要说明的是,继续沿用上述例子,若存储块4中的存储空间也不足,则采用相同的方式在存储块4的基础上继续获取下一候选存储块。
步骤S104:将所述待存储索引信息存储到所述候选存储块中。
并且,为了便于记录该存储块中存储到候选存储块的键值对数据的索引信息的情况,从而便于在检索的时候可以在存储块和候选存储块中查找到,本公开提供的方法中,在初步确定的存储块中还维护有一个计数器,该计数器用于统计溢出的键值对数据的情况。
实施时,在检索数据时,确定待查询数据的键数据的取模值对应的存储块;若在所述存储块中未查询到所述待查询数据,并检测到所述存储块的计数器的计数值大于指定值时,根据所述对应关系,确定所述待查询数据的键数据的候选存储块;从所述候选存储块中查询所述待查询数据。例如,根据键数据确定存储块2,但在存储块2中未查询到该键值对数据,并且检测到存储块2中的计数器的数值大于0,则表明在存储时存在溢出的键值对数据,则根据存储时采用的预先建立的键数据与候选存储块的对应关系,确定候选存储块,从而继续在候选存储块中读取该键值对数据。
一种可能的实施方式中,例如根据对键数据进行取模处理,根据取模后的值确定本次接收的待存储索引信息的存储块,假设确定为存储块2,但此时存储块2的索引空间满了,或剩余的索引空间不足,无法再进行对于本次待存储索引信息的存储,则根据预先建立的键数据与候选存储块的对应关系,确定可存储的候选存储块,即进行索引信息的溢出处理。
此外,各存储块中存储的内容还包括:键值对数据的指纹信息,即如图3中的FP(FingerPrint);键值对数据的数据索引信息,即键数据和值数据的内存地址,通过值数据的内存地址可从内存中读取对应的值数据;计数器,也可称OverflowCount,用于表示因该存储块没有剩余存储空间而存储到候选存取块的键值对数据的情况,例如,若存在一次索引信息的溢出处理,则将该计数器的计数值进行加1,同理,若对于哈希溢出的索引信息有删除操作,则对应将该计数器的计数值进行减1操作。
在本公开采用的方法中,由于采用的是持久化索引空间,为了降低***崩溃时的一致性的操作,从而减轻***因崩溃导致的重启时间长的问题,其中各所述存储块中存储的一些指定信息在***崩溃时可不进行持久化来保持一致性,所述指定信息包括以下信息中的至少一种:所述键值对数据的指纹信息、属于所述存储块的索引信息的数量、属于所述存储块但存储在其他存储块中的索引信息的数量;其维护一致性的方式可通过重启后再进行维护,实施过程如下:
步骤A1:响应于***发生异常退出事件,将所有待更新索引信息更新至对应的存储块之后,执行重启操作。
例如,在发生***崩溃退出时,由于本公开采用的为NVM内存,因为可以不用小心地维护***的一致性,因此对于存储块中的键值对数据的指纹信息FingerPrint、属于所述存储块的索引信息的数量Size、属于所述存储块但存储在其他存储块中的索引信息的数量OverflowCount的值等可以通过重启后的计算得到的指定信息可以不维护一致性,从而可以无需崩溃恢复时进行持久化。
步骤A2:重启后,根据所述存储块中的索引信息重新确定所述指定信息。
步骤A3:对比所述存储块中存储的指定信息与所述重新确定的指定信息是否一致。
步骤A4:若所述指定信息中存在至少一种信息不一致,则根据所述重新确定的指定信息更新不一致的所述至少一种信息。
实施时,根据持久化索引空间中的各存储块中的索引信息的键数据重新计算得到FingerPrint、根据存储块中存储的索引信息的情况确定Size值、以及根据候选存储块中存储的该存储块的索引信息的数量确定该存储块的OverflowCount值等其他可以根据持久化的索引空间确定的信息。
在重启时,假设存储块中原存储的指定信息用tag来标识,而根据存储块中的索引信息计算得到的假设是指纹信息,则通过FingerPrint(key)函数表示,则存在以下三种可能的情况:
情况1:tag=0,表明根据FingerPrint(key)函数计算得到的存储块的指纹信息为0,则表示该存储块崩溃之前存储的索引信息已被删除。
情况2:tag=FingerPrint(key),则表示崩溃之前存储的指纹信息和重启后计算得到的指纹信息值的结果是相同的,则表明指纹信息与存储块中的信息具有一致性。
情况3:tag≠FingerPrint(key),则表示崩溃之前存储的指纹信息和重启后计算得到的指纹信息值的结果是不同的,则表明指纹信息与存储块中的信息不具有一致性,则根据存储块中计算得到的FingerPrint(key)值纠正存储块中记载的tag值。
其中,其他指定信息的处理与上述指纹信息的实施方式同理,在此不再赘述。
此外,本公开采用的方法实施时,可能对***崩溃时的一些键值对数据的分配了内存,但却没有成功的***到索引空间中;或者,由于使用了回收的机制,对于一些内存地址的回收指令还未执行完毕,即还没有来得及回收内存地址时产生了***异常事件,则会产生一些在野的内存块,即在索引空间中不存在键值对数据的索引信息指向该内存地址,但该内存地址并未被释放。因此,实施时,存在以下两种方式回收在野的内存块,如下:
方式一:重启时扫描所述内存字典,将所述内存字典中的每个内存地址与所述索引空间的存储块中的内存地址进行比对;若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块。
在一种可能的实施方式中,在对内存字典中的每个内存地址进行比对时,可选的,将在索引空间的存储块中的索引信息包含的内存地址设置为有效,而将不包含的内存地址设置为无效,并进行回收。
方式二:不定期的从所内存字典中获取一条未比对的内存地址;将所述内存地址与所述索引空间的存储块中的内存地址进行对比;若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块。
上述实施方式中,为了减少重启时的时间,重启后再采用一种懒惰回收的方式对在野的内存块进行检查,即在重启时不比对内存字典中的每个内存地址与所述索引空间的存储块中的内存地址,而是在重启后新建至少一个线程用于检查内存字典中的每个内存地址与所述索引空间的存储块中的内存地址之间的一致性关系,进而对在野的内存块进行回收。
为了使得采用本公开提供的方法的***的接口可以适配更多的功能,实施时,本公开还提供一种可用于进行自定义业务配置的接口,从而支持用户通过自定义函数实现自定义业务的配置。例如,实施时,将各值数据作为向量,通过自定义业务配置的接口实现对于值数据的需要的向量操作。
通过本公开提供的基于键值***的数据存储方法,通过采用直接通过取模处理定位到相应的存储块(相当于仅需要一跳的目录表),然后再在存储块内通过键数据与候选存储块的对应关系来实现扩容,无论存储块内需要存储的内容如何增多和减少都不需要维护两跳的存储表。此外,通过本公开提供的数据存储方法,使得索引空间中各存储块的存储空间可得到最大的利用度,避免了对于存储块本身的扩容、缩容。并且通过本申请中采用的通过取模处理直接定位到存储块的操作,在读取时可减少相关技术中对于检索数据的需要两跳的操作,从而在一些情况下提高了读取存储数据的速度。
实验评测结果
根据以下表1得到采用相关技术和本公开方法之间的冷启动时间和恢复事件的对比结果,来说明本公开采用的方法对于在***冷启动和***恢复时间长进行的提升,如下:
表1
其中,表1中通过DRAM(Dynamic Random Access Memory,动态随机存取存储器)和AEP(一种非易失性内存设备)这两种类型的硬件设备进行对比,通过表1中本公开与相关技术相比,对于冷启动时间和恢复时间都具有明显的提升。
基于相同的构思,图4是根据一示例性实施例示出的一种基于键值***的数据存储装置框图。持久化索引空间划分为多个存储块,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址,参照图4,所述装置包括:获取模块401、第一确定模块402、第二确定模块403及存储模块404。
获取模块401,被配置为执行获取待存储索引信息;
第一确定模块402,被配置为执行对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块;
第二确定模块403,被配置为执行当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块;
存储模块404,被配置为执行将所述待存储索引信息存储到所述候选存储块中。
在一种可能的实施例中,经指定运算处理后取值相同的键数据为同一类键数据;所述对应关系用于将同一类键数据分配到同一候选存储块,将不同类键数据分配到不同候选存储块。
在一种可能的实施例中,所述第二确定模块403,被配置为执行预先建立的键数据与候选存储块的对应关系时,具体执行:
根据以下公式得到步长值:
f(key)=FingerPrint(hash(key))*C1+C2
其中,C1、C2表示常数值,hash(key)表示所述键数据的哈希值,FingerPrint表示所述键数据的哈希值的指纹,f(key)表示所述步长值;
根据以下公式确定所述待存储索引信息的候选存储块:
Bi=f(key)+Ai
其中,Bi表示所述待存储索引信息的候选存储块的标识;Ai表示所述待存储索引信息对应的存储块的标识。
在一种可能的实施例中,所述装置还包括:
第三确定模块,被配置为将所述待存储索引信息存储到所述候选存储块中之后,执行查询数据时,确定待查询数据的键数据的取模值对应的存储块;
第四确定模块,被配置为将所述待存储索引信息存储到所述候选存储块中之后,执行若在所述存储块中未查询到所述待查询数据,并检测到所述存储块的计数器的计数值大于指定值时,根据所述对应关系,确定所述待查询数据的键数据的候选存储块;
查询模块,被配置为将所述待存储索引信息存储到所述候选存储块中之后,执行从所述候选存储块中查询所述待查询数据。
在一种可能的实施例中,预先存储有内存字典,所述内存字典中维护有空闲的内存容量和内存地址之间的对应关系;所述装置还包括:
第五确定模块,被配置为所述获取待存储索引信息之前,执行确定所述值数据所需的内存容量;
查找模块,被配置为所述获取待存储索引信息之前,执行从所述内存字典中查找所述内存容量对应的空闲内存地址;
分配模块,被配置为所述获取待存储索引信息之前,执行将从所述内存字典中查找到的空闲内存地址分配给所述值数据作为所述值数据的内存地址。
在一种可能的实施例中,所述装置还包括:
维护模块,被配置为执行根据以下方法维护所述内存字典:
当任一内存块被释放后,将所述内存块的内存容量及其对应的内存地址添加到所述内存字典中;以及,
当所述内存字典中的任一内存地址被占用之后,将所述内存地址从所述内存字典中移出。
在一种可能的实施例中,各所述存储块中还存储有指定信息,所述指定信息包括以下信息中的至少一种:所述键值对数据的指纹信息、属于所述存储块的索引信息的数量、属于所述存储块但存储在其他存储块中的索引信息的数量;
所述装置还包括:
变更模块,被配置为执行响应于***发生异常退出事件,将所有待更新索引信息更新至对应的存储块之后,执行重启操作;
重新确定模块,被配置为执行重启后,根据所述存储块中的索引信息重新确定所述指定信息;
对比模块,被配置为执行对比所述存储块中存储的指定信息与所述重新确定的指定信息是否一致;
更新模块,被配置为执行若所述指定信息中存在至少一种信息不一致,则根据所述重新确定的指定信息更新不一致的所述至少一种信息。
在一种可能的实施例中,所述装置还包括:
扫描模块,被配置为执行重启时扫描所述内存字典,将所述内存字典中的每个内存地址与所述索引空间的存储块中的内存地址进行比对;
回收模块,被配置为执行若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块;
或者,
不定期的从所内存字典中获取一条未比对的内存地址;
将所述内存地址与所述索引空间的存储块中的内存地址进行对比;
若任一内存地址包含在所述内存字典中但不包含在所述索引空间中,则回收所述内存地址的内存块。
关于上述实施例中的装置,其中各个单元执行请求的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图5是根据一示例性实施例示出的一种电子设备500的框图,该装置包括:
处理器510;
用于存储所述处理器510可执行指令的存储器520;
其中,所述处理器510被配置为执行所述指令,以实现本公开实施例中的基于键值***的数据存储方法。
在示例性实施例中,还提供了一种包括指令的存储介质,例如包括指令的存储器520,上述指令可由电子设备500的处理器510执行以完成上述方法。可选地,存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光基于键值***的数据存储设备等。
本公开实施例还提供一种计算机程序产品,当所述计算机程序产品在电子设备上运行时,使得所述电子设备执行实现本公开实施例上述任意一项基于键值***的数据存储方法或任意一项基于键值***的数据存储方法任一可能涉及的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种基于键值***的数据存储方法,其特征在于,持久化索引空间划分为多个存储块,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址,所述方法包括:
获取待存储索引信息;
对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块;
当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块;
将所述待存储索引信息存储到所述候选存储块中。
2.根据权利要求1所述的方法,其特征在于,经指定运算处理后取值相同的键数据为同一类键数据;所述对应关系用于将同一类键数据分配到同一候选存储块,将不同类键数据分配到不同候选存储块。
3.根据权利要求2所述的方法,其特征在于,所述预先建立的键数据与候选存储块的对应关系,包括:
根据以下公式得到步长值:
f(key)=FingerPrint(hash(key))*C1+C2
其中,C1、C2表示常数值,hash(key)表示所述键数据的哈希值,FingerPrint表示所述键数据的哈希值的指纹,f(key)表示所述步长值;
根据以下公式确定所述待存储索引信息的候选存储块:
Bi=f(key)+Ai
其中,Bi表示所述待存储索引信息的候选存储块的标识;Ai表示所述待存储索引信息对应的存储块的标识。
4.根据权利要求3所述的方法,其特征在于,所述将所述待存储索引信息存储到所述候选存储块中之后,所述方法还包括:
查询数据时,确定待查询数据的键数据的取模值对应的存储块;
若在所述存储块中未查询到所述待查询数据,并检测到所述存储块的计数器的计数值大于指定值时,根据所述对应关系,确定所述待查询数据的键数据的候选存储块;
从所述候选存储块中查询所述待查询数据。
5.根据权利要求1所述的方法,其特征在于,预先存储有内存字典,所述内存字典中维护有空闲的内存容量和内存地址之间的对应关系;
所述获取待存储索引信息之前,所述方法还包括:
确定所述值数据所需的内存容量;
从所述内存字典中查找所述内存容量对应的空闲内存地址;
将从所述内存字典中查找到的空闲内存地址分配给所述值数据作为所述值数据的内存地址。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
根据以下方法维护所述内存字典:
当任一内存块被释放后,将所述内存块的内存容量及其对应的内存地址添加到所述内存字典中;以及,
当所述内存字典中的任一内存地址被占用之后,将所述内存地址从所述内存字典中移出。
7.根据权利要求1所述的方法,其特征在于,各所述存储块中还存储有指定信息,所述指定信息包括以下信息中的至少一种:所述键值对数据的指纹信息、属于所述存储块的索引信息的数量、属于所述存储块但存储在其他存储块中的索引信息的数量;
所述方法还包括:
响应于***发生异常退出事件,将所有待更新索引信息更新至对应的存储块之后,执行重启操作;
重启后,根据所述存储块中的索引信息重新确定所述指定信息;
对比所述存储块中存储的指定信息与所述重新确定的指定信息是否一致;
若所述指定信息中存在至少一种信息不一致,则根据所述重新确定的指定信息更新不一致的所述至少一种信息。
8.一种基于键值***的数据存储装置,其特征在于,持久化索引空间划分为多个存储块,每个存储块用于存储键值对数据的索引信息,所述索引信息中包括键数据和值数据的内存地址,所述装置包括:
获取模块,被配置为执行获取待存储索引信息;
第一确定模块,被配置为执行对所述待存储索引信息的键数据进行取模处理后,确定所述待存储索引信息对应的存储块;
第二确定模块,被配置为执行当所述存储块的存储空间不足时,根据预先建立的键数据与候选存储块的对应关系,确定所述待存储索引信息的候选存储块;
存储模块,被配置为执行将所述待存储索引信息存储到所述候选存储块中。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至权利要求7中任一项所述的基于键值***的数据存储方法。
10.一种存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至权利要求7中任一项所述的基于键值***的数据存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010757251.XA CN111881317B (zh) | 2020-07-31 | 2020-07-31 | 基于键值***的数据存储方法、装置、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010757251.XA CN111881317B (zh) | 2020-07-31 | 2020-07-31 | 基于键值***的数据存储方法、装置、电子设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111881317A true CN111881317A (zh) | 2020-11-03 |
CN111881317B CN111881317B (zh) | 2021-08-20 |
Family
ID=73204692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010757251.XA Active CN111881317B (zh) | 2020-07-31 | 2020-07-31 | 基于键值***的数据存储方法、装置、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111881317B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101753445A (zh) * | 2009-12-23 | 2010-06-23 | 重庆邮电大学 | 基于关键字分解Hash算法的快速流分类方法 |
CN102402394A (zh) * | 2010-09-13 | 2012-04-04 | 腾讯科技(深圳)有限公司 | 一种基于哈希算法的数据存储方法及装置 |
CN102968498A (zh) * | 2012-12-05 | 2013-03-13 | 华为技术有限公司 | 数据处理方法及装置 |
CN104468665A (zh) * | 2013-09-18 | 2015-03-25 | 腾讯科技(深圳)有限公司 | 数据分布式存储的实现方法和*** |
CN105426131A (zh) * | 2015-12-03 | 2016-03-23 | 成都华为技术有限公司 | 一种kv存储实现方法和装置 |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN110399104A (zh) * | 2019-07-23 | 2019-11-01 | 网易(杭州)网络有限公司 | 数据存储方法、数据存储装置、电子设备、存储介质 |
CN111090628A (zh) * | 2019-12-20 | 2020-05-01 | 上海米哈游网络科技股份有限公司 | 一种数据处理方法、装置、存储介质及电子设备 |
CN111177143A (zh) * | 2019-06-12 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 键值数据存储方法、装置、存储介质与电子设备 |
CN111241108A (zh) * | 2020-01-16 | 2020-06-05 | 北京百度网讯科技有限公司 | 基于键值对kv***的索引方法、装置、电子设备和介质 |
-
2020
- 2020-07-31 CN CN202010757251.XA patent/CN111881317B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101753445A (zh) * | 2009-12-23 | 2010-06-23 | 重庆邮电大学 | 基于关键字分解Hash算法的快速流分类方法 |
CN102402394A (zh) * | 2010-09-13 | 2012-04-04 | 腾讯科技(深圳)有限公司 | 一种基于哈希算法的数据存储方法及装置 |
CN102968498A (zh) * | 2012-12-05 | 2013-03-13 | 华为技术有限公司 | 数据处理方法及装置 |
CN104468665A (zh) * | 2013-09-18 | 2015-03-25 | 腾讯科技(深圳)有限公司 | 数据分布式存储的实现方法和*** |
CN105426131A (zh) * | 2015-12-03 | 2016-03-23 | 成都华为技术有限公司 | 一种kv存储实现方法和装置 |
CN106202548A (zh) * | 2016-07-25 | 2016-12-07 | 网易(杭州)网络有限公司 | 数据存储方法、查找方法及装置 |
CN111177143A (zh) * | 2019-06-12 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 键值数据存储方法、装置、存储介质与电子设备 |
CN110399104A (zh) * | 2019-07-23 | 2019-11-01 | 网易(杭州)网络有限公司 | 数据存储方法、数据存储装置、电子设备、存储介质 |
CN111090628A (zh) * | 2019-12-20 | 2020-05-01 | 上海米哈游网络科技股份有限公司 | 一种数据处理方法、装置、存储介质及电子设备 |
CN111241108A (zh) * | 2020-01-16 | 2020-06-05 | 北京百度网讯科技有限公司 | 基于键值对kv***的索引方法、装置、电子设备和介质 |
Non-Patent Citations (1)
Title |
---|
小小白学计算机: "《https://blog.csdn.net/weixin_44827418/article/details/106231309》", 20 May 2020 * |
Also Published As
Publication number | Publication date |
---|---|
CN111881317B (zh) | 2021-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11269902B2 (en) | Time series data management method, device, and apparatus | |
US9952783B2 (en) | Data processing method and apparatus, and shared storage device | |
CN107491523B (zh) | 存储数据对象的方法及装置 | |
CN113849339B (zh) | 恢复应用程序的运行状态的方法、装置及存储介质 | |
CN106446044B (zh) | 存储空间回收方法及装置 | |
US9262511B2 (en) | System and method for indexing streams containing unstructured text data | |
US20170124104A1 (en) | Durable file system for sequentially written zoned storage | |
US20170123928A1 (en) | Storage space reclamation for zoned storage | |
CN113407550A (zh) | 数据存储及查询方法、装置及数据库*** | |
CN110888837B (zh) | 对象存储小文件归并方法及装置 | |
US8909677B1 (en) | Providing a distributed balanced tree across plural servers | |
CN110784498A (zh) | 一种个性化数据容灾方法及装置 | |
CN113867627A (zh) | 一种存储***性能优化方法及*** | |
CN114610708A (zh) | 一种向量数据处理方法及装置、电子设备及存储介质 | |
CN114610680A (zh) | 分布式文件***元数据管理方法、装置、设备及存储介质 | |
CN107133334B (zh) | 基于高带宽存储***的数据同步方法 | |
US10664349B2 (en) | Method and device for file storage | |
CN111881317B (zh) | 基于键值***的数据存储方法、装置、电子设备及介质 | |
CN112463795A (zh) | 一种动态哈希方法、装置、设备及存储介质 | |
CN115756838A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN114416676A (zh) | 数据处理方法、装置、设备和存储介质 | |
CN114168588A (zh) | 一种向量数据库存储与检索方法 | |
CN113495807A (zh) | 数据备份方法、数据恢复方法及装置 | |
CN114020707B (zh) | 存储空间回收方法、存储介质及程序产品 | |
US10795875B2 (en) | Data storing method using multi-version based data structure |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |