CN116701386A - 键值对检索方法、装置及存储介质 - Google Patents

键值对检索方法、装置及存储介质 Download PDF

Info

Publication number
CN116701386A
CN116701386A CN202210188396.1A CN202210188396A CN116701386A CN 116701386 A CN116701386 A CN 116701386A CN 202210188396 A CN202210188396 A CN 202210188396A CN 116701386 A CN116701386 A CN 116701386A
Authority
CN
China
Prior art keywords
value
target
bit
byte
mutation
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
Application number
CN202210188396.1A
Other languages
English (en)
Inventor
徐云
王鹏程
陈飞
闫龙
韩磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Science and Technology of China USTC
Huawei Technologies Co Ltd
Original Assignee
University of Science and Technology of China USTC
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by University of Science and Technology of China USTC, Huawei Technologies Co Ltd filed Critical University of Science and Technology of China USTC
Priority to CN202210188396.1A priority Critical patent/CN116701386A/zh
Priority to PCT/CN2022/137906 priority patent/WO2023160115A1/zh
Publication of CN116701386A publication Critical patent/CN116701386A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例公开了一种键值对检索方法、装置及存储介质。在本申请实施例中,将键划分为多个键字段,之后,基于在前的第一键字段从BT中确定对应的第一比特位,之后,基于在后的第二键字段从该第一比特位对应的多个BB中确定目标BB。这样,对于具有相同的第一键字段的键,均能够通过BT定位到相同的多个BB,也即,本申请实施例对键的共有部分的索引进行了整合,从而降低了索引的空间占比。

Description

