一种键值数据库内布隆过滤器的配置方法转让专利

申请号 : CN201711042747.3

文献号 : CN107729535B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李永坤张月明张伟韬吕敏许胤龙

申请人 : 中国科学技术大学

摘要 :

本发明公开了一种键值数据库内布隆过滤器配置方法,特征是包括布隆过滤器相关参数设置步骤,生成适应性布隆过滤器步骤,多级缓存队列初始化步骤,多级缓存队列参数调整策略设置步骤,查询策略调整步骤;本发明能够根据工作负载的特征,动态调整布隆过滤器的配置情况;本发明与传统方法相比,在进行查询操作时,对于访问频率较高的文件元数据来说,进行查询判断时,多个布隆过滤器同时进行判断,从而减少了布隆过滤器误报带来的硬盘输入/输出操作;对于访问频率较低的元数据来说,其对应的布隆过滤器个数较少,相应的内存资源占用相对于传统技术也就越低;降低了内存开销,提高了读性能,系统整体的吞吐量得到提升。

权利要求 :

1.一种键值存储系统内布隆过滤器的配置方法,其特征在于包括以下步骤:

第一步:设置布隆过滤器相关参数

首先选定一个数据块的空间大小S KB,然后根据选定的数据块大小测试系统硬盘性能,按如下标准选取块大小:键值存储系统内使用内部有序的文件存储键值对,每个文件对应一个布隆过滤器,选取的块大小与一个布隆过滤器的空间大小范围相同,其中S的范围是

4~16KB;指定文件的大小为T KB,以(S+T)KB大小的数据块为起始点,每次在原来的块大小基础上增加S KB,块大小最大为(64+T)KB,每次测试系统写一个块所耗费的时间,组成时间向量 根据不同块大小之间的时间差异,选取与起始点时间差异小于指定时间差Δt微秒的最大块大小Smax KB,其中T为正整数,Δt为正整数;然后用N表示存储有序键值对的文件数目N,以下简称“文件”,每个文件用i进行唯一标识;接下来指定文件所对应的布隆过滤器个数J,每个布隆过滤器对应唯一的身份标识符j,即按序从1到J对布隆过滤器进行标号,指定每个布隆过滤器内分配给每个键的比特位数bi,j,其中N为正整数,i的范围是1~N,J的范围是 bi,j的范围是2~32,且 并令向量 即每个文件对应一组布隆过滤器,且组内每个过滤器分配给键的比特位数之和最大为32;最后指定键值存储系统内每个键平均可分配到的布隆过滤器比特位B,布隆过滤器可用内存资源M=B*N,其中B的范围是2~32;

第二步:生成适应性布隆过滤器

生成布隆过滤器在键值存储系统生成新文件时,键值存储系统使用两种方式生成新的文件,一种为轻量级合并,另一种为主合并,在上述两种方式的合并过程中,根据第一步中指定的布隆过滤器个数J,使用J个线程,每个线程由文件中包含的键配合哈希函数生成1个布隆过滤器,同时保证生成每个布隆过滤器使用的哈希函数相互独立;然后根据布隆过滤器的大小与文件当前的已写入偏移,确定每个布隆过滤器应写入的文件偏移和数据量,把J个布隆过滤器写往文件的元数据区;若硬盘为固态硬盘,则继续采用J个线程,把J个布隆过滤器同时写往硬盘;

第三步:多级缓存队列初始化

通过多级缓存队列对文件的元数据进行维护,多级缓存队列由多个链表和若干系统参数构成,链表上每一个结点元素对应一个文件的元数据,每个链表的结构采用最近最少使用算法进行维护;

首先指定系统中多级缓存队列中链表的个数,用Q+1表示,并依次按照0~Q对链表进行标号,其中Q的值等于J;初始状态下,所有文件元数据都由一个普通链表维护,称这个链表为“较少访问”链表,标号为0;

