存储器设备和在存储器设备中查询数据的方法与流程

文档序号:31604659发布日期:2022-09-21 10:10阅读:90来源:国知局
存储器设备和在存储器设备中查询数据的方法与流程

1.本技术涉及数据存储和数据查询的技术领域,更具体地,涉及一种存储器设备和在存储器设备中查询数据的方法。


背景技术:

2.在存储器中查询数据时,快速性和准确性是重要的衡量指标。
3.目前广泛应用的是顺序存储、顺序查找的数据库。在常规的数据查询过程中,可以采用遍历的方式来查询存储器内每一条数据记录。不过,这种方式速度较慢,耗时过长。尤其是对于读取速度不够快的存储器来说,这种查询方法更具劣势。
4.在相关技术中,一种解决方案是对数据进行分类,并使用多个数据库分别储存数据。但这样会成倍地增大存储空间的占用,且不同类别的数据量难以均衡,容易造成存储空间的浪费。可以说,这种方案以牺牲存储空间为代价换取查询速度。
5.在另外的一些方案中,可以利用布隆过滤器来提高数据查询的速度。布隆过滤器可以用于判断某数据是否在于某集合中。布隆过滤器可以被理解为包括一个很长的二进制数组(向量)和一系列随机映射函数(哈希函数)。当数据被添加到某集合时,布隆过滤器可以利用哈希函数对该数据的关键值进行计算以得到对应的哈希值,然后根据所得到的哈希值,改变二进制数组中的对应位置(比特位)的值(通常是将初始值0改为1)。当查询数据时,可以通过检查与该数据的关键值对应的比特位的值来判断待查询数据是否在于集合中。若判断结果为该数据不存在于该集合中,则可以跳过该集合内的查询工作,避免了无意义的查询,提高了查询速度。布隆过滤器的优点是占用空间较少并且效率较高,相比于前述数据分类方案在节省存储空间上有一定进步。但是,布隆过滤器可能出现误判的情况。具体而言,如果布隆过滤器判断某个数据不存在于某集合中,那么该数据一定不存在于该集合中;但如果布隆过滤器判断某个元素存在于某集合中,那么该判断结果有一定的概率是误判,这是因为不同的数据关键值通过哈希函数得到的映射值可能是相同的。布隆过滤器的另一缺点是不能反映数据的删除,因为布隆过滤器的同一个比特位有可能映射了多个数据,如果因一个数据的删除而改变该比特位的数值,则有可能影响其他数据的判断结果。这可能导致出现已经从某集合内删除的数据被布隆过滤器判断为仍然存在于该集合内的情况。被删除的数据越多,布隆过滤器的准确率越低。
6.因此,在数据查询中,仍需要提供一种存储器和数据查询方法,以在保证查询速度的同时获得较高准确率。


技术实现要素:

7.根据本技术的一方面,提供了一种存储器设备。该存储器设备包括至少一个子区,其中所述至少一个子区中的每个子区包括第一布隆过滤器和第二布隆过滤器,所述第一布隆过滤器配置成记录对应子区内的数据的删除,所述第二布隆过滤器配置成记录对应子区内的数据的插入。
8.在一些实施例中,所述第一布隆过滤器与所述第二布隆过滤器在对应子区内总计占用的空间与所述对应子区的存储空间的比例小于或等于空间比例阈值。
9.在一些实施例中,所述第一布隆过滤器配置成,响应于被删除数据从对应子区内删除,利用所述第一布隆过滤器的哈希函数将所述被删除数据的关键字映射成哈希值,并且使所述第一布隆过滤器内对应于所述哈希值的比特位的数值不同于所述比特位的初始数值。
10.在一些实施例中,所述第二布隆过滤器配置成,响应于被插入数据插入到对应子区内,利用所述第二布隆过滤器的哈希函数将所述被插入数据的关键字映射成哈希值,并且使所述第二布隆过滤器内对应于所述哈希值的比特位的数值不同于所述比特位的初始数值。
11.在一些实施例中,所述比特位的初始数值为1。
12.在一些实施例中,所述存储器设备包括nor型闪速存储器。
13.根据本技术的另一方面,提供了一种在存储器设备中查询数据的方法。所述存储器设备包括至少一个子区,所述至少一个子区中的每个子区包括第一布隆过滤器,所述第一布隆过滤器配置成记录对应子区内的数据的删除,所述至少一个子区包括至少一个受查询子区,其中,所述方法包括:在所述受查询子区中执行查询操作,其中,所述查询操作包括:利用所述受查询子区的第一布隆过滤器确定待查询数据是否具有已从所述受查询子区中被删除的可能性;响应于所述待查询数据具有已从所述受查询子区中被删除的可能性,中止所述受查询子区的查询操作,并将所述受查询子区标记为查询中止子区。
14.在一些实施例中,利用所述受查询子区的第一布隆过滤器确定待查询数据是否具有已从所述受查询子区中被删除的可能性包括:利用所述受查询子区的第一布隆过滤器的哈希函数计算所述待查询数据的关键字的哈希值,以得到第一组哈希值;确定所述受查询子区的第一布隆过滤器内与所述第一组哈希值对应的比特位的数值;响应于所述比特位的数值全部与所述比特位的初始数值不同,确定所述待查询数据具有已从所述受查询子区中被删除的可能性。
15.在一些实施例中,所述方法还包括:响应于被删除数据从对应子区中删除,利用所述对应子区的第一布隆过滤器的哈希函数计算所述被删除数据的关键字的哈希值,以得到第二组哈希值;以及,使所述对应子区的第一布隆过滤器内与所述第二组哈希值对应的比特位的数值不同于所述比特位的初始数值。
16.在一些实施例中,所述每个子区还包括第二布隆过滤器,所述第二布隆过滤器配置成记录对应子区内的数据的插入,其中,所述查询操作还包括:响应于所述待查询数据不具有已从所述受查询子区中被删除的可能性,利用所述受查询子区的第二布隆过滤器确定所述待查询数据是否具有存在于所述受查询子区中的可能性;响应于所述待查询数据具有存在于所述受查询子区中的可能性,以遍历的方式在所述受查询子区内搜索所述待查询数据;响应于所述待查询数据不具有存在于所述受查询子区中的可能性,结束 所述受查询子区的查询操作。
17.在一些实施例中,利用所述受查询子区的第二布隆过滤器确定所述待查询数据是否具有存在于所述受查询子区中的可能性包括:利用所述受查询子区的第二布隆过滤器的哈希函数计算所述待查询数据的关键字的哈希值,以得到第三组哈希值;确定所述受查询
子区的第二布隆过滤器内与所述第三组哈希值对应的比特位的数值;响应于所述比特位的数值全部与所述比特位的初始数值不同,确定所述待查询数据具有存在于所述受查询子区中的可能性。
18.在一些实施例中,所述方法还包括:响应于被添加数据被添加到对应子区中,利用所述对应子区的第二布隆过滤器的哈希函数计算所述被添加数据的关键字的哈希值,以得到第四组哈希值;以及,使所述对应子区的第二布隆过滤器内与所述第四组哈希值对应的比特位的数值不同于所述比特位的初始数值。
19.在一些实施例中,所述比特位的初始数值是1。
20.在一些实施例中,所述方法还包括:在所述存储器设备的所有子区全部执行所述查询操作后,响应于仍未查询到所述待查询数据,以遍历的方式在至少一个查询中止子区内搜索所述待查询数据。
21.在一些实施例中,所述至少一个子区包括第一子区和第二子区,所述第二子区未存储数据,所述方法还包括:响应于所述第一子区的第一布隆过滤器指示所述第一子区中存在被删除数据,将所述第一子区中除所述被删除数据之外的数据搬移到所述第二子区;以及,对所述第一子区执行擦除操作。
附图说明
22.现在将更详细并且参考附图来描述本技术的实施例,其中:图1示意性地示出了根据本技术实施例的存储器设备的结构框图;图2示意性地示出了根据本技术实施例的在存储器设备中查询数据的方法的流程图;图3示意性地示出了根据本技术实施例的在存储器设备中查询数据的方法的流程图;并且图4示意性地示出了根据本技术实施例的在存储器设备中查询数据的方法的流程图。
具体实施方式
23.下面将结合本技术中的附图,对本技术中的技术方案进行清楚和完整的描述。所描述的实施例仅仅是本技术的一部分实施例,而不是全部实施例。基于本技术的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例都属于本技术保护的范围。
24.根据本技术的一方面,提供了一种存储器设备。图1示意性地示出了根据本技术实施例的存储器设备的结构框图。如图1所示,存储器设备100包括至少一个子区,例如子区101、102、103等。所述至少一个子区中的每个子区包括第一布隆过滤器110和第二布隆过滤器120。所述第一布隆过滤器110配置成记录对应子区内的数据的删除。所述第二布隆过滤器120配置成记录对应子区内的数据的插入。第一布隆过滤器110的对应子区可以理解为第一布隆过滤器110所在的子区。第二布隆过滤器120的对应子区可以理解为第二布隆过滤器120所在的子区。由此可见,在本技术的存储器设备中,存储器设备的每个子区内同时布置有两个布隆过滤器,这两个布隆过滤器分别用于记录其所在子区内的数据的插入和删除。
25.下面描述这两个布隆过滤器的工作原理。当在存储器设备中查询数据时,需要按顺序依次在各个子区中判断待查询数据是否存在于其中。在判断待查询数据是否存在于某子区内时,可以先利用该子区的第一布隆过滤器110判断是否存在待查询数据已被从该子区内删除的情况。一方面,如果第一布隆过滤器110的判断结果是不存在待查询数据已被从该子区内删除的情况,那么一定没有出现过待查询数据从该子区内被删除的情况。应注意,两种场景可能导致这种情况,一是待查询数据已被插入到该子区内,且一直保存在该子区内,二是待查询数据从未被插入到该子区内。另一方面,如果第一布隆过滤器110的判断结果是待查询数据已被从该子区内删除,那么有可能待查询数据已被从该子区内删除,但该结果有误判的可能。不过,通过控制子区内数据的数量、第一布隆过滤器的二进制数组的大小(例如,比特位的数量)、以及第一布隆过滤器的哈希函数的数量,可以将误判率降低,使得当第一布隆过滤器110的判断结果是待查询数据已被从该子区内删除时,待查询数据有很大的可能性确实已被从该子区内删除。
26.接下来,可以根据第一布隆过滤器110的判断结果来决定进行何种后续操作。具体的,如果第一布隆过滤器110的判断结果是查询数据已被从该子区内删除,则可以跳过对该子区的搜索并对该子区的进行标记。如果第一布隆过滤器110的判断结果是不存在待查询数据已被从该子区内删除的情况,则接下来可以利用第二布隆过滤器120判断待查询数据是否存在于该子区内。
27.第二布隆过滤器可能得到两种判断结果。如果第二布隆过滤器120的判断结果是待查询数据不存在于该子区内,则待查询数据一定不存在于该子区内,在这种情况下,可以不在该子区内进行数据搜索。如果第二布隆过滤器120的判断结果是待查询数据存在于该子区内,那么有可能待查询数据的确存在于该子区内,此时可以在该子区内以遍历的方式搜索该待查询数据,例如将待查询数据的关键字与子区内数据的关键字逐一比较。类似的,当第二布隆过滤器120判断待查询数据存在于该子区内时,也有一定的误判可能性,但也可以通过控制子区内数据的数量、第二布隆过滤器的二进制数组的大小、以及第二布隆过滤器的哈希函数的数量来降低误判率。
28.通过在存储器设备的各个子区内布置分别用于记录对应子区内的数据插入和删除的两个布隆过滤器,根据本技术实施例的存储器设备能够判断出数据从某子区中被删除的情况,使得数据的删除不会影响查询效果。在第一布隆过滤器判断出待查询数据已从某子区内删除后,可以直接跳过该子区内的搜索,避免了在这些子区内进行无效搜索。当第一布隆过滤器的判断结果是不存在待查询数据已从对应子区内删除的情况时,才利用第二布隆过滤器继续判断待查询数据是否存在于该子区内。因此,根据本技术实施例的存储器设备具有更快的数据查询速度和效率。而且,通过提供记录数据删除的第一布隆过滤器,已从相应子区内删除的数据不会被认为仍然存在于该子区内,因此,数据查询的准确率也更高。
29.前面提到,通过控制子区内数据的数量以及布隆过滤器的二进制数组的大小,可以降低误判率。随着子区内数据的数量越多,误判率越高;随着二进制数组的大小越大,误判率越低。因此,布隆过滤器的误判率与子区内数据的数量正相关,与二进制数组的大小负相关。
30.由于子区内数据的数量取决于子区的存储空间,二进制数组的大小取决于布隆过滤器所占的存储空间,因此,在一些实施例中,可以认为布隆过滤器的误判率与子区的存储
空间正相关,与布隆过滤器所占的存储空间负相关。在这样的实施例中,可以通过设置布隆过滤器在所在子区内占用的空间与该子区的存储空间的比例来将布隆过滤器的误判率设置在合理的范围内。例如,当布隆过滤器在所在子区内占用的空间与该子区的存储空间的比例大于或等于千分之一的量级(如1/2048、1/1024等)时,布隆过滤器的误判率是较低的。但还应注意,虽然该比例越高,则布隆过滤器的误判率越低,但是,如果该比例过高,则意味着布隆过滤器对应的存储数据的数量较少,此时布隆过滤器的性能过剩,造成了计算资源的浪费,降低了查询效率。因此,通过将第一布隆过滤器和第二布隆过滤器在所在子区内总计占用的空间与该子区的存储空间的比例设置成小于或等于空间比例阈值,可以在数据查询的准确率和效率之间获得平衡。术语“空间比例阈值”可以这样理解:当两个布隆过滤器在所在子区内总计占用的空间与该子区的存储空间的比例大于该阈值时,布隆过滤器本有能力记录非常多的数据插入和删除情况,但受制于该子区的存储空间的限制,该子区内并不会发生如此多的数据插入和删除情况,导致严重浪费了布隆过滤器的性能;当两个布隆过滤器在所在子区内总计占用的空间与该子区的存储空间的比例小于或等于该阈值时,布隆过滤器的性能与对应子区内可能发生的数据插入和删除情况较匹配,布隆过滤器能够记录的数据插入和删除情况与该子区内实际可能发生的数据插入和删除情况相适应,避免了上述性能浪费。
31.在一些实施例中,该空间比例阈值可以是1/32,也就是,所述第一布隆过滤器110和所述第二布隆过滤器120在所述对应子区内总计占用的空间与所述对应子区的存储空间的比例小于或等于1/32,例如两者比例约为1/32、1/64、1/128、1/256、1/512、1/1024、或1/2048等等。发明人发现,通过将布隆过滤器占用的空间与对应子区的存储空间的比例设置在上述范围内,可以在布隆过滤器的误判率和效率之间取得平衡。在更具体的实施例中,所述第一布隆过滤器110和所述第二布隆过滤器120的在所述对应子区内总计占用的空间与所述对应子区的存储空间的比例约为1/64。例如,当子区的存储空间为4kb时,两个布隆过滤器总共可占用64byte的空间。
32.为了使第一布隆过滤器110和第二布隆过滤器120在数据查询过程中发挥作用,前提是第一布隆过滤器110准确地记录数据从子区内删除的情况,以及第二布隆过滤器120准确地记录数据被插入到子区内的情况。下面分别对数据删除和数据插入的情况进行描述。
33.如图1所示,当数据从所在子区内被删除时,并不会直接对该数据所在的区域进行擦除操作,而是在该数据的头部标记该数据无效。然后,使用第一布隆过滤器110的哈希函数计算该数据的关键字(key)的哈希值。此过程也可以被称为映射过程,所得到的哈希值也可以被称为摘要信息。在一些实施例中,布隆过滤器包含多个哈希函数。这些哈希函数分别对该数据的关键字进行映射,可以得到一组哈希值。然后,使第一布隆过滤器110中与所述哈希值对应的比特位的数值与该比特位的初始数值不同。比特位是二进制位,其数值为0或1。因此,若比特位的初始数值为0,则当数据从所在子区删除后,第一布隆过滤器的对应的比特位的值应从0变为1,反之亦然,以代表数据已经从该子区中移除。应注意,如果被删除的数据经过映射后得到的哈希值所对应的比特位已经不是初始数值(说明曾有其它数据从该子区中删除,并且该其它数据的至少一个哈希值与该正在被删除的数据的至少一个哈希值相同),则无需再次更改该比特位的数值,也就是使该比特位保持与初始数值不同的数值。
34.类似的,当数据被插入到某子区时,利用该子区的第二布隆过滤器120的哈希函数将被插入的数据的关键字映射成哈希值,并且使所述第二布隆过滤器120内对应于所述哈希值的比特位的数值不同于所述比特位的初始数值,以代表该数据被插入到该子区中。
35.在一些实施例中,同一子区内的第一布隆过滤器的哈希函数和第二布隆过滤器的哈希函数可以是相同的。这样可以对待查询数据的关键值仅进行一次映射,这样可以节省流程和计算资源。在另一些实施例中,同一子区内的第一布隆过滤器的哈希函数和第二布隆过滤器的哈希函数可以是不同的。这样可以降低哈希碰撞的概率。
36.在一些实施例中,在向存储器设备插入数据时,可以采用顺序写入的方式,即,在前一个子区写满数据后,再在下一个子区内写入。这样可以使得各子区磨损均衡,且空间利用率高。
37.布隆过滤器作为一种数据结构可以被任何类型的存储介质使用。例如,根据本技术实施例的存储器设备可以是非易失性存储器,其可以保证意外断电时数据的安全性。在更具体的实施例中,根据本技术实施例的存储器设备可以是闪速存储器(flash),简称闪存。闪存以双栅极型晶体管为基础存储单元,从远离基板的一侧到靠近基板的一侧分别布置有控制栅极、氧化层、浮栅层、隧道氧化层。隧道氧化层和基板之间并排布置有源极和漏极。电流只能从源级向漏级单向传导。闪存记录数据的关键在于浮栅层。浮栅中被充满电子时是已编程(已写入)状态。在读取处于写入状态的存储单元时,由于浮栅中存在电子产生感应作用,源级到漏级之间存在导电沟道,从漏极读取到的比特位数值为二进制0。浮栅中的电子被“抽离”出去时是已擦除状态。在读取处于擦除状态的存储单元时,由于源级到漏级之间没有导电沟道,从漏极读取到的比特位数值为二进制1。闪存在写入数据前,需要先进行初始化,具体说就是从所有浮栅中导出电子,即,将所有比特为的数值归为“1”。在写入数据时,它只能将数值为1的比特位改写为0,而无法将已经为0的比特位改写为1。因此,闪存的比特位的初始数值为二进制1。当本技术实施例的存储器设备是闪存时,当子区内的数据被删除时,该子区的第一布隆过滤器内对应于被删除数据的关键字的哈希值的比特位的数值从1改为0。当子区内被增加数据时,该子区的第二布隆过滤器内对应于被增加数据的关键字的哈希值的比特位的数值从1改为0。
38.本技术的发明人发现,在众多类型的存储器中,本技术的实施例尤其适用于nor型闪速存储器。nor型闪存具有有完整的数据线和地址线,因此可以实现以字节为单位进行随机读写。此外,nor型闪存的成本低、系统功耗低、以及适应恶劣环境。在小型嵌入式设备中,无法像大型服务器或者个人计算机一样配备磁盘等存储器,而这些设备常常又有管理一定量数据的需求,此时nor型闪存是较佳的选择。本技术的实施例尤其适用于nor型闪存,是因为nor型闪存的读取原理与布隆过滤器的操作相吻合。具体而言,nor型闪存只支持比特位从1改为0,也就是只支持单向的比特位修改。布隆过滤器只进行单向记录(即,要么只记录数据的插入,要么只记录数据的删除。因此,两者各自的单向性正好彼此配合。nor型闪存的每个存储单元都以并联的方式连接到位线,方便对每一字节进行随机存取。其具有专用的地址线,可以实现一次性的直接寻址。在使用布隆过滤器查询数据时,由于nor型闪存可以随机按字节读取数据,因此可以直接定位到待查询数据的关键值被映射到的哈希值所对应的比特位所在的字节,将该字节读取出来后再通过移位和逻辑运算取出比特位的值,以查询数值。这样的读取速度较快。从另一个方面来说,虽然传统上认为,由于nor型闪存的数据
写入和擦除速度较慢,其不适合于用作数据库,但本技术将nor型闪存与布隆过滤器结合,发挥了彼此的优点,在不得不使用nor型闪存时,能够使nor型闪存具有较高的性能。
39.在本技术的实施例中,布隆过滤器可以以扇区(sector)为单位进行布置。例如,每个子区可以是nor型闪存的单个扇区。在扇区数量过多时,可将相邻的若干扇区合并作一个逻辑扇区来处理,此时子区是多个扇区的组合。在另外的一些实施例中,还可以以块(bank)为单位来布置布隆过滤器。
40.综上所述,本技术实施例提供了一种存储器设备,其中其包括分别用于记录数据插入和删除的两个布隆过滤器,因此能够判断出数据从某子区内删除的情况,并且及时跳过待查询数据不在其中的子区,从而提高了数据查询的准确率和速度。而且,本技术实施例进一步确定了布隆过滤器占用的空间与子区的存储空间之间的比例,可以在布隆过滤器的误判率与效率之间取得平衡。此外,本技术还发现了布隆过滤器与nor型闪存之间的特殊匹配性,可以使原本不适合用作数据库的nor型闪存借助于布隆过滤器的优势,提升了性能。
41.根据本技术的另一方面,提供了一种在存储器设备中查询数据的方法。该方法可以借助于根据本技术实施例的存储器设备来实现。
42.图2示意性地示出了根据本技术实施例的在存储器设备中查询数据的方法的流程图。在该方法所适用的存储器设备中,所述存储器设备包括至少一个子区,所述至少一个子区中的每个子区包括第一布隆过滤器,所述第一布隆过滤器配置成记录对应子区内的数据的删除。所述至少一个子区包括至少一个受查询子区。如图2所示,所述方法包括,在步骤s205,在所述受查询子区中执行查询操作。也就是,在存储器包含的至少一个子区中,其中有至少一个子区会进行查询操作。所述查询操作包括:在步骤s305,利用所述受查询子区的第一布隆过滤器确定待查询数据是否具有已从所述受查询子区中被删除的可能性;在步骤s310,响应于所述待查询数据具有已从所述受查询子区中被删除的可能性,中止所述受查询子区的查询操作,并将所述受查询子区标记为查询中止子区。
43.下面对这些步骤进行简单描述。首先,利用受查询子区的第一布隆过滤器判断待查询数据是否有可能已从该子区内被删除(步骤s305)。如果判断结果是该待查询数据不具有从该受查询子区内被删除的可能性,则该判断结果是确定的,即,该待查询数据一定没有出现过从该受查询子区内被删除的情况。如果判断结果是该待查询数据具有从该子区内被删除的可能性,则该判断结果不是确定的,即,有可能该待查询数据从该子区内被删除,也有可能该待查询数据其实并未从该子区内被删除。不过,可以通过本技术前文描述的方法提高该判断结果的确定性,使得如果判断结果是存在该待查询数据从该受查询子区内被删除的可能性,则该待查询数据从该子区内被删除的可能性较大。
44.如果步骤s305的结果是,所述待查询数据具有已从所述受查询子区中被删除的可能性,则中止所述受查询子区的查询操作,并将所述受查询子区标记为查询中止子区。在该步骤中,鉴于所述待查询数据具有已从所述受查询子区中被删除的可能性(尤其是该结果可通过调整布隆过滤器的参数而较确定时),可以认为待查询的数据不存在于该子区内,因此可以跳过对该子区的查询,尽早开始在别的子区内的查询,以便提高查询速度。
45.图3示意性地示出了根据本技术实施例的在存储器设备中查询数据的方法的流程图。在一些实施例中,所述存储器设备的每个子区中还包括第二布隆过滤器。所述第二布隆
过滤器配置成记录对应子区内的数据的插入。所述查询操作还包括:在步骤s315,响应于所述待查询数据不具有从所述受查询子区中被删除的可能性,利用所述受查询子区的第二布隆过滤器确定所述待查询数据是否具有存在于所述受查询子区中的可能性;在步骤s320,响应于所述待查询数据具有存在于所述受查询子区中的可能性,以遍历的方式在所述受查询子区内搜索所述待查询数据;在步骤s325,响应于所述待查询数据不具有存在于所述受查询子区中的可能性,结束所述受查询子区的查询操作。
46.下面对这些步骤进行简单描述。在步骤s305执行完毕后,一种结果是前面提到的所述待查询数据具有已从所述受查询子区中被删除的可能性,此时将执行步骤s310,即中止所述受查询子区的查询操作,并将所述受查询子区标记为查询中止子区。另一种结果是所述待查询数据不具有从所述受查询子区中被删除的可能性。前一种结果不是确定的,但后一种结果是确定的,即,如果步骤s305的判断结果是所述待查询数据不具有从所述受查询子区中被删除的可能性,则所述待查询数据一定没有从所述受查询子区中被删除过。两种情况可能导致产生这种判断结果,第一种情况是待查询数据已被插入到该子区内,且一直保存在该子区内,第二种情况是待查询数据从未被插入到该子区内。因此,需要对这两种情况进行甄别。因此,在步骤s315中,响应于所述待查询数据不具有从所述受查询子区中被删除的可能性,利用所述受查询子区的第二布隆过滤器确定所述待查询数据是否具有存在于所述受查询子区中的可能性。如果步骤s315的判断结果是所述待查询数据具有存在于所述受查询子区中的可能性,则相当于甄别结果为第一种情况。此时可以以遍历的方式在所述受查询子区内搜索所述待查询数据,例如遍历该子区内所有的数据关键值,以期望寻找与待查询数据的关键值对应的数据关键值。不过,步骤s315的这种判断结果不是确定的,即有可能待查询数据并不存在于受查询子区中。类似的,可以通过改进第二布隆过滤器的前述参数来使该结果的确定性更高,使得当第二布隆过滤器的判断结果是所述待查询数据具有存在于所述受查询子区中的可能性时,该待查询数据有较高的可能性存在于该受查询子区中。然后,若在受查询子区内找到待查询数据,则以此作为结束数据查询流程,即正常结束。
47.如果步骤s315的判断结果是所述待查询数据不具有存在于所述受查询子区中的可能性,则相当于甄别结果为第二种情况。这种结果是确定的,也就是如果步骤s315的判断结果是所述待查询数据不具有存在于所述受查询子区中的可能性,则待查询数据一定不存在于受查询子区中。此时可以结束所述受查询子区的查询操作,并引起在下一个受查询子区内进行查询操作。
48.上述步骤在确定待查询数据没有从该子区内被删除的基础上,利用第二布隆过滤器进一步判断所述待查询数据是否具有存在于所述受查询子区中的可能性,并根据判断结果采取不同的后续操作,使得只有在所述待查询数据具有存在于所述受查询子区中的可能性时才会以遍历的方式在所述受查询子区内搜索所述待查询数据。这样避免了对确定不存在待查询数据的子区进行查询,减少了查询时间,提高了数据查询速度。
49.下面将更详细地描述第一布隆过滤器判断待查询数据是否已从子区中删除的过程以及第一布隆过滤器记录数据从子区中删除的过程。
50.在一些实施例中,利用受查询子区的第一布隆过滤器确定待查询数据是否具有已从所述受查询子区中被删除的可能性包括:利用所述受查询子区的第一布隆过滤器的哈希函数计算所述待查询数据的关键字的哈希值,以得到第一组哈希值;确定所述第一布隆过滤器内与所述第一组哈希值对应的比特位的数值;以及,响应于所述比特位的数值全部与初始数值不同,确定所述待查询数据具有已从所述受查询子区中被删除的可能性。在上述步骤中,在获取待查询数据的关键字后,通过第一布隆过滤器的哈希函数对待查询数据的关键字进行映射,每个哈希函数得到一个哈希值。然后,查询第一布隆过滤器的二进制数组内与所述哈希值对应的位置的比特位的数值。然后,判断该比特位的数值是否都与其初始数值不同。如果各比特位的数值全部与其初始数值不同,则可以认为待查询数据具有已从所述受查询子区中被删除的可能性。此时,可以按照步骤s310,中止所述受查询子区的查询操作,并将所述受查询子区标记为查询中止子区,并为其赋以查询中止子区编号m。如果至少一个比特位的数值与其初始数值相同,则认为待查询数据不具有已从所述受查询子区中被删除的可能性。此时,可以按照步骤s315,利用第二布隆过滤器确定所述待查询数据是否具有存在于所述受查询子区中的可能性。
51.为了使第一布隆过滤器实现上述功能,需要使其记录数据从子区中删除的情况。第一布隆过滤器记录数据从子区中删除的过程可以包括下述步骤。首先,当某数据从某子区中删除时,并不会将该数据对应的存储器区域擦除,而是在数据的头部标记该条数据无效。并且,响应于数据被删除,利用数据所在子区的第一布隆过滤器的哈希函数计算被删除的数据的关键字的哈希值,以得到第二组哈希值。然后,使所述子区的所述第一布隆过滤器内与所述第二组哈希值对应的比特位的数值不同于所述比特位的初始数值。例如,当存储器为闪速存储器时,各比特位的初始数值为二进制1。当数据从某子区中删除后,该子区的第一布隆过滤器的与该数据的关键字的哈希值对应的比特位的数值应该是二进制0。
52.下面将描述第二布隆过滤器判断待查询数据是否存在于子区中的过程以及第二布隆过滤器记录数据被添加到子区中的过程。
53.在一些实施例中,利用受查询子区的第二布隆过滤器确定所述待查询数据是否具有存在于所述受查询子区中的可能性包括:利用所述受查询子区的第二布隆过滤器的哈希函数计算所述待查询数据的关键字的哈希值,以得到第三组哈希值;确定所述第二布隆过滤器内与所述第三组哈希值对应的比特位的数值;以及,响应于所述比特位的数值全部与初始数值不同,确定所述待查询数据具有存在于所述受查询子区中的可能性。在一些实施例中,如果一个子区的第一布隆过滤器与第二布隆过滤器使用相同的哈希函数,则第三组哈希值与前述第一组哈希值相同,此时可以直接将第一组哈希值作为第三组哈希值。然后,查询第二布隆过滤器的二进制数组内与所述第三组哈希值对应的位置的比特位的数值。然后,判断该比特位的数值是否全部与其初始数值不同。如果各比特位的数值全部与其初始数值不同,则可以认为待查询数据具有存在于所述受查询子区中的可能性。此时,可以按照步骤s320,以遍历的方式在所述受查询子区内搜索所述待查询数据。如果至少一个比特位的数值与其初始数值相同,则认为待查询数据不具有存在于所述受查询子区中的可能性。此时,可以按照步骤s325,结束所述受查询子区的查询操作。
54.与第一布隆过滤器记录数据从子区中删除的情况类似,第二布隆过滤器记录数据被添加到子区中的过程可以包括下述步骤。当被添加数据被添加到某子区中时,首先利用
所述子区的所述第二布隆过滤器的哈希函数计算所述被添加数据的关键字的哈希值,以得到第四组哈希值。然后,使所述子区的所述第二布隆过滤器内与所述第四组哈希值对应的比特位的数值不同于所述比特位的初始数值。例如,当存储器为闪速存储器时,各比特位的初始数值为二进制1。当数据被添加到某子区后,该子区的第二布隆过滤器的与该数据的关键字的哈希值对应的比特位的数值应该是二进制0。
55.图4示意性地示出了根据本技术实施例的在存储器设备中查询数据的方法的流程图。如图4所示,并参考前文关于步骤s305至步骤s325的描述可知,如果第一布隆过滤器的判断结果是所述待查询数据具有已从所述受查询子区中被删除的可能性时,或者如果第二布隆过滤器的判断结果是所述待查询数据不具有存在于所述受查询子区中的可能性,则中止或结束所述受查询子区的查询操作,并在未经查询的子区内继续进行查询操作。另外,如果以遍历的方式在受查询子区内搜索所述待查询数据后,仍会未找到所述待查询数据,则也会结束所述受查询子区的查询操作,并在未经查询的子区内继续进行查询操作。在具体操作程序中,例如,如图4所示,可以使步骤s205在编号为n的子区中进行。如果该子区内的查询操作被中止或结束,则把n的值加1以得到更新值,再把该更新值作为n的值(该过程在程序语言中可以用n=n+1表示)。接下来在编号为n的子区中进行步骤s205实际上就是在下一个子区内进行步骤s205,如此循环,直至找到待查询数据或在所有子区内都没有找到待查询数据。
56.若在所有子区内执行完查询操作后,仍未搜索到待查询数据,则可能是因为步骤s305发生了误判。前面提到,如果步骤s305的判断结果是待查询数据不具有从受查询子区内被删除的可能性,则该待查询数据一定没有出现过从受查询子区内被删除的情况,但如果步骤s305的判断结果是该待查询数据具有从受查询子区内被删除的可能性,则该判断结果不是确定的,此时实际情况可能是,该待查询数据可能并没有从该受查询子区内删除。在这种情况下,按照步骤s310中止所述受查询子区的查询操作会造成漏查。
57.为了弥补这种漏查,在一些实施例中,所述方法还包括:在所述存储器设备的所有子区全部执行所述查询操作后,响应于仍未查询到所述待查询数据,以遍历的方式在至少一个查询中止子区内搜索所述待查询数据(步骤s330)。若在查询中止子区内搜索到待查询数据,则以此作为结果,结束数据查询活动(正常结束)。若在一个查询中止子区内未搜索到待查询数据,则在下一个查询中止子区内继续搜索待查询数据(该过程在程序语言中可以用m=m+1表示,其中m是查询中止子区的编号)。若在所有查询中止子区内遍历搜索所述待查询数据后,仍未找到待查询数据,则以未查询到待查询数据作为结果,结束数据查询活动(异常结束)。
58.应理解,只要子区内存在数据被删除的情况,那么就可能出现误判。本技术通过提供配置成记录对应子区内的数据删除的第一布隆过滤器,能够很大程度上减少误判的情况。但如前面所述的,第一布隆过滤器本身也存在误判的可能。尤其是被删除的数据较多时,第一布隆过滤器误判的可能性较大。为了进一步降低布隆过滤器的误判率,根据本技术实施例的方法还可以定期执行脏数据清洗策略。具体地,所述存储器设备的至少一个子区包括第一子区和第二子区,其中所述第二子区未存储数据。所述方法还包括:响应于所述第一子区的所述第一布隆过滤器显示所述第一子区中存在被删除数据,将所述第一子区中除所述被删除数据之外的数据搬移到所述第二子区;以及,对所述第一子区执行擦除操作。在
上述步骤中,首先可以借助于第一布隆过滤器识别出存在被删除数据的子区,即第一子区。然后,该子区中未被删除的数据可以被搬移到另一空的子区中,即第二子区。在搬移结束后,第二子区内仅包含未被删除的数据,第二子区的第一布隆过滤器应为空,也就是第一布隆过滤器的所有比特位的值都为初始数值。因此,第二子区出现误判的概率将变得很小。另外,可以对存在被删除数据的子区(即,第一子区)进行擦除操作。在擦除操作中,该子区内的所有比特位的值都将成为初始值。经过擦除后的子区实际上就成为了一个新的第二子区。
59.在实施上述方法时,当整个存储器只剩一个子区未写入数据时,可以立即执行一次脏数据清洗,使得不会出现没有新子区可用的情形。此外,当脏数据清洗也无法腾出未写入数据的子区时,数据库已被存满,不能继续插入数据。
60.综上所述,根据本技术实施例的在存储器设备中查询数据的方法能够实现根据本技术实施例的存储器设备的所有优点,例如能够借助于布隆过滤器判断出数据被从某子区内删除的情况,提高了数据查询的速度和准确率。此外,根据本技术实施例的方法通过对查询中止子区的复查,避免了第一布隆过滤器的误判,提高了查询准确率。另外,本技术实施例还提供了脏数据清洗策略,进一步改善了查询准确率。
61.应理解,上面的实施例仅通过示例的方式描述。虽然实施例已在附图和前面的描述中详细地图示和描述,这样的图示和描述将被认为是说明性或示例性的,并且不是约束性的,并且本技术的范围不限制于所公开的实施例。
62.诸如第一、第二等术语在本技术中可以用来描述各种设备、元件、部件或部分,但是并不意图从顺序或重要性的角度对这些设备、元件、部件或部分进行限制。这些术语仅用来将一个设备、元件、部件或部分与另一个设备、元件、部件或部分相区分。
63.通过研究附图、公开内容和所附权利要求,本领域技术人员可以理解和得到所公开实施例的其它变型。在本技术中,词语“包括”不排除其它元素或步骤,并且不定冠词“一”不排除复数。在互不相同的实施例中列举的特征在不冲突的情况下可以组合。除非明确限定,否则根据本技术实施例的方法的各个步骤在本技术上下文中的记载顺序不应理解为限定了各个步骤在实施时的执行顺序。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1