键值对检索方法、装置及存储介质
技术领域
本申请涉及通信领域,特别涉及一种键值对检索方法、装置及存储介质。
背景技术
随着网络技术、社交媒体、物联网设备的不断发展,产生了海量的数据。这些数据可以通过键值存储系统来进行存储和管理。在键值存储系统中,数据的组织方式表现为键值对。其中,一个键值对中的值可以为具有任意类型、结构和大小的数据,值对应的键用于唯一标识该值。在键值存储系统中,数据的检索性能主要依赖于高效的索引技术,然而,目前诸如vEB索引、前缀树索引、全文本索引等索引技术,均存在索引的存储空间占比过高的问题。
发明内容
本申请实施例提供了一种键值对检索方法、装置、设备、存储介质以及程序产品,可以降低键值存储系统中索引的存储空间占比。所述技术方案如下:
第一方面,提供了一种键值对检索方法,所述方法包括:获取处理请求,所述处理请求包括目标键和所述目标键对应的目标值的下标索引值,所述目标键包括第一键字段和第二键字段,所述第一键字段位于所述第二键字段之前;基于所述第一键字段,从顶层位图(bitmap top,BT)中获取所述第一键字段对应的第一比特位上的比特值;在所述第一比特位上的比特值为第一数值的情况下,基于所述第二键字段,在所述第一比特位对应的多个底层位图(bitmap bottom,BB)中确定所述目标键对应的目标BB,每个BB用于存储多个值;基于所述下标索引值,在所述目标BB中进行值操作。
在本申请实施例中,将键划分为多个键字段,之后,基于在前的第一键字段从BT中确定对应的第一比特位,之后,基于在后的第二键字段从该第一比特位对应的多个BB中确定目标BB。这样,对于具有相同的第一键字段的键,均能够通过BT定位到相同的多个BB,也即,本申请实施例对键的共有部分的索引进行了整合,从而降低了索引的空间占比。
可选地,基于所述第二键字段,在所述第一比特位对应的底层位图BB中确定所述目标键对应的目标BB的实现过程可以为:获取所述第一比特位对应的第一哈希表;基于所述第二键字段和所述第一哈希表,在所述多个BB中确定所述目标BB。
其中,在一种可能的情况中,第一哈希表的每个表项中存储有一个BB的指示信息,基于此,根据第二键字段确定出第一哈希表中对应的表项,从确定出的表项中获取目标BB的指示信息,进而根据获取到的目标BB的指示信息在多个BB中确定目标BB。
在另一种可能的情况中,所述第二键字段包括第一子字段和第二子字段,所述基于所述第二键字段和所述第一哈希表,在所述多个BB中确定所述目标BB的实现过程为:基于所述第一子字段和所述第一哈希表,确定所述目标键对应的目标中层位图BM,所述目标BM中存储有第二哈希表的指示信息;基于所述第二哈希表的指示信息,获取所述第二哈希表,所述第二哈希表中存储有所述多个BB的指示信息;基于所述第二子字段和所述第二哈希表,确定所述目标BB。
在该种情况中,BT对应的第一哈希表中的每个表项中存储有一个BM的指示信息。每个BM中存储有相应BM对应的中层哈希表的指示信息,每个中层哈希表的表项中存储有一个BB的指示信息。基于此,在确定出目标BM之后,基于目标BM中的哈希表的指示信息确定该目标BM对应的中层哈希表,也即第二哈希表。之后,基于第二子字段在第二哈希表中确定对应的表项,基于确定出的表项中的BB的指示信息确定目标BB。
由此可见,在本申请中,还可以再对第二键字段进行进一步的划分,进而基于在前的第一子字段和第一哈希表检索对应的BM,从而获得该BM中的第二哈希表。这样,对于同样包含有第一键字段和第一子字段的前缀的键,这些键所对应的BB将能够通过一个哈希表(也即第二哈希表)来检索得到,降低了哈希表的数据规模,提升了哈希表的操作效率。并且,通过BT和BM,能够对键的更多共有部分的索引进行整合,进一步降低索引的空间占比。
可选地,所述目标BB存储有参考值和值压缩表,所述值压缩表用于存储其他值与所述参考值之间的差异信息。
在本申请中,在BB中可以通过存储参考值、其他值与参考值之间的差异信息来存储多个值,这样,可以减少多个值中的冗余字段的存储,从而能够降低值的存储空间占用,提高值压缩率。
在通过值压缩表存储多个值时,在一种可能的情况中,所述值压缩表包括多个单差异表项,一个单差异表项用于存储一项所述差异信息,所述差异信息包括突变位置、突变字节和对应的位向量,所述突变位置用于指示所述其他值相较于所述参考值发生变化的字节的位置,所述突变字节为所述其他值相较于所述参考值发生变化的字节,所述位向量包括多个比特位,一个比特位与一个值对应,且所述多个比特位中所述其他值对应的比特位上的比特值为第二数值。
在另一种可能的情况中,所述值压缩表还包括至少一个聚合差异表项,其中,一个聚合差异表项通过对包括有相同的第一突变位置、不同的突变字节的多个单差异表项聚合得到,且所述聚合差异表项包括聚合标识、所述第一突变位置以及字节存放字段,所述字节存放字段中按照位向量中的各个比特位所对应的值的顺序,依次存储有各个值中位于所述第一突变位置上的字节。也即,在本申请中,对多个包括有相同的突变位置、不同的突变字节的单差异表项可以进行聚合,从而得到一个聚合差异表项,以此来减少表项的存储开销。
可选地,前述获取到的处理请求可以为数据插入请求,所述数据插入请求还包括所述目标值,在此基础上,所述基于所述下标索引值,在所述目标BB中进行值操作的实现过程可以为:将所述目标值的各个字节与所述参考值中对应的字节进行比较,得到所述目标值的突变位置和突变字节;基于所述下标索引值、所述目标值的突变位置和突变字节,在所述值压缩表中插入所述目标值与所述参考值之间的差异信息。
其中,在一种可能的实现方式中,在所述值压缩表包括第一单差异表项的情况下,将所述第一单差异表项中的位向量中第n个比特位的比特值更新为所述第二数值,以此实现目标值的插入,其中,所述n基于所述下标索引值确定得到,所述第一单差异表项为包括所述目标值的突变位置和突变字节的单差异表项。
在另一种可能的实现方式中,在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目小于第一阈值的情况下,基于所述下标索引值生成所述目标值的位向量,所述目标值的位向量中第n个比特位的比特值为所述第二数值,所述n基于所述下标索引值确定得到,所述第二单差异表项为包括所述目标值的突变位置的单差异表项;基于所述目标值的突变位置、突变字节和位向量生成一个单差异表项,并将生成的单差异表项插入至所述值压缩表,以此实现目标值的插入。
在又一种可能的实现方式中,在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目不小于第一阈值的情况下,对所述第二单差异表项、所述目标值的突变字节和下标索引值进行聚合,得到目标聚合差异表项,以此实现目标值的插入,所述第二单差异表项为包括所述目标值的突变位置的单差异表项,所述第一阈值大于1,所述目标聚合差异表项占用的存储空间不大于多个第二单差异表项所占用的存储空间。也即,在该种实现方式中,可以通过将包括有与目标值的突变位置相同的突变位置但突变字节均不相同的多个单差异表项与目标值进行聚合,得到目标聚合差异表项,以此来减少表项所占用的空间,进而减少值压缩表的存储开销。
可选地,上述获取到的处理请求可以为数据查询请求,在此基础上,所述基于所述下标索引值,在所述目标BB中进行值操作的实现过程可以为:在所述值压缩表包括第三单差异表项的情况下,基于所述第三单差异表项中的突变位置和突变字节、所述值压缩表中每个聚合差异表项包括的字节存放字段中的第n个字节和所述参考值,获取所述目标值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到。
可选地,上述获取到的处理请求可以为数据删除请求,在此基础上,所述基于所述下标索引值,在所述目标BB中进行值操作的实现过程可以为:在所述值压缩表包括第三单差异表项的情况下,将所述第三单差异表项的位向量中的第n个比特位的比特值更新为第三数值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到,所述第三数值与所述第二数值不同;在所述值压缩表包括第一聚合差异表项的情况下,基于所述第一聚合差异表项包括的第二突变位置,将所述第一聚合差异表项的字节存放字段中的第n个字节更新为所述参考值中所述第二突变位置上的字节,所述第一聚合差异表项的字节存放字段中的第n个字节为所述目标值在所述第二突变位置上的突变字节。
可选地,在将第一聚合差异表项进行更新之后,当更新后的第一聚合差异表项的字节存放字段中的突变字节的数量小于第一阈值时,还可以再次将所述第一聚合差异表项拆分为多个单差异表项。也即是,如果该突变字节的种类数量小于第一阈值,则说明即使将该更新后的聚合差异表项拆分,得到的单差异表项的数量也将小于第一阈值,少于该聚合差异表项所占用的存储空间。在这种情况下,计算设备可以将更新后的聚合差异表项恢复为多个单差异表项。
可选地,所述BT对应有BT读写锁,所述BT读写锁用于指示在基于所述处理请求访问所述BT时,对所述BT进行读写锁定。通过该BT读写锁,可以控制对该BT的并发访问。
可选地,在所述目标BB中进行值操作之前,还包括:基于所述目标BB的读写锁标号,从锁池中获取所述目标BB对应的读写锁,所述目标BB对应的读写锁用于指示在基于所述下标索引值,在所述目标BB中进行值操作的过程中,对所述目标BB进行读写锁定,所述锁池包括多个读写锁,且所述多个读写锁中存在至少一个读写锁对应有至少两个BB。也即,可以通过BB读写锁来控制对BB的并发访问。并且,由于BB的数量较多,所以多个BB可以共享同一个读写锁,这样,能够降低读写锁的空间消耗。
可选地,在基于所述下标索引值,在所述目标BB中进行值操作之后,还可以释放所述目标BB对应的读写锁。
第二方面,提供了一种键值对检索装置,所述键值对检索装置具有实现上述第一方面中键值对检索行为的功能。所述键值对检索装置包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的键值对检索方法。
示例性地,该键值对检索装置包括第一获取模块、第二获取模块、确定模块和处理模块。
其中,第一获取模块,用于获取处理请求,所述处理请求包括目标键和所述目标键对应的目标值的下标索引值,所述目标键包括第一键字段和第二键字段,所述第一键字段位于所述第二键字段之前;第二获取模块,用于基于所述第一键字段,从顶层位图BT中获取所述第一键字段对应的第一比特位上的比特值;确定模块,用于在所述第一比特位上的比特值为第一数值的情况下,基于所述第二键字段,在所述第一比特位对应的多个底层位图BB中确定所述目标键对应的目标BB,每个BB用于存储多个值;处理模块,用于基于所述下标索引值,在所述目标BB中进行值操作。
可选地,所述确定模块主要用于:获取所述第一比特位对应的第一哈希表;基于所述第二键字段和所述第一哈希表,在所述多个BB中确定所述目标BB。
可选地,所述第二键字段包括第一子字段和第二子字段,所述确定模块主要用于:基于所述第一子字段和所述第一哈希表,确定所述目标键对应的目标中层位图BM,所述目标BM中存储有第二哈希表的指示信息;基于所述第二哈希表的指示信息,获取所述第二哈希表,所述第二哈希表中存储有所述多个BB的指示信息;基于所述第二子字段和所述第二哈希表,确定所述目标BB。
可选地,所述目标BB存储有参考值和值压缩表,所述值压缩表用于存储其他值与所述参考值之间的差异信息。
可选地,所述值压缩表包括多个单差异表项,一个单差异表项用于存储一项所述差异信息,所述差异信息包括突变位置、突变字节和对应的位向量,所述突变位置用于指示所述其他值相较于所述参考值发生变化的字节的位置,所述突变字节为所述其他值相较于所述参考值发生变化的字节,所述位向量包括多个比特位,一个比特位与一个值对应,且所述多个比特位中所述其他值对应的比特位上的比特值为第二数值。
可选地,所述值压缩表还包括至少一个聚合差异表项,其中,一个聚合差异表项通过对包括有相同的第一突变位置、不同的突变字节的多个单差异表项聚合得到,且所述聚合差异表项包括聚合标识、所述第一突变位置以及字节存放字段,所述字节存放字段中按照位向量中的各个比特位所对应的值的顺序,依次存储有各个值中位于所述第一突变位置上的字节。
可选地,所述处理请求为数据插入请求,所述数据插入请求还包括所述目标值,所述处理模块主要用于:将所述目标值的各个字节与所述参考值中对应的字节进行比较,得到所述目标值的突变位置和突变字节;基于所述下标索引值、所述目标值的突变位置和突变字节,在所述值压缩表中插入所述目标值与所述参考值之间的差异信息。
可选地,所述处理模块主要用于:在所述值压缩表包括第一单差异表项的情况下,将所述第一单差异表项中的位向量中第n个比特位的比特值更新为所述第二数值,所述n基于所述下标索引值确定得到,所述第一单差异表项为包括所述目标值的突变位置和突变字节的单差异表项。
可选地,所述处理模块主要用于:在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目小于第一阈值的情况下,基于所述下标索引值生成所述目标值的位向量,所述目标值的位向量中第n个比特位的比特值为所述第二数值,所述n基于所述下标索引值确定得到,所述第二单差异表项为包括所述目标值的突变位置的单差异表项;基于所述目标值的突变位置、突变字节和位向量生成一个单差异表项,并将生成的单差异表项插入至所述值压缩表。
可选地,所述处理模块主要用于:在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目不小于第一阈值的情况下,对所述第二单差异表项、所述目标值的突变字节和下标索引值进行聚合,得到目标聚合差异表项,所述第二单差异表项为包括所述目标值的突变位置的单差异表项,所述第一阈值大于1,所述目标聚合差异表项占用的存储空间不大于多个第二单差异表项所占用的存储空间。
可选地,所述处理请求为数据查询请求,所述处理模块主要用于:在所述值压缩表包括第三单差异表项的情况下,基于所述第三单差异表项中的突变位置和突变字节、所述值压缩表中每个聚合差异表项包括的字节存放字段中的第n个字节和所述参考值,获取所述目标值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到。
可选地,所述处理请求为数据删除请求,所述处理模块主要用于:在所述值压缩表包括第三单差异表项的情况下,将所述第三单差异表项的位向量中的第n个比特位的比特值更新为第三数值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到,所述第三数值与所述第二数值不同;在所述值压缩表包括第一聚合差异表项的情况下,基于所述第一聚合差异表项包括的第二突变位置,将所述第一聚合差异表项的字节存放字段中的第n个字节更新为所述参考值中所述第二突变位置上的字节,所述第一聚合差异表项的字节存放字段中的第n个字节为所述目标值在所述第二突变位置上的突变字节。
可选地,所述处理模块还用于:当更新后的第一聚合差异表项的字节存放字段中的突变字节的数量小于第一阈值时,将所述第一聚合差异表项拆分为多个单差异表项。
可选地,所述BT对应有BT读写锁,所述BT读写锁用于指示在基于所述处理请求访问所述BT时,对所述BT进行读写锁定。
可选地,所述装置还用于:基于所述目标BB的读写锁标号,从锁池中获取所述目标BB对应的读写锁,所述目标BB对应的读写锁用于指示在基于所述下标索引值,在所述目标BB中进行值操作的过程中,对所述目标BB进行读写锁定,所述锁池包括多个读写锁,且所述多个读写锁中存在至少一个读写锁对应有至少两个BB。
可选地,所述装置还用于:释放所述目标BB对应的读写锁。
第三方面,提供了一种键值对检索设备,该键值对检索设备包括处理器和存储器,所述存储器用于存储支持所述键值对检索设备执行上述第一方面所提供的键值对检索方法的程序,以及存储用于实现上述第一方面所提供的键值对检索方法所涉及的数据。所述处理器被配置为执行所述存储器中存储的程序。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的键值对检索方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的键值对检索方法。
上述第二方面至第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
本申请实施例提供的技术方案带来的有益效果至少包括:
在本申请实施例中,将键划分为多个键字段,之后,基于在前的第一键字段从BT中确定对应的第一比特位,之后,基于在后的第二键字段从该第一比特位对应的多个BB中确定目标BB。这样,对于具有相同的第一键字段的键,均能够通过BT定位到相同的多个BB,也即,本申请实施例对键的共有部分的索引进行了整合,从而降低了索引的空间占比。
附图说明
图1是本申请实施例提供的一种键值对检索设备的结构示意图;
图2是本申请实施例提供的一种键值对检索方法的流程图;
图3是本申请实施例提供的一种值压缩表的示意图;
图4是本申请实施例提供的另一种值压缩表的示意图;
图5是本申请实施例提供的又一种值压缩表的示意图;
图6是本申请实施例提供的BT、BM和BB的读写锁示意图;
图7是本申请实施例提供的一种键值对检索装置的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行详细的解释说明之前,首先对本申请实施例涉及的实施环境进行介绍。
图1是本申请实施例提供的一种键值对检索设备的结构示意图。下文实施例中提供的键值对检索方法即可以通过该键值对检索设备来执行。如图1所示,该键值对检索设备可以包括一个或多个处理器101、通信总线102、存储器103以及一个或多个通信接口104。
处理器101可以是一个通用中央处理器(central processing unit,CPU)、网络处理器(network processor,NP)、微处理器、或者可以是一个或多个用于实现本申请方案的集成电路,例如,专用集成电路(application-specific integrated circuit,ASIC)、可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD)、现场可编程逻辑门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合。
通信总线102用于在上述组件之间传送信息。通信总线102可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器103可以是只读存储器(read-only memory,ROM),也可以是随机存取存储器(random access memory,RAM),也可以是电可擦可编程只读存储器(electricallyerasable programmable read-only memory,EEPROM)、光盘(包括只读光盘(compact discread-only memory,CD-ROM)、压缩光盘、激光盘、数字通用光盘、蓝光光盘等)、磁盘存储介质或者其它磁存储设备,或者是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器103可以是独立存在,并通过通信总线102与处理器101相连接。或者,存储器103也可以和处理器101集成在一起。
通信接口104使用任何收发器一类的装置,用于与其它设备或通信网络通信。通信接口104包括有线通信接口,还可以包括无线通信接口。其中,有线通信接口例如可以为以太网接口。以太网接口可以是光接口,电接口或其组合。无线通信接口可以为无线局域网(wireless local area networks,WLAN)接口,蜂窝网络通信接口或其组合等。
在一些实施例中,键值对检索设备可以包括多个处理器,如图1中所示的处理器101和处理器105。这些处理器中的每一个可以是一个单核处理器,也可以是一个多核处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(如计算机程序指令)的处理核。
在具体实现中,作为一种实施例,键值对检索设备还可以包括输出设备106和输入设备107。输出设备106和处理器101通信,可以以多种方式来显示信息。例如,输出设备106可以是液晶显示器(liquid crystal display,LCD)、发光二级管(light emitting diode,LED)显示设备、阴极射线管(cathode ray tube,CRT)显示设备或投影仪(projector)等。输入设备107和处理器101通信,可以以多种方式接收用户的输入。例如,输入设备107可以是鼠标、键盘、触摸屏设备或传感设备等。
在一些实施例中,存储器103用于存储执行本申请方案的程序代码108,处理器101可以执行存储器103中存储的程序代码108。该程序代码中可以包括一个或多个软件模块,该键值对检索设备可以通过处理器101以及存储器103中的程序代码108,来实现下文图2实施例提供的键值对检索方法。
需要说明的是,在本申请实施例中,键值对检索设备上可以部署有键值存储系统,该键值存储系统是指通过键值对进行数据存储的数据库。其中,该键值存储系统的索引可以存储在存储器中,处理器可以通过下述减少的键值对检索方法,基于存储器中存储的索引和其他相关数据,在该键值存储系统中进行数据存取和删除。
其中,键值对检索设备可以为服务器、终端设备、云端设备等,本申请实施例对此不做限定。
接下来对本申请实施例提供的键值对检索方法进行介绍。
图2是本申请实施例提供的一种键值对检索方法的流程图,该方法可以应用于前述的键值对检索设备中,在下文实施例中,将该键值对检索设备简称为检索设备,参见图2,该方法包括以下步骤:
步骤201:获取处理请求,该处理请求包括目标键和目标键对应的目标值的下标索引值,目标键包括第一键字段和第二键字段,第一键字段位于第二键字段之前。
在本申请实施例中,检索设备可以接收来自设备外部的处理请求,或者是根据用户操作生成处理请求。该处理请求可以为数据插入请求、数据查询请求或数据删除请求。其中,当该处理请求为数据查询请求或数据删除请求时,该数据查询请求或数据删除请求包括目标键和目标键对应的目标值的下标索引值,此时,该数据查询请求用于请求查询目标键对应的目标值,该数据删除请求用于请求删除目标键对应的目标值。当该处理请求为数据插入请求时,该数据插入请求包括目标键、目标值和目标值的下标索引值。其中,目标键和目标值为待插入的一个键值对,目标值的下标索引值用于指示该目标值在BB中的位向量中所对应的比特位。需要说明的是,在本申请实施例中,检索设备包括多个BB,每个BB用于存储多个值,例如,每个BB能够存储64个值。并且,每个BB中存储有位向量,该位向量包括多个比特位,每个比特位对应该BB中存储的一个值。例如,当每个BB中能够存储64个值时,BB中的位向量将包括64个比特位,每个比特位对应该BB中的一个值。关于BB的更为详细的介绍请参见后文说明。
检索设备在获取到处理请求之后,可以对该处理请求包括的目标键进行字段划分,从而得到第一键字段和第二键字段。其中,第一键字段位于第二键字段之前。
示例性地,在目标键的长度大于5个字节长度的情况下,检索设备可以将目标键的前三个字节作为第一键字段,将剩余的字节作为第二键字段。
步骤202:基于第一键字段,从BT中获取第一键字段对应的第一比特位上的比特值。
在得到目标键的第一键字段和第二键字段之后,检索设备可以通过该第一键字段来检索BT中对应的第一比特位。
需要说明的是,在本申请实施例中,BT包括多个比特位,每个比特位对应一个键字段和多个BB,其中,一个比特位对应的多个BB中的值所对应的键的前缀均为该比特位对应的键字段。并且,每个比特位的比特值可以为第一数值或其他数值。其中,当某个比特位的比特值为第一数值时,用于指示该键值存储系统中包括前缀为该比特位对应的键字段的键,当某个比特位的比特值为其他数值时,用于指示该键值存储系统中不包括有前缀为该比特位对应的键字段的键。其中,第一数值为1,其他数值为0,或者,第一数值为0,其他数值为1。
基于此,检索设备可以基于第一键字段,从BT包括的多个比特位中确定第一键字段对应的第一比特位,并获取该第一比特位上的比特值。之后,检索设备可以判断该第一比特位上的比特值是否为第一数值,进而基于处理请求来决定是否继续基于第二键字段进行后续的检索。
需要说明的是,在本申请实施例中,BT还可以对应有BT读写锁,该BT读写锁用于指示在基于某个处理请求访问BT时,对BT进行读写锁定。
其中,BT读写锁可以通过信号量来实现。例如,当检索设备中的某个线程在基于某个处理请求访问该BT时,该线程可以获取该信号量,这样,在该线程基于该处理请求访问该BT的过程中,其他线程将不能对该BT进行访问。后续,当该线程对该BT的访问结束之后,该线程可以释放该信号量,以便后续其他要访问该BT的线程获取该信号量。由此可见,通过该BT读写锁,可以控制对该BT的并发访问。
步骤203:在第一比特位上的比特值为第一数值的情况下,基于第二键字段,在第一比特位对应的多个BB中确定目标键对应的目标BB,每个BB用于存储多个值。
如果检索设备确定出第一比特位上的比特值为第一数值,则说明该键值存储系统中包括前缀为第一键字段的键,在这种情况下,检索设备可以继续基于第二键字段,在第一比特位对应的多个BB中确定目标键对应的目标BB。
由前述步骤202中的介绍可知,BT中的每个比特位对应有多个BB。示例性地,BT中的每个比特位可以对应一个哈希表,该哈希表可以用于检索多个BB,这样,各个比特位通过对应的哈希表与多个BB对应。基于此,在本步骤中,检索设备首先获取第一比特位对应的第一哈希表,之后,基于第二键字段和第一哈希表,在多个BB中确定目标BB。
在一种可能的实现方式中,BT的每个比特位对应的哈希表的每个表项中存储有一个BB的指示信息,这样,每个比特位通过自身对应的哈希表与该哈希表中存储的指示信息所指示的多个BB对应。基于此,检索设备在获取到第一比特位对应的第一哈希表之后,可以基于第一哈希表对应的哈希函数对第二键字段进行哈希运算,得到对应的哈希值,之后,获取第一哈希表中该哈希值指示的表项中的BB的指示信息,此时,获取的BB的指示信息即为目标BB的指示信息,检索设备可以基于获取的BB的指示信息,确定出目标BB。
需要说明的是,BT中每个比特位对应的哈希表中存储的BB的指示信息可以为指向BB的一个指针,或者是其他能够唯一确定出BB的信息,本申请实施例对此不作限定。
在另一种可能的实现方式中,检索设备还可以对第二键字段进行进一步的划分,得到第一子字段和第二子字段。在这种情况下,该检索设备还包括多个BM,每个BM用于存储一个中层哈希表的指示信息,中层哈希表中的每个表项用于存储一个BB的指示信息,相应地,BT的每个比特位对应一个顶层哈希表,顶层哈希表的每个表项中存储有一个BM的指示信息,这样,BT中的每个比特位通过自身对应的顶层哈希表、顶层哈希表中存储的指示信息所指示的多个BM所对应的多个中层哈希表,与该多个中层哈希表中的指示信息所指示的多个BB对应。基于此,检索设备在获取到第一比特位对应的顶层哈希表,也即第一哈希表之后,可以基于第一子字段和第一哈希表,确定目标键对应的目标BM,目标BM中存储有第二哈希表的指示信息;基于第二哈希表的指示信息,获取第二哈希表,第二哈希表中存储有多个BB的指示信息;基于第二子字段和第二哈希表,确定目标BB。
其中,检索设备首先基于第一哈希表对应的哈希函数对第一子字段进行哈希运算,得到第一哈希值,之后,获取第一哈希表中该第一哈希值所指示的表项中的BM的指示信息,此时,获取的BM的指示信息即为目标BM的指示信息。检索设备基于该目标BM的指示信息可以确定出目标BM,进而从目标BM中获取第二哈希表的指示信息。之后,检索设备基于第二哈希表的指示信息获取第二哈希表,并基于第二哈希表对应的哈希函数对第二子字段进行哈希运算,得到第二哈希值。之后,检索设备获取第二哈希表中该第二哈希值所指示的表项中的BB的指示信息,此时,获取到的BB的指示信息即为目标BB的指示信息。检索设备基于该目标BB的指示信息即能够确定目标BB。
需要说明的是,上述的顶层哈希表中存储的BM的指示信息以及BM中存储的中层哈希表的指示信息均可以为指向相应BM和中层哈希表的指针,或者是其他能够唯一确定BM和中层哈希表的信息,本申请实施例对此不作限定。
另外,在本申请实施例中,检索设备中的每个BM也可以具有对应的BM读写锁,这样,在检索设备基于某个处理请求对某个BM进行访问的过程中,可以对该BM进行锁定,以此来避免检索设备基于其他处理请求对该BM进行访问。其中,BM的读写锁的实现方式可以参考前述介绍的BT读写锁的实现方式,本申请实施例在此不再赘述。
可选地,在一些可能的情况中,第一比特位上的比特值可能不为第一数值,也即该键值存储系统中还未存储有前缀为第一键字段的键。在这种情况下,如果处理请求为数据插入请求,则检索设备首先为第一比特位创建对应的第一哈希表,并将第一比特位上的比特值置为第一数值。之后,检索设备基于第一哈希表对应的哈希函数对第一子字段进行哈希运算,得到第一哈希值,在第一哈希表中第一哈希值所指示的表项中存储目标BM的指示信息,并基于目标BM的指示信息创建目标BM。之后,在目标BM中存储第二哈希表的指示信息,并基于第二哈希表的指示信息创建第二哈希表。之后,基于第二哈希表对应的哈希函数对第二子字段进行哈希运算得到第二哈希值,在第二哈希表中第二哈希值所指示的表项中存储一个当前还未存储有值的BB的指示信息,该BB即为目标BB。
当然,如果检索设备中不包括BM,则检索设备可以参考上述方式直接在第一哈希表中第一哈希值所指示的表项中存储一个当前还未存储有值的BB的指示信息,该BB即为目标BB。
可选地,如果处理请求为数据删除请求或数据查询请求,则在第一比特位上的比特值不为第一数值的情况下,检索设备结束操作。
步骤204:基于下标索引值,在目标BB中进行值操作。
在确定出目标BB之后,检索设备可以基于处理请求中的下标索引值,在目标BB中进行该处理请求所对应的值操作。
由前述介绍可知,BB用于存储多个值。在本申请实施例中,BB可以通过两种不同的方式来存储值,根据BB存储值的方式的不同,检索设备基于下标索引值在目标BB中进行值操作的实现方式也不同。
在第一种实现方式中,BB通过存储参考值和值压缩表来存储多个值,其中,该参考值为该BB中存储的任意一个值。该值压缩表用于存储其他值与参考值之间的差异信息。这样,基于该值压缩表中存储的差异信息和参考值,即能恢复出多个值。在这种情况下,检索设备可以基于下标索引值、该参考值和值压缩表,在该值压缩表中进行该处理请求对应的值操作。
示例性地,值压缩表可以包括多个单差异表项,一个单差异表项用于存储一项差异信息,该差异信息包括突变位置、突变字节和对应的位向量,该突变位置用于指示其他值相较于参考值发生变化的字节的位置,突变字节为其他值相较于参考值发生变化的字节,位向量包括多个比特位,一个比特位与一个值对应,且多个比特位中该其他值对应的比特位上的比特值为第二数值。其中,当该多个比特位的初始比特值为0时,该第二数值可以为1,当该多个比特位的初始比特值为1时,第二数值可以为0。另外,在本申请实施例中,位向量的第一个比特位对应的值可以为参考值。
需要说明的是,在本申请实施例中,一个BB中存储的各个值的长度是相同的。另外,一个BB中的值压缩表中的各个单差异表项中的位向量包括的比特位的个数是相同的,均等于该BB能够存储的值的数量。例如,当目标BB能够存储64个值时,目标BB的值压缩表中的各个单差异表项中的位向量将包括64个比特位,每个比特位用于指示一个值。其中,对于任一个值而言,这个值对应的比特位可以通过这个值的下标索引值来指示,例如,当某个值的下标索引值为0时,则这个值对应的比特位即为位向量中的第1个比特位,当某个值的下标索引值为4时,则对应第5个比特位,以此类推。另外,当某个单差异表项中的位向量中的某个比特位上的比特值为第二数值时,则说明该比特位对应的值中该单差异表项包括的突变位置上的字节与参考值中该突变位置上的字节不同,也即,该比特位对应的值中该突变位置上的字节即为该单差异表项包括的突变字节。
由于一个单差异表项中存放的差异信息包括突变位置、突变字节和位向量,因此,在本申请实施例中,值压缩表中的一个单差异表项可以包括三个字段,分别为第一字段、第二字段和第三字段,其中,第一字段用于存放突变位置,第二字段用于存放突变字节,第三字段用于存放位向量。
图3为本申请实施例给出的一种值压缩表中的单差异表项的示例。假设该目标BB中存储的64个值的长度均为8个字节长度,则其他值相较于参考值而言,发生突变的字节的位置可以为第1个至第8个字节中任一个字节,这样,单差异表项中的突变位置可以通过一个8比特的值来表示,也即,第一字段的长度为8比特。这个8比特的值的取值范围可以为0至7,其中,0用于指示突变位置为第一个字节,7用于指示突变位置为第8个字节,以此类推。另外,单差异表项的第二字段用于存放突变字节,一个突变字节的长度也为8比特。除此之外,该单差异表项的第三字段用于存放位向量,由于目标BB能够存储64个值,所以,该位向量包括64个比特位,也即该位向量的长度为64比特。这样,一个单差异表项将占用10个字节。如图3所示,单差异表项A中的突变位置为0,突变字节为0x02,这样,当单差异表项A中的位向量中某个比特位的比特值为第二数值时,例如,为1时,则说明该比特位对应的值中的第一个字节与参考值的第一个字节不同,其中,该比特位对应的值的第一个字节为0x02。再例如,单差异表项B中的突变位置为3,突变字节为0x03,则当单差异表项B中的位向量中某个比特位的比特值为1时,则说明该比特位对应的值中的第四个字节与参考值的第四个字节不同,其中,该比特位对应的值的第四个字节为0x03。
可选地,在一种可能的实现方式中,本申请实施例中的值压缩表除了包括单差异表项之外,还可以包括至少一个聚合差异表项,在本申请实施例中,至少一个包括一个或多个,至少n个包括n个或更多。其中,一个聚合差异表项通过对包括有相同的第一突变位置、不同的突变字节的多个单差异表项聚合得到,且该聚合差异表项包括聚合标识、第一突变位置以及字节存放字段,该字节存放字段中按照位向量中的各个比特位所对应的值的顺序,依次存储有各个值中位于第一突变位置上的字节。其中,如果某个比特位对应的值还未存储至该目标BB中,则该比特位对应的值在该第一突变位置上的字节为参考值在该第一突变位置上的字节。
需要说明的是,在有些情况下,各个值在相同的突变位置上的突变字节可能不同,例如,有8个值,每个值的第一个字节相对于参考值的第一个字节均发生了突变,也即,均与参考值的第一个字节不同,并且,这8个值的第一个字节也各不相同,这样,需要分别将这8个值的突变存储为8个单差异表项,当这种突变位置相同但是突变字节不同的单差异表项较多时,将会增加存储开销。基于此,在本申请实施例中,对多个包括有相同的突变位置、不同的突变字节的单差异表项可以进行聚合,从而得到一个聚合差异表项,以此来减少表项的存储开销。
示例性地,对于值压缩表中包括的突变位置相同但突变字节不同的多个单差异表项,检索设备可以统计该多个单差异表项的数量是否小于第一阈值,其中,该第一阈值可以根据一个聚合差异表项所需占用的字节长度与一个单差异表项所需占用的字节长度来确定。
其中,一个聚合差异表项可以包括聚合标识、突变位置和字节存放字段。聚合标识可以通过1比特的标记位来实现,突变位置所占用的字节长度则可以根据目标BB存储的值的字节长度来确定,例如,目标BB存储的值为8字节长度的值,则突变位置所占用的字节长度可以为7个比特。由于字节存放字段要用于存放位向量中的各个比特位所对应的值在该聚合差异表项所包括的突变位置上的字节,对于目标BB中还未存储有对应的值的某个比特位,该比特位对应的位置上将存储参考值在该突变位置上的字节,这样,字节存放字段所占用的字节长度将为该目标BB存储的值的长度,例如,目标BB中存储的值为8字节长度的值,则字节存放字段将占用8字节。而一个单差异表项中突变位置所占用的字节同样可以根据目标BB存储的值的字节长度来确定,例如,目标BB存储的值为8字节长度的值,则突变位置所占用的字节长度可以为7或8个比特。突变字节所占用的字节长度为8个比特,位向量所占用的字节长度即为目标BB中能够存储的值的数量个比特。例如,目标BB能够存储64个值,则位向量将占用64个比特。基于此,检索设备可以计算一个聚合差异表项所需占用的字节长度与一个单差异表项所需占用的字节长度之间的比值,基于该比值来确定第一阈值。例如,以上述示例来说,一个聚合差异表项所需占用的字节长度为65个字节,而一个单差异表项需要占用10个字节,则检索设备确定出二者的比值为6.5,在这种情况下,检索设备可以将大于6.5的整数作为第一阈值,例如,第一阈值为7或8或其他数值。这样,当包括的突变位置相同但突变字节不同的多个单差异表项的数目不小于第一阈值时,也即,当存在7个或7个以上的此类单差异表项时,将其进行聚合之后,通过65个字节即能够记录可能在该突变位置上发生的所有突变,但是如果用单差异表项来记录这些差异时,则需要超过65个字节,由此可见,通过进行聚合,可以减少值压缩表所占用的存储空间。
需要说明的是,为了尽可能的不改变值压缩表的结构,在本申请实施例中,该聚合差异表项可以通过占用多个单差异表项包括的字段来实现。示例性地,该聚合差异表项可以通过占用的第一个单差异表项中的第一字段来存放聚合标识和突变位置。此时,第一个单差异表项中的第一字段的最高位比特可以作为聚合标识的标记位,当该标记位取值为1时,用于指示该表项为聚合差异表项。该第一字段的剩余比特可以用于指示突变位置。第一个单差异表项中的第二字段可以空置,或者,该第二字段中可以用于存放后续的字节存放字段中包括的突变字节的种类数量。由于字节存放字段中存放的字节所占用的长度可能远远大于单差异表项中的位向量所占用的字节长度,所以,该聚合差异表项中的字节存放字段可以通过第一个单差异表项的第三字段以及剩余的其他单差异表项包括的字段来实现。
例如,当目标BB中能够存储64个值且每个值的长度为8字节时,一个单差异表项的第一字段占用8比特、第二字段占用8比特,第三字段占用64比特,在这种情况下,参见图4,聚合差异表项所占用的第一个单差异表项的第一字段的最高位比特的比特值为1,用于标识该表项为聚合差异表项,第一字段的剩余比特用于指示第一突变位置为0,也即后续的字节存放字段中存放的是各个值或参考值的第一个字节。占用的第一个单差异表项的第二字段空置。从第一个单差异表项的第三字段开始按照位向量的各个比特位的顺序存储各个比特位对应的值在该第一突变位置上的字节。例如,位向量的第1个比特位对应参考值,参考值的第一个字节为0x01。第2至4个比特位对应的值的第一个字节分别为0x02、0x03、0x04,第5至7个比特位对应的值还未存储至目标BB中,因此,这三个位置上均存放参考值的第一个字节,第8个比特位对应的值的第一个字节分别为0x05,由于第一个单差异表项中的第三字段最多放八个字节,所以,位向量的第9个比特位对应的值的第一个字节存放在占用的下一个单差异表项的第一字段中,例如,第9个比特位对应的值的第一个字节为0x06,则在下一个单差异表项的第一字段中存放0x06,第10个比特位对应的值的第一个字节存放在下一个单差异表项的第二字段中,以此类推,直至将位向量的各个比特位对应的值的第一个字节存放完为止。
在一种可能的实现方式中,上述对单差异表项进行聚合之后,也可以得到聚合差异表项组,也即,本申请实施例中的值压缩表除了包括单差异表项之外,还可以包括至少一个聚合差异表项组。其中,一个聚合差异表项组通过对多个包括有相同的突变位置、不同的突变字节的单差异表项聚合得到,一个聚合差异表项组包括多个聚合差异表项,每个聚合差异表项包括聚合标识、突变位置以及字节存放字段,该多个聚合差异表项中的突变位置均为第一突变位置,且该多个聚合差异表项中的多个字节存放字段中按照位向量中的各个比特位所对应的值的顺序,依次存储有各个值中位于第一突变位置上的字节。其中,如果某个比特位对应的值还未存储至该目标BB中,则该比特位对应的值在该第一突变位置上的字节为参考值在该第一突变位置上的字节。
示例性地,对于值压缩表中包括的突变位置相同但突变字节不同的多个单差异表项,检索设备可以统计该多个单差异表项的数量是否小于第一阈值,其中,该第一阈值可以为在目标BB能够存储的除参考值之外的全部值中相同位置上的突变字节均不同的情况下所需占用的聚合差异表项的数量,或者是大于该数量的值。例如,当该目标BB能够存储64个值时,在63个值中相同位置上的突变字节均不同的情况下,该突变位置将会对应有63个突变字节,为了保证值压缩表的结构不变,可以通过单差异表项原本的位向量的字段来存储这63个字节,由于一个表项中的一个位向量字段能够存储8个字节,这样,将需要8个表项中的位向量的字段来存储63个字节,也即,聚合得到的聚合差异表项组将包括8个聚合差异表项。此时,可以将第一阈值设置为8或者是大于8的值。这样,在包括的突变位置相同但突变字节不同的多个单差异表项的数量不小于第一阈值的情况下,通过对该多个单差异表项进行聚合之后,得到的聚合差异表项组包括的聚合差异表项的数量将不大于多个单差异表项的数量,所占的存储空间将小于多个单差异表项所占的存储空间,这样,有利于减少表项的存储开销。
例如,以目标BB中能够存储64个值,第一阈值为8为例,当存在8个包括的突变位置均为第一突变位置,但突变字节不同的单差异表项时,检索设备可以将这8个单差异表项聚合,得到一个聚合差异表项组,该聚合表项差异组包括8个聚合差异表项,其中,每个聚合差异表项包括聚合标识、突变位置以及字节存放字段。参见图5,为了保证值压缩表的结构不变,每个聚合差异表项也包括第一字段、第二字段和第三字段。不同的是,可以将第一字段的最高比特位作为标记位,通过该标记位上的值来指示该表项为聚合差异表项,例如,当该标记位的值为1时,指示该表项为聚合差异表项,当该标记位上的值为0时,指示该表项为单差异表项。该第一字段的剩余比特可以用于指示突变位置。每个聚合差异表项中的第二字段可以空置,第三字段则可以用于按照位向量中每个比特位所对应的值的顺序来存放各个值在该突变位置上的字节,也即,该第三字段即为字节存放字段。例如,参见图5,在该聚合差异表项组的第一个聚合差异表项中,第一字段存放的第一突变位置为0,用于指示值的第一个字节与参考值不同,第二字段空置,第三字段也即字节存放字段存储有8个字节,这8个字节为单差异表项中的位向量中前8个比特位所对应的值中的第一个字节。需要说明的是,如果位向量的前8个比特位中某个比特位对应的值还未存储至该目标BB中,则在该字节存放字段中该比特位对应的位置上可以存储参考值的第一个字节。例如,参见图5,位向量的第1个比特位对应参考值,参考值的第一个字节为0x01,位向量的第2至4个比特位对应的值的第一个字节分别为0x02、0x03、0x04,第5至7个比特位对应的值还未存储至目标BB中,第8个比特位对应的值的第一个字节分别为0x05,这样,第一个聚合差异表项的字节存放字段中存放的字节将为0x0102030401010105。同理,该聚合差异表项组的第二个聚合差异表项中的第一字段仍然存放第一突变位置,第二字段仍然空置,第三字段仍为字节存放字段,用于存放位向量中接下来的8个比特位对应的值中的第一个字节,以此类推。
由此可见,当值压缩表中包括有相同突变位置不同突变字节的多个单差异表项的数量不小于第一阈值时,则最少需要第一阈值数量的单差异表项,后续如果再插入的值在该突变位置上的突变字节与该多个单差异表项都不同,则需要继续增加单差异表项,这样,包括有该突变位置但突变字节不同的多个单差异表项的数量将超过第一阈值。而通过本申请实施例提供的方法将多个单差异表项进行聚合之后,得到的聚合差异表项组中包括的聚合差异表项的数目最多等于第一阈值,即使后续再插入的值在该突变位置上的突变字节与该多个单差异表项都不同,也可以通过更改聚合差异表项组中的字节存放字段中该值对应位置上的字节来实现。由于一个单差异表项所占用的字节长度与一个聚合差异表项所占用的字节长度相同,所以,通过将多个单差异表项进行聚合后,在表项数目减少的情况下,表项所占用的存储空间也会减少,也即,有利于减少值压缩表的存储开销。
可选地,在一些可能的情况中,聚合差异表项组包括的聚合差异表项中还可以包括该聚合差异表项组包括的多个字节存放字段所存放的突变字节的种类数量。其中,该突变字节的种类数量可以存放在第二字段中。
例如,当某个聚合差异表项组包括的突变位置为位置A时,该聚合差异表项组中的多个字节存放字段所存放的多个字节中有m个字节与参考值在位置A上的字节不同,此时,该聚合差异表项组中存放的突变字节的数量即为m。在这种情况下,可以将该m存放在该聚合差异表项组中的第一个聚合差异表项的第二字段中,当然,也可以在该聚合差异表项组中的任一个或每个聚合差异表项的第二字段中存放m。
由前述步骤201中的介绍可知,处理请求可以为数据插入请求、数据查询请求和数据删除请求中的任一个,在此基础上,基于上述的值压缩表,检索设备对于不同的处理请求可以执行不同的值操作。
第一种情况:当处理请求为数据插入请求时,检索设备将数据插入请求包括的目标值的各个字节与目标BB中的参考值中对应的字节进行比较,得到目标值的突变位置和突变字节;之后,基于下标索引值、目标值的突变位置和突变字节,在值压缩表中插入目标值与参考值之间的差异信息。
其中,检索设备可以将数据插入请求中的目标值和目标BB中的参考值进行逐字节比对,也即,将目标值的第一个字节与参考值的第一个字节进行比较,将目标值的第二个字节与参考值的第二个字节进行比对,以此类推,从而得到目标值包括的多个字节中与参考值对应的字节不同的字节,这些与参考值对应的字节不同的字节即为该目标值中的突变字节,检索设备可以记录目标值中的每个突变字节以及该突变字节在该目标值中所处的位置,将该位置作为突变位置。其中,目标值中的突变字节可能有一个,也可能有多个,相应地,突变字节所在的突变位置可能也有一个或多个。
在得到目标值中的突变字节和突变位置之后,以任一突变字节和该突变字节所在的突变位置为例,为了方便说明,将该突变位置称为位置A,突变字节称为字节a。检索设备可以在该目标BB的值压缩表中查找是否存在包含该位置A和该字节a的第一单差异表项,如果查找到该第一单差异表项,则说明当前目标BB存储的值中已经有某些值相较于参考值发生了该种类型的突变,在这种情况下,检索设备可以基于下标索引值,将第一单差异表项中的位向量中的第n个比特位的比特值更新为第二数值,其中,当下标索引值的最小取值为0时,则n等于该下标索引值加1,如果下标索引值的最小取值为1,则n等于该下标索引值。
需要说明的是,目标值的下标索引值能够指示出该目标值在位向量中对应的比特位。基于此,检索设备基于目标值的下标索引值,能够确定出第一单差异表项中的位向量中的第n个比特位即为该目标值对应的比特位,在这种情况下,检索设备可以将该第一单差异表项中的位向量中的第n个比特位的比特值更新为第二数值,以此来指示该目标值的位置A上的字节为字节a,与参考值的位置A上的字节不同。
可选地,如果检索设备在目标BB的值压缩表中未查找到包括有位置A和字节a的第一单差异表项,则该检索设备可以直接生成目标值的位向量,此时,该目标值的位向量中该目标值对应的比特位的比特值为第二数值,其余值为0。之后,检索设备可以基于该位置A、字节a和该目标值的位向量生成一个单差异表项,之后,将该单差异表项插入至该值压缩表中。
其中,在将该生成的单差异表项插入至值压缩表时,检索设备可以查找该目标BB中包括的突变位置为位置A的单差异表项,如果存在突变位置为位置A的单差异表项,则将生成的单差异表项插入至查找到的单差异表项之后。
可选地,如果检索设备在目标BB的值压缩表中未查找到包括有位置A和字节a的第一单差异表项,但是该值压缩表中存在包括位置A的第二单差异表项,检索设备也可以根据该值压缩表中包括的第二单差异表项的数量,来决定是直接基于位置A和字节a生成一个单差异表项,还是基于多个第二单差异表项、该位置A和字节a得到一个聚合表项组。
示例性地,检索设备可以将第二单差异表项的数目与第一阈值进行比较,在值压缩表包括的第二单差异表项的数目小于第一阈值的情况下,基于下标索引值生成目标值的位向量,该目标值的位向量中第n个比特位的比特值为第二数值,其中,当下标索引值的最小取值为0时,则n等于该下标索引值加1,如果下标索引值的最小取值为1,则n等于该下标索引值;基于目标值的突变位置、突变字节和位向量生成一个单差异表项,并将生成的单差异表项插入至该值压缩表。
需要说明的是,如果值压缩表包括的第二单差异表项的数目小于第一阈值,则说明该值压缩表中包括的突变位置为位置A但突变字节不同的单差异表项较少,此时,即使将多个第二单差异表项进行聚合,得到的聚合差异表项组中的聚合差异表项的数目可能也不会少于该多个第二单差异表项的数目,在这种情况下,将多个第二单差异表项进行聚合所带来的存储开销上的收益不是很明显甚至没有,基于此,检索设备可以直接基于下标索引值生成目标值的位向量,之后,基于该位置A、字节a和该位向量生成一个单差异表项,并将生成的单差异表项插入至多个第二单差异表项中的最后一个第二单差异表项之后。
可选地,如果值压缩表包括的第二单差异表项的数目不小于第一阈值,则说明该值压缩表中包括的突变位置为位置A但突变字节不同的单差异表项较多,此时,检索设备可以对多个第二单差异表项、该目标值的突变字节和下标索引值进行聚合,得到包括的聚合差异表项的数量不大于第一阈值的目标聚合差异表项组,以此来提高表项的利用率,减少表项数目,进而减少值压缩表的存储开销。
需要说明的是,检索设备可以参考前述介绍的对多个单差异表项进行聚合的方法,生成目标聚合差异表项组,之后,该检索设备可以基于下标索引值,在该目标聚合差异表项组包括的多个字节存放字段存放的多个字节中确定第n个字节。将该第n个字节更改为目标值在该位置A上的突变字节,也即,更改为字节a。
可选地,如果检索设备在该值压缩表中未查找到包括的突变位置为该位置A的单差异表项,但是查找到了包括该位置A的聚合差异表项或聚合差异表项组,则该检索设备也可以直接基于该下标索引值,将该字节a插入到该聚合差异表项或聚合表项差异组中。其中,在将该字节a插入该聚合差异表项或聚合表项差异组时,检索设备可以在该聚合差异表项或聚合差异表项组包括的字节存放字段存放的多个字节中确定第n个字节。将该第n个字节更改为目标值在该位置A上的突变字节,也即,更改为字节a。
需要说明的是,在将第n个字节更改为目标值在该位置A上的突变字节之后,如果该聚合差异表项或聚合差异表项组中还包括有突变字节的种类数量,则检索设备可以重新统计字节存放字段中存储的多个字节中与参考值的位置A上的字节不同的突变字节的种类数量,若种类数量不变,则结束操作,如果种类数量增加,也即,之前字节存放字段中不存在字节a这种突变字节,则检索设备将包括的突变字节的种类数量加1,以完成更新。
上述主要介绍了当处理请求为数据插入请求时,检索设备如何基于值压缩表,将数据插入请求中的目标值插入至该值压缩表的过程。接下来介绍当处理请求为数据查询请求或数据删除请求时,检索设备如何获取该数据查询请求中的目标键所对应的目标值的过程。
第二种情况:当处理请求为数据查询请求时,在目标BB中的值压缩表包括第三单差异表项的情况下,基于第三单差异表项中的突变位置和突变字节、该值压缩表中每个聚合差异表项组包括的多个字节存放字段中的第n个字节和参考值,获取目标值,第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项。
其中,检索设备首先可以获取参考值。之后,从该值压缩表的第一个表项开始遍历,对于任一表项,检索设备可以根据该表项的第一字段中的最高比特位的比特值来判断该表项为单差异表项还是聚合差异表项,如果该表项为单差异表项,则检索设备基于下标索引值,检测该单差异表项的位向量的第n个比特位的比特值是否为第二数值,如果该单差异表项的位向量的第n个比特位的比特值为第二数值,则说明目标值在该单差异表项包括的突变位置上的字节即为该单差异表项中的突变字节,在这种情况下,检索设备可以将参考值中该单差异表项包括的突变位置上的字节修改为该单差异表项中的突变字节。当然,如果该单差异表项的位向量的第n个比特位的比特值不为第二数值,则说明目标值相较于参考值而言,在该单差异表项包括的突变位置上未发生变化,也即,该目标值在该突变位置上的字节与参考值在该突变位置上的字节相同,在这种情况下,检索设备保持参考值中该突变位置上的字节不变,然后继续查看下一个表项。
可选地,在值压缩表中多个单差异表项聚合得到的为聚合差异表项组的情况下,如果检索设备根据表项的第一字段中的最高比特位的比特值确定该表项为聚合差异表项,则检索设备可以获取与该聚合差异表项包括有相同的突变位置的其他聚合差异表项,以此来确定出该聚合差异表项所属的聚合差异表项组。之后,检索设备可以根据下标索引值,获取该聚合差异表项组的多个字节存放字段中存放的第n个字节。之后,基于该聚合差异表项组包括的突变位置,将参考值中该突变位置上的字节替换为获取的字节。在值压缩表中多个单差异表项聚合得到的为聚合差异表项的情况下,如果检索设备根据表项的第一字段中的最高比特位的比特值确定该表项为聚合差异表项,则该检索设备可以获取该聚合差异表项的字节存放字段中存放的第n个字节,之后,基于该聚合差异表项包括的突变位置,将参考值中该突变位置上的字节替换为获取的字节。
如此,在通过上述方法将值压缩表的表项逐一遍历,对参考值进行修改后最终得到的值即为目标值。
第三种情况:当处理请求为数据删除请求时,在值压缩表包括第三单差异表项的情况下,将第三单差异表项的位向量中的第n个比特位的比特值更新为第三数值,第三单差异表项为位向量的第n个比特位的比特值为第二数值的单差异表项,第三数值与第二数值不同;在值压缩表包括第一聚合差异表项组的情况下,基于第一聚合差异表项组包括的第二突变位置,将第一聚合差异表项组的多个字节存放字段中的第n个字节更新为参考值中第二突变位置上的字节,第一聚合差异表项组的多个字节存放字段中的第n个字节为目标值在第二突变位置上的突变字节。
其中,检索设备可以参考前述处理数据查询请求的方式,遍历该值压缩表中的表项。如果某个表项为单差异表项,且该单差异表项中的第n个比特位的比特值为第二数值,则说明目标值在该单差异表项包括的突变位置上的字节即为该单差异表项中的突变字节,也即,目标值在该突变位置上的字节与参考值在该突变位置上的字节不同,此时,检索设备可以将该单差异表项中的位向量的第n个比特位的比特值更改为第三数值,以此来删除目标值与参考值在该突变位置上的差异。其中,当第二数值为1时,第三数值为0,当第二数值为0时,第三数值为1。
可选地,如果检索设备在将该单差异表项中的位向量的第n个比特位的比特值更改为第三数值之后,该位向量中不存在比特值为第二数值的比特位,则检索设备可以将该单差异表项删除。
如果某个表项为聚合差异表项,则检索设备可以参考前述介绍的方式,基于下标索引值,获取该聚合差异表项或该聚合差异表项所属的第一聚合差异表项组的字节存放字段中的第n个字节,并基于该聚合表项包括的第二突变位置,获取参考值中的第二突变位置上的字节。如果获取的两个字节不同,则说明字节存放字段中的第n个字节即为目标值在第二突变位置上的突变字节,在这种情况下,检索设备可以将字节存放字段中的第n个字节更改为参考值中第二突变位置上的字节,以此来删除目标值与参考值在该第二突变位置上的差异。
需要说明的是,如果聚合差异表项还包括字节存放字段中包括的突变字节的种类数量,则在将字节存放字段中的第n个字节更改为参考值在第二突变位置上的字节之后,检索设备还可以参考前述介绍的方式重新统计字节存放字段中包括的突变字节的种类数量,从而决定是否对当前存储的突变字节的种类数量进行更新。
如此,在通过上述方法将值压缩表的表项逐一遍历删除目标值与参考值在各字节上的差异之后,即完成了对目标值的删除。
需要说明的是,在本申请实施例中,检索设备在通过上述介绍的方法对聚合差异表项或聚合差异表项所属的第一聚合表项组中记录的目标值与参考值在第二突变位置上的差异进行删除之后,如果更新后的聚合差异表项或第一聚合差异表项组的字节存放字段中的突变字节的种类数量小于第一阈值,则将该聚合差异表项或该聚合差异表项所属的第一聚合差异表项组拆分为多个单差异表项。
其中,由前述介绍可知,聚合差异表项或聚合差异表项组可以包括字节存放字段中包括的突变字节的种类数量。在这种情况下,检索设备可以获取突变字节的种类数量,如果该突变字节的种类数量小于第一阈值,则说明即使将该更新后的聚合差异表项或第一聚合差异表项组拆分,得到的单差异表项的数量也将小于第一阈值,少于该聚合差异表项或第一聚合表项组所占用的存储空间。在这种情况下,检索设备可以将更新后的聚合差异表项或第一聚合差异表项组恢复为多个单差异表项。
其中,以聚合差异表项组为例,检索设备可以从更新后的第一聚合差异表项组中的第一个聚合差异表项开始,将该聚合差异表项的突变位置作为一个单差异表项的突变位置,将该聚合差异表项的字节存放字段中的第一个突变字节作为该单差异表项的突变字节,之后,根据该突变字节在该聚合差异表项组包括的多个字节存放字段的多个字节中所处的位置,确定该突变字节对应的值在位向量中对应的比特位,进而基于该突变字节对应的值在位向量中对应的比特位,生成该单差异表项的位向量,其中,该单差异表项的位向量中该突变字节对应的值所对应的比特位的比特值为第二数值,其余比特为第三数值。
在拆分得到第一个单差异表项之后,检索设备继续获取第一个聚合差异表项的字节存放字段中的第二个突变字节,如果第二个突变字节与已拆分得到的单差异表项中的突变字节相同,则根据第二个突变字节在该聚合差异表项组包括的多个字节存放字段的多个字节中所处的位置,确定第二个突变字节对应的值在位向量中对应的比特位,然后,基于第二个突变字节对应的值在位向量中对应的比特位,将该已拆分得到的单差异表项中位向量的相应比特位上的比特值更新为第二数值。当然,如果第二个突变字节与已拆分得到的单差异表项中的突变字节不同,则可以参考上述介绍的方法,基于第二个突变字节,拆分得到一个单差异表项。
通过上述方法,检索设备可以遍历多个字节存放字段中的突变字节,从而依次拆分得到数量小于第一阈值的多个单差异表项。
如果值压缩表中多个单差异表项压缩得到的一个聚合差异表项,则检索设备同样可以参考上述方法,基于该聚合差异表项的字节存放字段中存放的多个字节,依次拆分得到多个单差异表项。
可选地,在一些可能的情况中,聚合差异表项可能未记录有突变字节的种类数量。在这种情况下,检索设备也可以获取参考值中该第二突变位置上的字节。之后,基于获取的字节,统计更新后的聚合差异表项或第一聚合差异表项组的字节存放字段存放的多个字节中与获取的字节不同的字节的种类数量,该种类数量即为更新后的聚合差异表项或第一聚合差异表项组中的突变字节的种类数量。如果突变字节的种类数量小于第一阈值,则检索设备可以参考上述方式对更新后的聚合差异表项或第一聚合差异表项组进行拆分,从而得到多个单差异表项。
可选地,在一些可能的情况中,检索设备基于数据删除请求对目标BB中的目标值进行删除之后,该目标BB可能会变为空,也即,该目标BB中不再存储有值,在这种情况下,如果检索设备包括BM,则检索设备还可以将前述步骤203中确定的第二哈希表中第二哈希值所指示的表项中存储的目标BB的指示信息删除。进一步地,如果第二哈希表的所有表项为空,则检索设备可以将第二哈希表删除,并将目标BM中存储的第二哈希表的指示信息删除,之后,将第一哈希表中第一哈希值所指示的表项中存储的目标BM的指示信息删除。进一步地,如果第一哈希表中的所有表项为空,则检索设备删除第一哈希表,并将第一比特位的比特值设置为除第一数值之外的其他数值。
同理,如果检索设备不包括BM,则检索设备可以将步骤203中确定的第一比特位对应的哈希表中第二键字段的哈希值所指示的表项中存储的目标BB的指示信息删除。如果第一比特位对应的哈希表中的所有表项为空,则检索设备删除该哈希表,并将第一比特位的比特值设置为除第一数值之外的其他数值。
上文中主要介绍了目标BB通过参考值和值压缩表来存储多个值时,检索设备基于该值压缩表,在目标BB中进行处理请求对应的值操作的实现方式。
可选地,在另一种可能的实现方式中,目标BB可以直接存储一个位向量和多个值,其中,该位向量包括多个比特位,每个比特位用于指示一个值,其中,当某个比特位的比特值为第二数值时,用于指示目标BB中存储有该比特位对应的值,此时,该比特位将对应有一个值,当某个比特位为第三数值时,用于指示该目标BB中未存储有该比特位对应的值,此时,该比特位将没有对应的值。
基于此,当处理请求为数据插入请求时,检索设备首先基于数据插入请求中的下标索引值确定目标值在该位向量中对应的比特位。如果该目标值在该位向量中对应的比特位的比特值为第二数值,则说明该目标BB中已经存储有目标键对应的值,在这种情况下,检索设备可以将目标BB中该比特位对应的值替换为目标值。如果该目标值在该位向量中对应的比特位的比特值为第三数值,则说明该目标BB中未存储有目标键对应的值,在这种情况下,检索设备可以将该目标值存储为该比特位对应的值,之后,将该比特位的比特值更改为第二数值。
可选地,当处理请求为数据查询请求时,检索设备首先基于数据查询请求中的下标索引值在该位向量中确定对应的比特位。如果确定的比特位的比特值为第二数值,则获取该比特位对应的值,获取的值即为目标值。如果确定出的比特位的比特值为第三数值,则生成用于指示未查询到目标键对应的值的查询结果。
可选地,当处理请求为数据删除请求时,检索设备首先基于数据删除请求中的下标索引值在该位向量中确定对应的比特位。如果确定的比特位的比特值为第二数值,则删除该比特位对应的值。如果确定出的比特位的比特值为第三数值,则生成删除失败消息。
可选地,在本申请实施例中,检索设备还包括锁池,该锁池中可以包括多个读写锁,该多个读写锁中存在至少一个读写锁与至少两个BB对应。其中,至少一个包括一个或多个,至少两个包括两个或多于两个。例如,该多个读写锁中的某个读写锁与两个或两个以上的BB对应,某个读写锁与一个BB对应。也即是,该多个读写锁中存在有多个BB共用的读写锁。其中,多个读写锁中的各个读写锁可以通过读写锁标号进行区分,这样,检索设备可以存储BB与其对应的读写锁标号之间的对应关系。基于此,检索设备在目标BB中进行值操作之前,还可以基于目标BB的读写锁标号,从锁池中获取目标BB对应的读写锁,以便在目标BB中进行值操作的过程中,对目标BB进行读写锁定。后续,在目标BB中的值操作结束之后,检索设备可以释放该目标BB对应的读写锁,以便该读写锁对应的其他BB使用。
其中,读写锁的实现方式可以参考前述介绍的BT读写锁的实现方式,本申请实施例在此不再赘述。
需要说明的是,由于BB的数量较多,所以本申请实施例中多个BB可以共享同一个读写锁,这样,能够降低读写锁的空间消耗。
示例性地,图6是本申请实施例示出的BT、BM和BB的读写锁示意图。如图6所示,BT对应有BT读写锁,多个BM中的每个BM对应有BM读写锁,且各个BM对应的BM读写锁不同。而多个BB的读写锁可以从锁池中获取,且锁池中的一个读写锁可以由多个BB共享,也可以一个BB使用一个独立的读写锁。例如,BB1和BB3共享读写锁2,BB5单独使用读写锁3,BB8单独使用读写锁4。
基于上述介绍的键值对检索方法,本申请实施例对采用该种方法的键值存储数据库的索引性能进行了模拟测试。其中,以12字节长度的键和8字节长度的值为例,按照第一键字段为3字节长度、第二键字段中的第一子字段为3字节长度、第二子字段为6字节长度对键进行划分,每个BB中最多存储64个值。初始键值对为(0,0),按照键递增1,值递增0x2000的模式,生成60亿条键值对。在该键值存储数据库中插入该60亿条键值对,查看实际占用的空间。之后,顺序插入10000个键值对,查看数据插入操作的平均延时。之后,删除10000个键值对,每个键值对中的键间隔64,查看数据删除操作的平均延时。另外,随机查询10000个键值对,查看数据查询操作的平均延时。
其中,在该键值存储数据库中插入60亿条键值对后,BT、BM、BB以及BT和BM对应的顶层哈希表和中层哈希表实际占用的空间、上述所有信息占用的总空间如下表1所示。
表1模拟测试中索引的各部分占用的存储空间大小
由此可见,本申请实施例提供的索引实际占用的空间大小与60亿条键值对实际占用的空间大小相比,压缩率达到了23.8%。
数据插入操作的平均延时、数据删除操作的平均延时以及数据查询操作的平均延时如下表2所示。
表2模拟测试中各种操作的平均延时
操作 数据插入操作 数据查询操作 数据删除操作
时延(ns) 1132.8 511.5 875.5
由此可见,基于本申请实施例提供的操作方法,能够尽可能的将各种操作的延时控制在1微秒以内。
综上可见,首先,在本申请实施例中,将键划分为多个键字段,基于在前的第一键字段从BT中确定对应的第一比特位,之后,基于在后的第二键字段从该第一比特位对应的多个BB中确定目标BB。这样,对于具有相同的第一键字段的键,均能够通过BT定位到相同的多个BB,也即,本申请实施例对键的共有部分的索引进行了整合,从而降低了索引的空间占比。
其次,当检索设备还包括BM时,检索设备还可以再对第二键字段进行进一步的划分,进而基于在前的第一子字段和第一哈希表检索对应的BM,从而获得该BM中的第二哈希表。这样,对于同样包含有第一键字段和第一子字段的前缀的键,这些键所对应的BB将能够通过一个哈希表(也即第二哈希表)来检索得到,降低了哈希表的数据规模,提升了哈希表的操作效率。并且,通过BT和BM,能够对键的更多共有部分的索引进行整合,进一步降低索引的空间占比。
第三,在本申请实施例中,在进行数据插入操作时,对于未存储的键,可以在检索过程中,在BT、顶层哈希表或中层哈希表中创建插入对应的数据,进而在目标BB中插入目标值,而在进行数据删除操作时,可以在检索过程中删除BT、BM、BB或哈希表中记录的相应元素。由此可见,在本申请实施例中,在进行数据插入或删除操作时,无需对索引结构进行重构,索引的动态更新性能较好。
最后,在本申请实施例中,在BB中可以通过存储参考值、其他值与参考值之间的差异信息来存储多个值,这样,可以减少多个值中的冗余字段的存储,从而能够降低值的存储空间占用,提高值压缩率。
接下来对本申请实施例提供的键值对检索装置进行介绍。
图7是本申请实施例提供的一种键值对检索装置的结构示意图。如图7所示,该键值对检索装置700包括第一获取模块701、第二获取模块702、确定模块703和处理模块704,其中:
第一获取模块701,用于执行前述实施例中的步骤201;
第二获取模块702,用于执行前述实施例中的步骤202;
确定模块703,用于执行前述实施例中的步骤203;
处理模块704,用于执行前述实施例中的步骤204。
需要说明的是,上述的各个模块可以通过前述介绍的键值对检索设备中的处理器执行存储器中存储的计算机指令来实现。
可选地,确定模块703主要用于:
获取第一比特位对应的第一哈希表;
基于第二键字段和第一哈希表,在多个BB中确定目标BB。
可选地,第二键字段包括第一子字段和第二子字段,确定模块703主要用于:
基于第一子字段和第一哈希表,确定目标键对应的目标中层位图BM,目标BM中存储有第二哈希表的指示信息;
基于第二哈希表的指示信息,获取第二哈希表,第二哈希表中存储有多个BB的指示信息;
基于第二子字段和第二哈希表,确定目标BB。
可选地,目标BB存储有参考值和值压缩表,值压缩表用于存储其他值与参考值之间的差异信息。
可选地,值压缩表包括多个单差异表项,一个单差异表项用于存储一项差异信息,差异信息包括突变位置、突变字节和对应的位向量,突变位置用于指示其他值相较于参考值发生变化的字节的位置,突变字节为其他值相较于参考值发生变化的字节,位向量包括多个比特位,一个比特位与一个值对应,且多个比特位中其他值对应的比特位上的比特值为第二数值。
可选地,值压缩表还包括至少一个聚合差异表项,其中,一个聚合差异表项通过对包括有相同的第一突变位置、不同的突变字节的多个单差异表项聚合得到,且聚合差异表项包括聚合标识、第一突变位置以及字节存放字段,字节存放字段中按照位向量中的各个比特位所对应的值的顺序,依次存储有各个值中位于第一突变位置上的字节。
可选地,处理请求为数据插入请求,数据插入请求还包括目标值,处理模块704主要用于:
将目标值的各个字节与参考值中对应的字节进行比较,得到目标值的突变位置和突变字节;
基于下标索引值、目标值的突变位置和突变字节,在值压缩表中插入目标值与参考值之间的差异信息。
可选地,处理模块704主要用于:
在值压缩表包括第一单差异表项的情况下,将第一单差异表项中的位向量中第n个比特位的比特值更新为第二数值,n基于下标索引值确定得到,第一单差异表项为包括目标值的突变位置和突变字节的单差异表项。
可选地,处理模块704主要用于:
在值压缩表不包括目标值的突变字节,且值压缩表包括的第二单差异表项的数目小于第一阈值的情况下,基于下标索引值生成目标值的位向量,目标值的位向量中第n个比特位的比特值为第二数值,n基于下标索引值确定得到,第二单差异表项为包括目标值的突变位置的单差异表项;
基于目标值的突变位置、突变字节和位向量生成一个单差异表项,并将生成的单差异表项插入至值压缩表。
可选地,处理模块704主要用于:
在值压缩表不包括目标值的突变字节,且值压缩表包括的第二单差异表项的数目不小于第一阈值的情况下,对第二单差异表项、目标值的突变字节和下标索引值进行聚合,得到目标聚合差异表项,第二单差异表项为包括目标值的突变位置的单差异表项,第一阈值大于1,目标聚合差异表项占用的存储空间不大于多个第二单差异表项所占用的存储空间。
可选地,处理请求为数据查询请求,处理模块704主要用于:
在值压缩表包括第三单差异表项的情况下,基于第三单差异表项中的突变位置和突变字节、值压缩表中每个聚合差异表项包括的字节存放字段中的第n个字节和参考值,获取目标值,第三单差异表项为位向量的第n个比特位的比特值为第二数值的单差异表项,n基于下标索引值确定得到。
可选地,处理请求为数据删除请求,处理模块704主要用于:
在值压缩表包括第三单差异表项的情况下,将第三单差异表项的位向量中的第n个比特位的比特值更新为第三数值,第三单差异表项为位向量的第n个比特位的比特值为第二数值的单差异表项,n基于下标索引值确定得到,第三数值与第二数值不同;
在值压缩表包括第一聚合差异表项的情况下,基于第一聚合差异表项包括的第二突变位置,将第一聚合差异表项的字节存放字段中的第n个字节更新为参考值中第二突变位置上的字节,第一聚合差异表项的字节存放字段中的第n个字节为目标值在第二突变位置上的突变字节。
可选地,处理模块704还用于:
当更新后的第一聚合差异表项的字节存放字段中的突变字节的数量小于第一阈值时,将第一聚合差异表项拆分为多个单差异表项。
可选地,BT对应有BT读写锁,BT读写锁用于指示在基于处理请求访问BT时,对BT进行读写锁定。
可选地,该装置700还用于:
基于目标BB的读写锁标号,从锁池中获取目标BB对应的读写锁,目标BB对应的读写锁用于指示在基于下标索引值,在目标BB中进行值操作的过程中,对目标BB进行读写锁定,锁池包括多个读写锁,且多个读写锁中存在至少一个读写锁对应有至少两个BB。
可选地,该装置700还用于:
释放目标BB对应的读写锁。
综上所述,在本申请实施例中,将键划分为多个键字段,基于在前的第一键字段从BT中确定对应的第一比特位,之后,基于在后的第二键字段从该第一比特位对应的多个BB中确定目标BB。这样,对于具有相同的第一键字段的键,均能够通过BT定位到相同的多个BB,也即,本申请实施例对键的共有部分的索引进行了整合,从而降低了索引的空间占比。
需要说明的是:上述实施例提供的键值对检索装置在进行检索时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的键值对检索装置与键值对检索方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(Digital Subscriber Line,DSL))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(Digital Versatile Disc,DVD))、或者半导体介质(例如:固态硬盘(Solid State Disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。

Claims (34)

1.一种键值对检索方法,其特征在于,所述方法包括:
获取处理请求,所述处理请求包括目标键和所述目标键对应的目标值的下标索引值,所述目标键包括第一键字段和第二键字段,所述第一键字段位于所述第二键字段之前;
基于所述第一键字段,从顶层位图BT中获取所述第一键字段对应的第一比特位上的比特值;
在所述第一比特位上的比特值为第一数值的情况下,基于所述第二键字段,在所述第一比特位对应的多个底层位图BB中确定所述目标键对应的目标BB,每个BB用于存储多个值;
基于所述下标索引值,在所述目标BB中进行值操作。
2.根据权利要求1所述的方法,其特征在于,所述基于所述第二键字段,在所述第一比特位对应的底层位图BB中确定所述目标键对应的目标BB,包括:
获取所述第一比特位对应的第一哈希表;
基于所述第二键字段和所述第一哈希表,在所述多个BB中确定所述目标BB。
3.根据权利要求2所述的方法,其特征在于,所述第二键字段包括第一子字段和第二子字段,所述基于所述第二键字段和所述第一哈希表,在所述多个BB中确定所述目标BB,包括:
基于所述第一子字段和所述第一哈希表,确定所述目标键对应的目标中层位图BM,所述目标BM中存储有第二哈希表的指示信息;
基于所述第二哈希表的指示信息,获取所述第二哈希表,所述第二哈希表中存储有所述多个BB的指示信息;
基于所述第二子字段和所述第二哈希表,确定所述目标BB。
4.根据权利要求1-3任一所述的方法,其特征在于,所述目标BB存储有参考值和值压缩表,所述值压缩表用于存储其他值与所述参考值之间的差异信息。
5.根据权利要求4所述的方法,其特征在于,所述值压缩表包括多个单差异表项,一个单差异表项用于存储一项所述差异信息,所述差异信息包括突变位置、突变字节和对应的位向量,所述突变位置用于指示所述其他值相较于所述参考值发生变化的字节的位置,所述突变字节为所述其他值相较于所述参考值发生变化的字节,所述位向量包括多个比特位,一个比特位与一个值对应,且所述多个比特位中所述其他值对应的比特位上的比特值为第二数值。
6.根据权利要求5所述的方法,其特征在于,所述值压缩表还包括至少一个聚合差异表项,其中,一个聚合差异表项通过对包括有相同的第一突变位置、不同的突变字节的多个单差异表项聚合得到,且所述聚合差异表项包括聚合标识、所述第一突变位置以及字节存放字段,所述字节存放字段中按照位向量中的各个比特位所对应的值的顺序,依次存储有各个值中位于所述第一突变位置上的字节。
7.根据权利要求5或6所述的方法,其特征在于,所述处理请求为数据插入请求,所述数据插入请求还包括所述目标值,所述基于所述下标索引值,在所述目标BB中进行值操作,包括:
将所述目标值的各个字节与所述参考值中对应的字节进行比较,得到所述目标值的突变位置和突变字节;
基于所述下标索引值、所述目标值的突变位置和突变字节,在所述值压缩表中插入所述目标值与所述参考值之间的差异信息。
8.根据权利要求7所述的方法,其特征在于,所述基于所述下标索引值、所述目标值的突变位置和突变字节,在所述值压缩表中插入所述目标值与所述参考值之间的差异信息,包括:
在所述值压缩表包括第一单差异表项的情况下,将所述第一单差异表项中的位向量中第n个比特位的比特值更新为所述第二数值,所述n基于所述下标索引值确定得到,所述第一单差异表项为包括所述目标值的突变位置和突变字节的单差异表项。
9.根据权利要求7所述的方法,其特征在于,所述基于所述下标索引值、所述目标值的突变位置和突变字节,在所述值压缩表中插入所述目标值与所述参考值之间的差异信息,包括:
在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目小于第一阈值的情况下,基于所述下标索引值生成所述目标值的位向量,所述目标值的位向量中第n个比特位的比特值为所述第二数值,所述n基于所述下标索引值确定得到,所述第二单差异表项为包括所述目标值的突变位置的单差异表项;
基于所述目标值的突变位置、突变字节和位向量生成一个单差异表项,并将生成的单差异表项插入至所述值压缩表。
10.根据权利要求7所述的方法,其特征在于,所述基于所述下标索引值、所述目标值的突变位置和突变字节,在所述值压缩表中插入所述目标值与所述参考值之间的差异信息,包括:
在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目不小于第一阈值的情况下,对所述第二单差异表项、所述目标值的突变字节和下标索引值进行聚合,得到目标聚合差异表项,所述第二单差异表项为包括所述目标值的突变位置的单差异表项,所述第一阈值大于1,所述目标聚合差异表项占用的存储空间不大于多个第二单差异表项所占用的存储空间。
11.根据权利要求6所述的方法,其特征在于,所述处理请求为数据查询请求,所述基于所述下标索引值,在所述目标BB中进行值操作,包括:
在所述值压缩表包括第三单差异表项的情况下,基于所述第三单差异表项中的突变位置和突变字节、所述值压缩表中每个聚合差异表项包括的字节存放字段中的第n个字节和所述参考值,获取所述目标值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到。
12.根据权利要求6所述的方法,其特征在于,所述处理请求为数据删除请求,所述基于所述下标索引值,在所述目标BB中进行值操作,包括:
在所述值压缩表包括第三单差异表项的情况下,将所述第三单差异表项的位向量中的第n个比特位的比特值更新为第三数值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到,所述第三数值与所述第二数值不同;
在所述值压缩表包括第一聚合差异表项的情况下,基于所述第一聚合差异表项包括的第二突变位置,将所述第一聚合差异表项的字节存放字段中的第n个字节更新为所述参考值中所述第二突变位置上的字节,所述第一聚合差异表项的字节存放字段中的第n个字节为所述目标值在所述第二突变位置上的突变字节。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
当更新后的第一聚合差异表项的字节存放字段中的突变字节的数量小于第一阈值时,将所述第一聚合差异表项拆分为多个单差异表项。
14.根据权利要求1-13任一所述的方法,其特征在于,所述BT对应有BT读写锁,所述BT读写锁用于指示在基于所述处理请求访问所述BT时,对所述BT进行读写锁定。
15.根据权利要求1-14任一所述的方法,其特征在于,所述在所述目标BB中进行值操作之前,还包括:
基于所述目标BB的读写锁标号,从锁池中获取所述目标BB对应的读写锁,所述目标BB对应的读写锁用于指示在基于所述下标索引值,在所述目标BB中进行值操作的过程中,对所述目标BB进行读写锁定,所述锁池包括多个读写锁,且所述多个读写锁中存在至少一个读写锁对应有至少两个BB。
16.根据权利要求15所述的方法,其特征在于,所述基于所述下标索引值,在所述目标BB中进行值操作之后,还包括:
释放所述目标BB对应的读写锁。
17.一种键值对检索装置,其特征在于,所述装置包括:
第一获取模块,用于获取处理请求,所述处理请求包括目标键和所述目标键对应的目标值的下标索引值,所述目标键包括第一键字段和第二键字段,所述第一键字段位于所述第二键字段之前;
第二获取模块,用于基于所述第一键字段,从顶层位图BT中获取所述第一键字段对应的第一比特位上的比特值;
确定模块,用于在所述第一比特位上的比特值为第一数值的情况下,基于所述第二键字段,在所述第一比特位对应的多个底层位图BB中确定所述目标键对应的目标BB,每个BB用于存储多个值;
处理模块,用于基于所述下标索引值,在所述目标BB中进行值操作。
18.根据权利要求17所述的装置,其特征在于,所述确定模块主要用于:
获取所述第一比特位对应的第一哈希表;
基于所述第二键字段和所述第一哈希表,在所述多个BB中确定所述目标BB。
19.根据权利要求18所述的装置,其特征在于,所述第二键字段包括第一子字段和第二子字段,所述确定模块主要用于:
基于所述第一子字段和所述第一哈希表,确定所述目标键对应的目标中层位图BM,所述目标BM中存储有第二哈希表的指示信息;
基于所述第二哈希表的指示信息,获取所述第二哈希表,所述第二哈希表中存储有所述多个BB的指示信息;
基于所述第二子字段和所述第二哈希表,确定所述目标BB。
20.根据权利要求17-19任一所述的装置,其特征在于,所述目标BB存储有参考值和值压缩表,所述值压缩表用于存储其他值与所述参考值之间的差异信息。
21.根据权利要求20所述的装置,其特征在于,所述值压缩表包括多个单差异表项,一个单差异表项用于存储一项所述差异信息,所述差异信息包括突变位置、突变字节和对应的位向量,所述突变位置用于指示所述其他值相较于所述参考值发生变化的字节的位置,所述突变字节为所述其他值相较于所述参考值发生变化的字节,所述位向量包括多个比特位,一个比特位与一个值对应,且所述多个比特位中所述其他值对应的比特位上的比特值为第二数值。
22.根据权利要求21所述的装置,其特征在于,所述值压缩表还包括至少一个聚合差异表项,其中,一个聚合差异表项通过对包括有相同的第一突变位置、不同的突变字节的多个单差异表项聚合得到,且所述聚合差异表项包括聚合标识、所述第一突变位置以及字节存放字段,所述字节存放字段中按照位向量中的各个比特位所对应的值的顺序,依次存储有各个值中位于所述第一突变位置上的字节。
23.根据权利要求21或22所述的装置,其特征在于,所述处理请求为数据插入请求,所述数据插入请求还包括所述目标值,所述处理模块主要用于:
将所述目标值的各个字节与所述参考值中对应的字节进行比较,得到所述目标值的突变位置和突变字节;
基于所述下标索引值、所述目标值的突变位置和突变字节,在所述值压缩表中插入所述目标值与所述参考值之间的差异信息。
24.根据权利要求23所述的装置,其特征在于,所述处理模块主要用于:
在所述值压缩表包括第一单差异表项的情况下,将所述第一单差异表项中的位向量中第n个比特位的比特值更新为所述第二数值,所述n基于所述下标索引值确定得到,所述第一单差异表项为包括所述目标值的突变位置和突变字节的单差异表项。
25.根据权利要求23所述的装置,其特征在于,所述处理模块主要用于:
在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目小于第一阈值的情况下,基于所述下标索引值生成所述目标值的位向量,所述目标值的位向量中第n个比特位的比特值为所述第二数值,所述n基于所述下标索引值确定得到,所述第二单差异表项为包括所述目标值的突变位置的单差异表项;
基于所述目标值的突变位置、突变字节和位向量生成一个单差异表项,并将生成的单差异表项插入至所述值压缩表。
26.根据权利要求23所述的装置,其特征在于,所述处理模块主要用于:
在所述值压缩表不包括所述目标值的突变字节,且所述值压缩表包括的第二单差异表项的数目不小于第一阈值的情况下,对所述第二单差异表项、所述目标值的突变字节和下标索引值进行聚合,得到目标聚合差异表项,所述第二单差异表项为包括所述目标值的突变位置的单差异表项,所述第一阈值大于1,所述目标聚合差异表项占用的存储空间不大于多个第二单差异表项所占用的存储空间。
27.根据权利要求22所述的装置,其特征在于,所述处理请求为数据查询请求,所述处理模块主要用于:
在所述值压缩表包括第三单差异表项的情况下,基于所述第三单差异表项中的突变位置和突变字节、所述值压缩表中每个聚合差异表项包括的字节存放字段中的第n个字节和所述参考值,获取所述目标值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到。
28.根据权利要求22所述的装置,其特征在于,所述处理请求为数据删除请求,所述处理模块主要用于:
在所述值压缩表包括第三单差异表项的情况下,将所述第三单差异表项的位向量中的第n个比特位的比特值更新为第三数值,所述第三单差异表项为位向量的第n个比特位的比特值为所述第二数值的单差异表项,所述n基于所述下标索引值确定得到,所述第三数值与所述第二数值不同;
在所述值压缩表包括第一聚合差异表项的情况下,基于所述第一聚合差异表项包括的第二突变位置,将所述第一聚合差异表项的字节存放字段中的第n个字节更新为所述参考值中所述第二突变位置上的字节,所述第一聚合差异表项的字节存放字段中的第n个字节为所述目标值在所述第二突变位置上的突变字节。
29.根据权利要求28所述的装置,其特征在于,所述处理模块还用于:
当更新后的第一聚合差异表项的字节存放字段中的突变字节的数量小于第一阈值时,将所述第一聚合差异表项拆分为多个单差异表项。
30.根据权利要求17-29任一所述的装置,其特征在于,所述BT对应有BT读写锁,所述BT读写锁用于指示在基于所述处理请求访问所述BT时,对所述BT进行读写锁定。
31.根据权利要求17-30任一所述的装置,其特征在于,所述装置还用于:
基于所述目标BB的读写锁标号,从锁池中获取所述目标BB对应的读写锁,所述目标BB对应的读写锁用于指示在基于所述下标索引值,在所述目标BB中进行值操作的过程中,对所述目标BB进行读写锁定,所述锁池包括多个读写锁,且所述多个读写锁中存在至少一个读写锁对应有至少两个BB。
32.根据权利要求31所述的装置,其特征在于,所述装置还用于:
释放所述目标BB对应的读写锁。
33.一种键值对检索设备,其特征在于,所述键值对检索设备包括处理器和存储器,所述存储器用于存储计算机程序,所述处理器用于执行所述存储器中存储的计算机程序,以实现权利要求1-16任一所述的键值对检索方法。
34.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得所述计算机执行权利要求1-16任一所述的键值对检索方法。
CN202210188396.1A 2022-02-28 2022-02-28 键值对检索方法、装置及存储介质 Pending CN116701386A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210188396.1A CN116701386A (zh) 2022-02-28 2022-02-28 键值对检索方法、装置及存储介质
PCT/CN2022/137906 WO2023160115A1 (zh) 2022-02-28 2022-12-09 键值对检索方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210188396.1A CN116701386A (zh) 2022-02-28 2022-02-28 键值对检索方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN116701386A true CN116701386A (zh) 2023-09-05

Family

ID=87764608

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210188396.1A Pending CN116701386A (zh) 2022-02-28 2022-02-28 键值对检索方法、装置及存储介质

Country Status (2)

Country Link
CN (1) CN116701386A (zh)
WO (1) WO2023160115A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117493342B (zh) * 2023-11-06 2024-05-31 北京方易行信息科技有限公司 商品数据更新方法、装置、电子设备和存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6070164A (en) * 1998-05-09 2000-05-30 Information Systems Corporation Database method and apparatus using hierarchical bit vector index structure
CN102722531B (zh) * 2012-05-17 2014-04-16 北京大学 一种云环境中基于分片位图索引的查询方法
CN107491487B (zh) * 2017-07-17 2020-12-04 中国科学院信息工程研究所 一种全文数据库架构及位图索引创建、数据查询方法、服务器及介质
CN110019292B (zh) * 2017-09-06 2021-05-04 华为技术有限公司 一种数据的查询方法及装置
CN113157689A (zh) * 2020-01-22 2021-07-23 腾讯科技(深圳)有限公司 数据索引方法、装置及电子设备
CN114090575A (zh) * 2021-10-27 2022-02-25 北京搜狗科技发展有限公司 基于键值数据库的数据存储方法、检索方法及相应的装置

Also Published As

Publication number Publication date
WO2023160115A1 (zh) 2023-08-31

Similar Documents

Publication Publication Date Title
Liu et al. SK-LSH: an efficient index structure for approximate nearest neighbor search
US10114908B2 (en) Hybrid table implementation by using buffer pool as permanent in-memory storage for memory-resident data
KR101708261B1 (ko) 개별 액세스 가능한 데이터 유닛의 스토리지 관리
US11514028B2 (en) Hybrid data storage and load system with ROWID lookup
WO2018064962A1 (zh) 数据存储方法、电子设备和计算机非易失性存储介质
US20120323867A1 (en) Systems and methods for querying column oriented databases
US20150220600A1 (en) Efficient set operation execution using a single group-by operation
US9292554B2 (en) Thin database indexing
CN111046034A (zh) 管理内存数据及在内存中维护数据的方法和系统
US20180121504A1 (en) Method and database computer system for performing a database query using a bitmap index
US10963440B2 (en) Fast incremental column store data loading
US9104726B2 (en) Columnar databases
WO2023160115A1 (zh) 键值对检索方法、装置及存储介质
WO2021016050A1 (en) Multi-record index structure for key-value stores
US10558636B2 (en) Index page with latch-free access
Zhang B trees
US11068484B2 (en) Accelerating queries with complex conditions using zone map enhancements
US20170293657A1 (en) Accelerating Queries with Zone Map Enhancements
US9292553B2 (en) Queries for thin database indexing
CN115576947A (zh) 一种数据管理方法、装置、组合库、电子设备及存储介质
Zhang et al. Improving write performance of LSMT-based key-value store
CN111723089A (zh) 一种基于列式存储格式处理数据的方法和装置
US20220365905A1 (en) Metadata processing method and apparatus, and a computer-readable storage medium
KR102236521B1 (ko) 데이터를 처리하기 위한 방법 및 장치
US9824105B2 (en) Adaptive probabilistic indexing with skip lists

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