其他系统参数包括:系统当前总访问频率A、多级缓存队列中链表最大标号Q、文件元数据的有效访问间隔V,即对同一文件元数据的两次访问中间间隔的最大次数和布隆过滤器当前内存资源总体使用量m;其中,A为正整数,初始值为0,V的范围为10~100,布隆过滤器当前内存资源总体使用量m初始化为0;

而与文件一一对应的文件元数据包括:文件身份标识符i、文件大小、文件访问频率fi、若干布隆过滤器、布隆过滤器到期时间E和当前布隆过滤器个数Ci;其中,文件访问频率fi与布隆过滤器个数Ci的初始值都为0;

第四步:多级缓存队列调整策略设置步骤

在键值存储系统开始运行后,文件访问频率fi与当前布隆过滤器个数Ci由多级缓存队列参数的调整策略设置,布隆过滤器到期时间E则在每次调整时设为当前总访问频率A与有效访问间隔V之和,多级缓存队列调整策略的时机为每次访问文件元数据时,当发生文件元数据访问时,先在多级队列中找到文件元数据所处的链表位置,接着把该文件元数据的访问频率fi与系统当前总访问频率A都加1,然后设置布隆过滤器到期时间E=A+V,最后把该文件元数据移到所处链表的尾部,并对文件元数据包含的布隆过滤器进行调整;

具体的调整策略由当前内存资源使用量决定,当前内存资源使用量分为两种:第一种为当前布隆过滤器内存资源使用量m远小于可用内存资源M,第二种为当前布隆过滤器内存资源使用量m接近甚至超过可用内存资源M;当处于第一种情况时,根据指定函数QueueNum,以文件访问频率fi为参数,求得文件元数据应维护的布隆过滤器个数,若当前维护的布隆过滤器个数Ci少于QueueNum(fi)时,则以硬盘上的文件中第Ci+1个布隆过滤器为起始,读取QueueNum(fi)-Ci个布隆过滤器,加载入内存,并入文件的元数据,根据新加入的布隆过滤器的内存资源占用bi,j,令m的值增加 令Ci=QueueNum(fi),并把文件元数据移入标号为QueueNum(fi)的链表尾部,当处于第二种情况时,在增加某些访问频率较高文件对应的元数据中布隆过滤器个数的同时,也会减少某些访问频率较低文件对应的布隆过滤器个数,减少的方法分为两个阶段:阶段一的操作从标号为Q的链表开始,标号为1的链表结束,从高到低的检查链表的表头元素,判断A是否大于表头元素中E的值,若大于,则把表头元素移入低一级链表的表尾,释放元数据中第Ci个布隆过滤器占用的内存资源,使m的值减少 并令E=A+V;而若不大于,则进入低一级链表继续检查,执行完阶段一的操作后,若m的值仍然大于M,则从标号为1的链表开始到标号为Q的链表为止,从每个链表的表头元素开始,对每个链表元素对应的文件元数据进行类似于阶段一的减少一个布隆过滤器的操作,直到m的值小于M;

其中QueueNum函数如下:

QueueNum函数中Base参数为正整数;

第五步:查询策略调整步骤

每个文件元数据中可能包含多个布隆过滤器;在进行查询操作时,向文件元数据包含的所有布隆过滤器都发出判断请求,每个布隆过滤器返回一个键是否存在于本文件中的响应,若任何一个布隆过滤器报告键值对不存在于本文件中,即认为键值对确实不在该文件当中,而只有当所有布隆过滤器都报告键值对存在于本文件中,才能认为键值对可能存在于该文件当中,并发出一次对该文件的硬盘输入/输出请求。

说明书 :

一种键值数据库内布隆过滤器的配置方法

技术领域

[0001] 本发明属于计算机数据存储技术领域,具体涉及采用日志合并树的键值数据库内布隆过滤器的配置方法。

背景技术

[0002] 在数据存储系统中,读性能是一个重要指标,键值存储系统往往采用基于日志合并树(Log-Structured-Merge-tree)的系统结构。在现代存储领域中,由于数据量急剧增加,键值存储系统通常采用布隆过滤器(bloomfilter)来避免读操作引发过多的硬盘输入/输出(I/O)操作,以提高读性能。美国计算机协会出版的《1970年ACMCACM国际期刊》(CommunicationsoftheACM 1970年7月第13卷,问题7,第422-426页)所介绍的布隆过滤器(Space/timetrade-offs in hash codingwith allowable errors)是现代键值存储系统(如LevelDB,RocksDB)最常用的技术。现有的方法是每个文件只对应一个固定误报率的布隆过滤器,内存资源消耗固定,无法动态调整,当数据量较大时,需要进行读取的操作较多,为了避免布隆过滤器发生过多的误报操作,必须使用空间占用较大的布隆过滤器,因此内存开销较大,否则会因为布隆过滤器的误报率较高导致很差的读性能。另外,美国计算机协会出版的《2001年Usenix技术年会论文集》(GeneralTrack:UsenixTechnical Conference2001年第91-104页)所介绍的多级缓存队列(Multi-Queue)对冷热数据区分度良好,使得服务器端缓存表现出较好的性能;但由于其原本应用于网络服务器中,缓存数据的具体替换算法不能直接应用到键值存储系统中。

发明内容

[0003] 本发明的目的是提出一种键值存储系统内布隆过滤器的配置方法,以克服现有技术的上述缺陷,在内存资源受限的情况下,对键值存储系统内布隆过滤器的配置进行动态调整,最大程度地减少由布隆过滤器误报引发的磁盘I/O(输入/输出)操作,合理利用内存资源,提高读性能。
[0004] 本发明键值存储系统内布隆过滤器的配置方法,其特征在于包括以下步骤:
[0005] 第一步:设置布隆过滤器相关参数
[0006] 首先选定一个数据块的空间大小S KB,然后根据选定的数据块大小测试系统硬盘性能,按如下标准选取块大小:键值存储系统内使用内部有序的文件(SSTable)存储键值对,每个文件对应一个布隆过滤器,选取的块大小与一个布隆过滤器的空间大小范围相同,其中S的范围是4~16KB(通常为8KB);指定文件(SSTable)的大小为T KB,以(S+T)KB大小的数据块为起始点,每次在原来的块大小基础上增加SKB,块大小最大为(64+T)KB,每次测试系统写一个块所耗费的时间,组成时间向量 根据不同块大小之间的时间差异,选取与起始点时间差异小于指定时间差Δt微秒的最大块大小Smax KB,其中T为正整数,Δt为正整数;然后用N表示存储有序键值对的文件(SSTable)数目N,以下简称“文件”,每个文件用i进行唯一标识;接下来指定文件所对应的布隆过滤器个数J,每个布隆过滤器对应唯一的身份标识符j,即按序从1到J对布隆过滤器进行标号,指定每个布隆过滤器内分配给每个键的比特位数bi,j(也称为该布隆过滤器的内存资源占用),其中N为正整数,i的范围是1~N,J的范围是 bi,j的范围是2~32,且 并令向量 即每个文件对应一组布隆过滤器,且组内每个过滤器分配给键的比特位数之和最大为32;最后指定键值存储系统内每个键平均可分配到的布隆过滤器比特位B,布隆过滤器可用内存资源M=B*N,其中B的范围是2~32;
[0007] 第二步:生成适应性布隆过滤器
[0008] 生成布隆过滤器在键值存储系统生成新文件时,键值存储系统使用两种方式生成新的文件,一种为轻量级合并(minor compaction),另一种为主合并(major compaction),在上述两种方式的合并过程中,根据第一步中指定的布隆过滤器个数J,使用J个线程,每个线程由文件中包含的键配合哈希函数生成1个布隆过滤器,同时保证生成每个布隆过滤器使用的哈希函数相互独立;然后根据布隆过滤器的大小与文件当前的已写入偏移,确定每个布隆过滤器应写入的文件偏移和数据量,把J个布隆过滤器写往文件的元数据区;若硬盘为固态硬盘,则继续采用J个线程,把J个布隆过滤器同时写往硬盘;
[0009] 第三步:多级缓存队列初始化
[0010] 通过多级缓存队列对文件的元数据进行维护,多级缓存队列由多个链表和若干系统参数构成,链表上每一个结点元素对应一个文件的元数据,每个链表的结构采用最近最少使用算法(LRU)进行维护;
[0011] 首先指定系统中多级缓存队列中链表的个数,用Q+1表示,并依次按照0~Q对链表进行标号,其中Q的值等于J;初始状态下,所有文件元数据都由一个普通链表维护,称这个链表为“较少访问”链表,标号为0;
[0012] 其他系统参数包括:系统当前总访问频率A、多级缓存队列中链表最大标号Q、文件元数据的有效访问间隔V,即对同一文件元数据的两次访问中间间隔的最大次数和布隆过滤器当前内存资源总体使用量m;其中,A为正整数,初始值为0,V的范围为10~100,布隆过滤器当前内存资源总体使用量m初始化为0;
[0013] 而与文件一一对应的文件元数据包括:文件身份标识符i、文件大小、文件访问频率fi、若干布隆过滤器、布隆过滤器到期时间E和当前布隆过滤器个数Ci;其中,文件访问频率fi与布隆过滤器个数Ci的初始值都为0;
[0014] 第四步:多级缓存队列调整策略设置步骤
[0015] 在键值存储系统开始运行后,文件访问频率fi与当前布隆过滤器个数Ci由多级缓存队列参数的调整策略设置,布隆过滤器到期时间E则在每次调整时设为当前总访问频率A与有效访问间隔V之和,
[0016] 多级缓存队列调整策略的时机为每次访问文件元数据时,当发生文件元数据访问时,先在多级队列中找到文件元数据所处的链表位置,接着把该文件元数据的访问频率fi与系统当前总访问频率A都加1,然后设置布隆过滤器到期时间E=A+V,最后把该文件元数据移到所处链表的尾部,并对文件元数据包含的布隆过滤器进行调整;
[0017] 具体的调整策略由当前内存资源使用量决定,当前内存资源使用量分为两种:第一种为当前布隆过滤器内存资源使用量m远小于可用内存资源M,第二种为当前布隆过滤器内存资源使用量m接近甚至超过可用内存资源M;当处于第一种情况时,根据指定函数QueueNum,以文件访问频率fi为参数,求得文件元数据应维护的布隆过滤器个数,若当前维护的布隆过滤器个数Ci少于QueueNum(fi)时,则以硬盘上的文件中第Ci+1个布隆过滤器为起始,读取QueueNum(fi)-Ci个布隆过滤器,加载入内存,并入文件的元数据,根据新加入的布隆过滤器的内存资源占用bi,j,令m的值增加 令Ci=QueueNum(fi),并把文件元数据移入标号为QueueNum(fi)的链表尾部,当处于第二种情况时,在增加某些访问频率较高文件对应的元数据中布隆过滤器个数的同时,也会减少某些访问频率较低文件对应的布隆过滤器个数,减少的方法分为两个阶段:
[0018] 阶段一的操作从标号为Q的链表开始,标号为1的链表结束,从高到低的检查链表的表头元素,判断A是否大于表头元素中E的值,若大于,则把表头元素移入低一级链表的表尾,释放元数据中第Ci个布隆过滤器占用的内存资源,使m的值减少 并令E=A+V;而若不大于,则进入低一级链表继续检查;
[0019] 执行完阶段一的操作后,若m的值仍然大于M,则从标号为1的链表开始到标号为Q的链表为止,从每个链表的表头元素开始,对每个链表元素对应的文件元数据进行类似于阶段一的减少一个布隆过滤器的操作,直到m的值小于M;
[0020] 其中QueueNum函数如下:
[0021]
[0022] QueueNum函数中Base参数为正整数;
[0023] 第五步:查询策略调整步骤
[0024] 每个文件元数据中可能包含多个布隆过滤器;在进行查询操作时,向文件元数据包含的所有布隆过滤器都发出判断请求,每个布隆过滤器返回一个键(key)是否存在于本文件中的响应,若任何一个布隆过滤器报告键值对不存在于本文件中,即认为键值对确实不在该文件当中,而只有当所有布隆过滤器都报告键值对存在于本文件中,才能认为键值对可能存在于该文件当中,并发出一次对该文件的硬盘输入/输出(I/O)请求。
[0025] 上述本发明键值存储系统内布隆过滤器的配置方法是基于布隆过滤器配置方法与动态调整策略,包括了布隆过滤器相关参数设置步骤,适应性布隆过滤器生成步骤,多级缓存队列初始化步骤,多级缓存队列参数调整策略设置步骤,查询策略调整步骤;本发明能够根据工作负载的特征,动态调整布隆过滤器的配置情况;在进行查询操作时,对于访问频率较高的文件元数据来说,其对应的布隆过滤器个数较多,进行查询判断时,多个布隆过滤器同时进行判断,相应的误报率也就越小,其中多个布隆过滤器同时发生误报的概率为与平均分配给每个键 比特位的布隆过滤器的误报率相同,从而减少了布隆过滤器误报带来的硬盘输入/输出(I/O)操作;对于访问频率较低的元数据来说,其对应的布隆过滤器个数较少,每个布隆过滤器所占的空间大小约是传统技术的一半甚至更低,相应的内存资源占用相对于传统技术也就越低;另一方面,布隆过滤器本身相对于数据来说在文件中占用空间较低(占比在1%~2%),在写入磁盘时,写入多个布隆过滤器所消耗的数据传输时间基本可以忽略不计,在写入固态硬盘时配合多线程技术也基本不会影响写入速度。本发明与传统的布隆过滤器配置技术相比,在内存资源占用更少的情况下,降低了系统整体布隆过滤器的误报率,由布隆过滤器误报产生的硬盘输入/输出(I/O)操作明显减少,提高了读性能,降低了响应延迟,系统整体的吞吐量得到提升。
[0026] 本发明键值存储系统内布隆过滤器的配置方法与现有技术相比,具有以下优点:
[0027] 1、由于本发明采用了多级缓存队列对冷热数据进行区分,访问频率较低的文件元数据中包含的布隆过滤器个数少,内存空间占用低于现有技术,而实际应用中,工作负载往往符合“二八定律”,即大量的请求集中在小部分文件元数据上,而大部分文件元数据访问频率较低,因此相对于传统方法来说,本发明中布隆过滤器总体占用的内存资源更少,内存空间开销更低。
[0028] 2、与现有技术相比,本发明在减少内存资源占用的基础上,仍然能带来更好的读性能;本发明大大降低了访问频率高的文件元数据中布隆过滤器发生误报的概率,从而避免了布隆过滤器误报引发的硬盘输入/输出(I/O)操作;提高了系统整体的吞吐量。

附图说明

[0029] 图1为数据块写入速度实验结果比较图;
[0030] 图2为按照本发明方法生成适应性布隆过滤器的键值存储系统内存储有序键值对(SSTable)的文件示意图;
[0031] 图3为多级缓存队列示意图;
[0032] 图4为布隆过滤器调整策略执行的程序框图;
[0033] 图5为按照本发明调整查询策略后访问文件元数据方法的示意图。

具体实施方式

[0034] 下面结合附图通过具体实施例对本发明键值存储系统内布隆过滤器的配置方法作进一步的具体详细说明。
[0035] 实施例1:
[0036] 本实施例键值存储系统内布隆过滤器的配置方法,基于布隆过滤器配置方法与动态调整策略,具体包括以下步骤:
[0037] 第一步:布隆过滤器相关参数设置
[0038] 本实施例中采用的硬盘为磁盘,指定数据块的空间大小S为8KB,指定文件(SSTable)的大小T为2048KB,使用FIO(Flexible I/O Tester)工具测试写一组数据块的时间,这组数据块以(2048+8)KB为起始点,每次增加8KB,最大值为(2048+64)KB;附图1给出了数据块写入速度实验结果比较图,其中横坐标为数据块大小,纵坐标为写一个数据块所耗费的时间,得时间向量 选取与起始块时间差不超过Δt=5us的,得最大块数据块的空间大小Smax=40KB。在本实施例中,键值数据库内包含的文件数N为
51200个,每个文件对应的布隆过滤器个数为 即5个,组内每个布隆过滤器分配给单个键的比特位数由向量 表示,令 指定键值存储系统内分配给每个键的平均比特位数为B=8,得布隆过滤器可用内存资源为M=8*51200=409600。
[0039] 第二步:适应性布隆过滤器生成步骤
[0040] 布隆过滤器相关参数设置完成之后进行适应性布隆过滤器的生成。图2为键值存储系统内存储有序键值对(SSTable)的示意图在图2中一个方框表示一个物理硬盘块(block),多个物理硬盘块构成一个文件,文件从起始处保存的是第一数据块,接下来是第二数据块,依此类推,所有数据块按照其中键的大小顺序存放,直到所有数据块的总大小超过2MB以后为元数据区,开始存放布隆过滤器,其中每个布隆过滤器的生成元素都为所有数据块中的键,而采用的哈希函数各不相同,5个线程同时运行,生成5个布隆过滤器。布隆过滤器所占的空间大小可以由分配给单个键的比特位与键的总个数相乘计算得出,由此可以计算出每个布隆过滤器的偏移,在图2中用箭头标出了每个布隆过滤器的偏移,其中布隆过滤器Ⅰ紧跟在最后一块数据块之后,布隆过滤器Ⅱ紧跟在布隆过滤器Ⅰ之后,依此类推,布隆过滤器Ⅴ紧跟在布隆过滤器Ⅳ之后。键值存储系统在进行轻量级合并与主合并操作时都会生成新的文件,在生成文件时,采取图2的布局方式生成适应性布隆过滤器,另外,若硬盘为固态硬盘,则可以进一步利用多线程技术同时向硬盘写入多个布隆过滤器。
[0041] 第三步:多级缓存队列初始化步骤
[0042] 多级缓存队列初始化包括两个方面,第一个方面为系统参数设置,第二个方面为链表元素初始化,首先对多级缓存队列系统参数进行设置,1.系统当前总访问频率A初始化为0,2.多级缓存队列中链表最大标号Q为5,设置链表的个数为6个,由0~5进行标号,文件元数据的有效访问间隔V设为50,布隆过滤器当下内存资源总体使用量m为0。
[0043] 接下来对链表元素(文件元数据)进行初始化,初始状态下,所有文件元数据都处于链表0上,其中每个文件元数据的标识符与文件的标识符相同,都用i表示,访问频繁fi为0,相应的布隆过滤器个数Ci也为0,布隆过滤器到期时间E则为A+V=50,并会在步骤四中动态改变。
[0044] 第四步:多级缓存队列调整策略设置步骤
[0045] 多级缓存队列的调整策略首先调整文件元数据的访问频率,然后再对文件元数据对应的布隆过滤器进行调整。
[0046] 若此次读操作访问文件i,则在多级队列中找到文件i元数据所处的链表位置,图3为多级缓存队列示意图,给出了多级队列的某一时刻的状态。图3中用一个方框表示一个布隆过滤器,多个方框连在一起代表一组布隆过滤器,并对应一个文件元数据;多个文件元数据由横线相联,代表一个链表,图中给出了1~5号链表,并在右边进行了标号,在图的最上方用一个从左到右的黑色实心箭头表示链表上文件元数据的热度(访问频率),最右为“最近最多访问”端,最左为“最近最少访问”端,可以看到当前标号为4的链表上有一个元素被访问,它被移动到链表的尾部,即“最近最多访问”端(MRU),由一个黑色下弧形箭头表示,并令A=A+1,fi=fi+1,E=A+50。
[0047] 目前已有的多级缓存队列原方法中一个元素只对应一个物理块,而本发明方法中一个元素可能对应多个物理块(在本方法中为布隆过滤器),因此在系统内存使用量有限的情况下,需要根据fi,函数QueueNum(fi)和内存使用量m对布隆过滤器进行调整,附图4给出了布隆过滤器调整策略执行的程序框图。首先判断QueueNum(fi)是否大于当前的队列标号Ci,若不大于,则结束本次调整,若大于,则定位文件元数据在硬盘上对应的文件,从第Ci+1个布隆过滤器开始,读取QueueNum(fi)-Ci个布隆过滤器并入到文件元数据,令m=m+4*(QueueNum(fi)-Ci),Ci=QueueNum(fi),移动元数据至标号为Ci的链表尾部;转到如前面的图3中所示,标号5的链表尾部新移入了一个元素,其中填充向下对角线的方框表示从硬盘新读入的布隆过滤器;继续判断m是否大于可用的内存资源M,在本实施例中为409600,若不大于,则结束本次调整,若大于,则从标号为Q的链表开始,到标号为1的链表结束,在图4中由q=q+flag表示,其中flag=-1,查找满足条件E>A的表头元素,把满足条件的表头元素移入低一级链表的表尾,同时释放一个布隆过滤器的空间,即m=m-4,如图3所示,标号为1的链表新移入了一个元素,其中填充向上对角线的虚线方框表示刚刚释放了一个布隆过滤器;继续判断m是否大于可用内存资源M的值409600,若不大于,则结束本次调整,若大于,则从标号为1的链表开始,标号为Q的链表结束,释放每个表头元素的一个布隆过滤器,m=m-4,同时把表头元素移入下一级链表的表尾,直到m
[0048] 在本实施例中,QueueNum函数形式如下(其中Base的值为64):
[0049]
[0050] 第五步:查询策略调整步骤
[0051] 当用户发出读请求时,即get(key),键值存储系统会访问若干文件元数据,这些文件元数据对应的文件可能包含读请求中的键(key),图5为按照本发明调整查询策略后访问文件元数据方法的示意图:体现了键值存储系统访问标号为3的链表上的文件元数据的方法的示意图,标号为3的链表上的文件元数据对应3个布隆过滤器,在图5中用相邻的竖直黑色方框表示,在进行访问操作时,向3个布隆过滤器同时发出判断请求,以告诉用户读请求中的键是否在本文件中,在图中用3个黑色的横置的黑色方框表示3个布隆过滤器同时判断,用勾号表示通过了此次检查,即布隆过滤器告诉用户读请求中的键(key)存在于本文件元数据对应的文件中,用叉号表示键(key)不存在于本文件中;其中前两个布隆过滤器通过了检查,但是第三个布隆过滤器(布隆过滤器Ⅲ)报告键不存在于本文件中,于是最终认为键不存在于本文件当中,键值存储系统也就不需要发出一次硬盘输入/输出(I/O)操作,相对于传统键值存储系统中所有文件元数据采用统一配置来说,本发明方法能减少访问热的文件元数据可能发生的误报操作,从而减少因为布隆过滤器误报产生的硬盘输入/输出(I/O)操作,而且本发明相对于传统方法能减少冷的文件元数据中布隆过滤器内存空间的占用。
[0052] 在本实施例中,文件中每个布隆过滤器分配给单个键的比特位数在可用内存资源m不超过409600(真实内存空间占用约为702000KB)的
情况下,进一步用YCSB(Yahoo!Cloud System Benchmark)基准测试工具与传统方法进行了对比,在测试中发出了10万条读请求,统计了读请求的平均响应延迟,和系统中布隆过滤器实际内存空间的占用,两种方法的可用内存资源都为409600,其中传统方法每个键在内存中占用8个布隆过滤器比特位,具体结果如下表所示:
[0053]  读请求平均延迟(us) 实际内存空间占用(KB)
传统方法 8269.44 701549
本发明方法 7350.65 352539
[0054] 采用本发明键值存储系统内布隆过滤器的配置方法的内存空间开销约为传统方法的一半,读性能提升了约11%。