CN103345472A - 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 - Google Patents
基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 Download PDFInfo
- Publication number
- CN103345472A CN103345472A CN2013102182495A CN201310218249A CN103345472A CN 103345472 A CN103345472 A CN 103345472A CN 2013102182495 A CN2013102182495 A CN 2013102182495A CN 201310218249 A CN201310218249 A CN 201310218249A CN 103345472 A CN103345472 A CN 103345472A
- Authority
- CN
- China
- Prior art keywords
- data block
- node
- fingerprint
- bloom filter
- binary tree
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Collating Specific Patterns (AREA)
Abstract
本发明提供了一种有限二叉树布隆过滤器,以及基于该有限二叉树布隆过滤器的去冗文件系统及其构建方法。本发明有限二叉树布隆过滤器每层的节点数设置有上限,每个节点是一个二阶段布隆过滤器,每个二阶段布隆过滤器包括标准布隆过滤器和存储了各数据块的指纹和地址的第二部分。对数据块的指纹首先在标准布隆过滤器中查找,若未查找到,则该节点未命中,否则,继续查找第二部分,在第二部分找到完全匹配的指纹时,该节点命中,否则,该节点未命中。去冗文件及构建方法基于有限二叉树布隆过滤器实现文件的写入、读取和删除。本发明通过二次查询,减少了误判,具备低内存占用、低CPU使用、低额外空间占用、高去冗率存取和可扩展性优良的特点。
Description
技术领域
本发明属于冗余数据管理技术领域,涉及一种基于有限二叉树布隆过滤器的去冗文件系统及其构建方法,用于解决动态规模数据存储问题。
背景技术
在数字时代,数据的容量和复杂度呈爆炸性增长。据国际数据公司统计,世界上接近75%的数据是副本——也就是说,只有25%的数据是唯一的,而且超过90%的冗余数据存在于备份文件中。随着云存储和云计算应用的不断普及,在不久的将来数据中心可能会不断涌现。应用数据去冗技术存储这些大数据,可以减小数据的冗余率,提高数据存储和传输效率。
最常见的去冗方式是将完整文件切分成较小的文件块,找出其中的冗余数据。通过比较文件块的“指纹”——由文件块内容计算得出的MD5值,可以判断两个文件块是否相同。但是,块级去冗面临着如何快速查找庞大的索引,最小化额外存储空间和额外内存占用的问题。
基于文件块的在线去冗文件系统的关键问题可归结如下:
◆快速判断文件块是否存在并快速定位块。
◆合理的内存、存储器、处理器的使用。
◆理想的读写速度。
◆可扩展性强,可存储动态规模数据。
现有一些去冗设计应用哈希表查找大索引。但是为了达到快速查找的时间要求,哈希表的负载因子要远低于50%,以致和其他方式相比,哈希表占用的空间要多得多。这样就不能将整个哈希表装入到主存中,而外存的延迟很大。一种解决方案便是将哈希表存储到单独的额外固态硬盘(SSD)中。这种方案确实取得了不错的效果,但是SSD十分昂贵。
另一种方案是将布隆过滤器装载到内存中。布隆过滤器可以在常数时间内,以极大的正确率判定文件块是否存在。如果不存在,立即返回。而且布隆过滤器占用空间较少。若每个文件块的大小为8KB,则需要1GB的内存空间来存储8TB实际数据的信息,这种情况下的出错概率非常低,为2%。但是普通的定长布隆过滤器只能判定文件块不存在,不具备块定位的功能,而且随着存入数据量的增加,判定存在的出错概率也会不断上升。
发明内容
本发明根据传统去冗文件系统设计存在的问题,提出了一种基于有限二叉树布隆过滤器的去冗文件系统及其构建方法。
本发明首先提供了一种有限二叉树布隆过滤器,具有L层节点,L为正整数,第1层具有两个节点,设每层的节点数上限为Q,节点数首次达到上限的一层时,有限二叉树的高度A=[log2 Q],A由对以2为底Q的对数取整得到,[.]表示取整。则第i层的每个节点在第i+1层都具有两个子节点,i为1到A-1;第j层的每个节点在第j+1层都具有1个子节点,j为A到L。每个节点是一个二阶段布隆过滤器,每个二阶段布隆过滤器包括两部分,第一部分是标准布隆过滤器,第二部分存储了各数据块的指纹和存储地址。
第一部分的标准布隆过滤器,包括一个包含有K个哈希函数h11~h1K的集合和一个位数组;位数组中包含w个元素,依次对应1~w的整数,对每个待查找的数据块指纹,分别通过哈希函数h11~h1K计算哈希值,得到K个整数值;当位数组中对应K个整数值的元素都设置为1时,表示该指纹在标准布隆过滤器中命中,否则表示该指纹在该节点中不存在。
第二部分包括哈希函数h2、起始位置数组、结束位置数组和大数组;指纹对应的K个整数通过哈希函数h2计算,得到一个整数index;整数index所表示的一类数据块指纹,在大数组中存储的起始位置和结束位置,分别存储在起始位置数组和结束位置数组的第index元素中;将经过哈希函数h11~h1K的集合和哈希函数h2计算得到相同整数index的数据块指纹分为同一类数据块指纹;大数组中的每一项记录一个数据块的指纹、存储地址、引用次数和存储同类数据块指纹的下一项地址。
当某数据块的指纹在标准布隆过滤器中命中时,将该指纹对应的K个整数值输入第二部分,通过哈希函数h2计算得到整数index,在大数组中从起始位置数组第index元素记录的位置开始查找,在查询完大数组的当前项后,按照当前项所存储的下一项地址,找到对应的项继续查找,如果找到完全相同的指纹,表示该数据块为重复数据块,当前节点被命中,在大数组存储该指纹的项中更新引用次数;若直到结束位置数组第index元素记录的位置查询结束,都没有找到完全相同的指纹,则表示该指纹在该节点中不存在。
当某个数据块的指纹在所述的有限二叉树布隆过滤器的各个节点中都没有查找到,则该数据块为新数据块,在未载满的节点中加入该新数据块,具体是,将该新数据块的指纹经过节点中K个哈希函数h11~h1K计算得到K个整数,在节点中的位数组对应该K个整数的元素设置为1,在节点的大数组中新增一项,记录该新数据块的指纹、存储地址、引用次数和存储同类数据块指纹的下一项地址,同时在起始位置数组和结束位置数组中更新该新数据块指纹所属一类指纹在大数组中的起始位置和结束位置。
本发明还提供了一种基于上述的有限二叉树布隆过滤器的去冗文件系统,包括:文件系统接口、MD5生成器、有限二叉树布隆过滤器、索引文件和块存储器。文件系统接口接收外部应用程序发来的写入文件命令时,将待写入文件传给指纹生成器。指纹生成器将待写入文件进行定长划分,并为划分得到的每个数据块生成指纹。索引文件为每个文件建立一个索引,将该文件的各数据块的指纹和存储地址按块顺序写入索引中。文件系统接口在接收到外部应用程序发来的读取文件命令时,根据文件路径在索引文件中找到要读取文件的索引,根据索引中各数据块的地址,依次从块存储器中读取各数据块的内容并输出给外部应用程序。指纹生成器将各数据块及对应的指纹传送给有限二叉树布隆过滤器。有限二叉树布隆过滤器根据数据块的指纹,对数据块进行查重,当某个数据块为新数据块时,为该数据块申请存储地址,将申请的地址及数据块传给块存储器,并将数据块的指纹及存储地址传给索引文件,当某个数据块为重复数据块时,直接将该数据块的指纹及存储地址传给索引文件。块存储器将数据块的内容存入所申请的存储地址中。
本发明的一种基于有限二叉树布隆过滤器的去冗文件系统的构建方法,包括如下步骤:
步骤1:对待写入的文件进行定长分块,并计算每个数据块的指纹。
步骤2:将有限二叉树布隆过滤器中,未满载的节点保留在内存中,每层任选一个节点保留在内存中,部分满载的节点只保留第一部分在内存中。所述的有限二叉树布隆过滤器,第一层中左节点标记为0,右节点标记为1,同一父节点的左节点标记为0,右节点标记为1;第1层节点的索引值就是该节点的标记值,第2层到第A层的任一节点的索引值为父节点的索引值附带上该节点的标记值组成,第A+1层到第L层的任一节点的索引值就是父节点的索引值,索引值为由0和1组成的二进制串。
步骤3:将每个数据块的指纹输入有限二叉树布隆过滤器中进行查找,首先从内存中保留的节点中寻找索引值匹配的节点,并从所找到的各节点中查询数据块的指纹,如果查找到,执行步骤4,如果未查找到,执行步骤5;所述的索引值匹配是指:设索引值q位,如果数据块指纹的二进制串的前q位与索引值的q位相同,则说明数据块的指纹和节点的索引值匹配。
步骤4:该数据块为重复数据块,将与该数据块命中的节点处于同层的节点都取入内存中,并保证有限二叉树布隆过滤器的每一层的任一节点和未满载的节点都保留在内存中,然后取下一个数据块的指纹继续执行步骤3。
步骤5:该数据块为新数据块,为该数据块申请存储地址,块存储器将数据块的内容存入所申请的存储地址,并在有限二叉树布隆过滤器存储该数据块的信息;保证有限二叉树布隆过滤器未满载的节点都保留在内存中,然后取下一个数据块的指纹,继续执行步骤3。在未满载的节点中,寻找与该数据块的指纹匹配的索引值的节点,如果找到,存储新数据块的信息,如果没有找到,有限二叉树布隆过滤器最底一层与该数据块指纹匹配的索引值的节点生成新的子节点,将该新数据块的信息存储到索引值匹配的新节点中。
步骤6:当文件的所有数据块的指纹都经过有限二叉树布隆过滤器查找后,在索引文件中该文件对应的索引中,依据数据块在文件中的顺序,写入索引文件各数据块的指纹和存储地址。
步骤7:当外部应用程序发来读取文件命令时,根据文件路径在索引文件中找到要读取文件的索引,根据索引中各数据块的存储地址,依次从块存储器中读取各数据块的内容并输出给外部应用程序。
步骤8:当外部应用程序发来删除文件命令时,根据文件路径在索引文件中找到要删除文件的索引,根据索引找到各数据块的指纹和存储地址。对每个数据块的指纹在有限二叉树布隆过滤器中查找,在所找到的节点中查看该数据块的引用次数是否为1,若是,在根据该数据块的存储地址在块存储器中删除该数据块的内容,若引用次数大于1,则将引用次数-1。当要删除文件的各数据块都经过有限二叉树布隆过滤器的查找和处理后,在索引文件中删除该文件的索引。
本发明结合树形布隆过滤器和二阶段布隆过滤器的特点设计出有限二叉树布隆过滤器,并基于所述有限二叉树布隆过滤器提供了一种去冗文件系统和去冗文件系统构建方法。本发明具有如下优点和积极效果:
(1)由于每个节点都是一个二阶段布隆过滤器,并利用有限二叉树布隆过滤器存储文件数据块的特征值(指纹)及对应存储地址,二次查询,减少了误判;
(2)由于有限二叉树布隆过滤器的每一层都至少有一个节点载入内存,一旦在该层命中冗余块,随即载入该层的所有节点,根据局部性原理,接下来的文件块很有可能在该层命中,因此实现了很高的去冗率存取;
(3)本发明还具备低内存占用、低CPU使用、低额外空间占用、可扩展性优良的特点。
附图说明
图1是二阶段布隆过滤器的构造图;
图2是本发明的基于有限二叉树布隆过滤器的去冗文件系统的结构示意图;
图3是当层节点上限为8时的有限二叉树布隆过滤器结构示意图;
图4是数据块IO和计算的分离设计示意图;
图5是本发明的去冗文件系统的构建方法中写入文件的流程示意图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。通过足够详细的描述这些实施示例,使得本领域技术人员能够理解和实践本发明。在不脱离本发明的主旨和范围的情况下,可以对实施做出逻辑的、实现的和其他的改变。因此,以下详细说明不应该被理解为限制意义,本发明的范围仅仅由权利要求来限定。
数据块的指纹可以采用冲突率低的算法来设定,如MD5,SHA等算法,本发明具体实施的说明中,数据块的指纹采用MD5算法(Message-Digest Algorithm5,信息-摘要算法5)得到,得到的MD5值作为数据块的指纹。
本发明提供的有限二叉树布隆过滤器,具有L层节点,L为正整数,第1层具有两个节点,设每层的节点数上限为Q,A=[log2 Q],A是以2为底Q的对数的整数部分,[.]表示取整。第i层的每个节点在第i+1层都具有两个子节点,i为1到A-1;第j层的每个节点在第j+1层都具有1个子节点,j为A到L。每个节点是一个二阶段布隆过滤器。每个二阶段布隆过滤器包括两部分,第一部分是标准布隆过滤器,第二部分存储了各数据块的指纹和存储地址。每个节点存储数据块的信息都是有限的,节点的存储容量可由用户设定为固定值或者不一样的值。当某一节点不能再存储新的数据块信息时,表示该节点满载,否则,该节点未满载。数据块的信息包括数据块的指纹、存储地址和引用次数等等。
如图1所示,是二阶段布隆过滤器的一个构造图。图中,数据块的指纹用X1~Xn序列表示。第一部分的标准布隆过滤器,包括一个包含有K个哈希函数h11~h1K的集合和一个位数组;位数组中包含w个元素,依次对应1~w的整数,对每个待查找的数据块指纹,分别通过哈希函数h11~h1K计算哈希值,得到K个整数值;当位数组中对应K个整数值的元素都设置为1时,表示该指纹在标准布隆过滤器中命中,否则表示该指纹在该节点中不存在。第二部分包括哈希函数h2、起始位置数组、结束位置数组和大数组。将指纹对应的K个整数值通过哈希函数h2计算,得到一个整数index。整数index所表示的一类数据块指纹,在大数组中存储的起始位置和结束位置,分别存储在起始位置数组和结束位置数组的第index元素中。将经过哈希函数h11~h1K的集合和哈希函数h2计算得到相同整数index的数据块指纹分为同一类数据块指纹。大数组中的每一项记录一个数据块的指纹、存储地址、引用次数和存储同类数据块指纹的下一项地址。
图1中,每个数据块的MD5值利用K个哈希函数h11~h1K可以得到K个整数值。查看位数组对应这K个整数的元素是否置为1,如果全为1,则说明极大概率该块已经存入系统。否则,该块在该节点中不存在。若全为1,则去第二部分查看是否有完全一样的MD5值。
当某数据块的指纹在标准布隆过滤器中命中时,将该指纹对应的K个整数值输入第二部分,通过哈希函数h2计算得到整数index,在大数组中从起始位置数组第index元素记录的位置开始查找,在查询完大数组的当前项后,按照当前项所存储的下一项地址,找到对应的项继续查找,如果找到完全相同的指纹,表示该数据块为重复数据块,当前节点被命中,在大数组存储该指纹的项中更新引用次数;若直到结束位置数组第index元素记录的位置查询结束,都没有找到完全相同的指纹,则表示该指纹在该节点中不存在。
当某个数据块的指纹在所述的有限二叉树布隆过滤器的各个节点中都没有查找到,则该数据块为新数据块,在未载满的节点中加入该新数据块,具体是,将该新数据块的指纹经过节点中K个哈希函数h11~h1K计算得到K个整数,在节点中的位数组对应该K个整数的元素设置为1,在节点的大数组中新增一项,记录该新数据块的指纹、存储地址、引用次数和存储同类数据块指纹的下一项地址,同时在起始位置数组和结束位置数组中更新该新数据块指纹所属一类指纹在大数组中的起始位置和结束位置。
每个二阶段布隆过滤器中还包含存储块数St、存储容量Ca和块删除计数Co三个属性。容量是由位数组长度w及第一部分误判概率p决定的。由于在块删除时,即在大数组中删除某一项时,并没有对位数组进行修改,只是更新块删除计数Co。原本位数组有些位需要置0,以保证布隆过滤器的误判率小于定制的常数。本发明采取的机制是,当删除块数量达到存储容量的一定比重W时,利用大数组里的MD5数据重新计算,更新位数组中的元素值。数学证明,在删除块数在一定比重下,对布隆过滤器的误判率影响小。比重W可根据实际使用情况调整,一般根据误判概率p增加一个数量级来制定。
如图2所示,本发明基于所述的有限二叉树布隆过滤器的去冗文件系统,包括:文件系统接口1、指纹生成器2、有限二叉树布隆过滤器3、块存储器4和索引文件5。本发明实施例中的文件系统接口1可以采用FUSE(File system in Userspace,用户态文件系统)接口。文件系统接口1接收外部应用程序发出的写入或读取文件的命令,将待写入文件传给指纹生成器2,将读取的文件内容输出给外部应用程序。指纹生成器2将待写入文件定长划分成若干数据块,并对每个数据块生成指纹,块的指纹可以采用冲突率低的算法来设定,本发明实施例中,指纹是用MD5算法计算的MD5值。指纹生成器2将MD5值及对应的数据块传给有限二叉树布隆过滤器3。有限二叉树布隆过滤器3对每个数据块,查询该数据块的MD5值是否存在,如果不存在,为该数据块申请存储地址,并将申请的存储地址及数据块传给块存储器4,最后,将该数据块的MD5值及存储地址传给索引文件5;如果存在,该数据块为重复数据块,直接将该数据块的指纹及存储地址传送给索引文件5。块存储器4将数据块的内容存入所申请的存储地址。索引文件5为每个文件建立一个索引,将该文件的所有数据块的MD5值及存储地址按块顺序写入文件的索引中。文件系统接口1在接收到外部应用程序发来的读取文件的命令时,根据文件路径在索引文件4中找到要读取的文件的索引,然后根据索引中各数据块的地址,依次从块存储器4中读取各数据块的内容,输出给外部应用程序。
本发明实施例中,有限二叉树布隆过滤器中,第一层的两个节点,左节点标记为0,右节点标记为1,同一父节点的左节点标记为0,右节点标记为1。设有限二叉树布隆过滤器每层的节点数上限为2A,则对第1层到第A层的任一节点来说,该节点的索引值为父节点的索引值附带上该节点的标记值组成,第1层节点的索引值就是该节点的标记值,索引值是由0和1组成的二进制串。对第A+1层开始的任一节点来说,该节点的索引值就是父节点的索引值。
新数据块的信息存储在有限二叉树布隆过滤器中的节点,需要满足条件:设存储新数据块信息的节点的索引值具有q位,新数据块的指纹的二进制串的前q位与该节点的索引值匹配。数据块的信息包括数据块的指纹、数据块的存储地址、数据块的引用次数等。在未满载的节点的索引值中,寻找与该数据块指纹的二进制串前若干位相匹配的索引值,如果找到,将该数据块的信息存储到所找到的索引值对应的节点中。如果没有找到,则最底一层中,与该数据块指纹的二进制串前若干位匹配的索引值对应的节点生成新的子节点,将该新数据块信息存储到满足条件的新子节点中。
开始时,有限二叉树布隆过滤器生成第一层的两个节点,左边节点索引值以0,右边节点的索引值为1。根据数据块的MD5值的二进制串,将数据块的信息不断写入节点中,将以0为首位的MD5的二进制串对应的数据块信息存储在索引值为0的节点中,将以1为首位的MD5的二进制串对应的数据块信息存储在索引值为1的节点中。当数据块数超过两个节点的存储量时,第1层的两个节点分别生成两个子节点,具有同一父节点的两个子节点以0为左,以1为右,例如节点0的两个子节点的索引值分别为00和01。以此类推,存储新的数据块信息。
在有限二叉树布隆过滤器中查询数据块指纹时,首先根据数据块指纹的二进制串的前若干位选取内存中已装载的索引值匹配的节点,在所选节点中依次查询该数据块的指纹。如,MD5的二进制串为011…,以0为左,以1为右,则分别选取有限二叉树布隆过滤器第1层的左节点,第1层的左节点的右节点(即第2层的第2个节点),依次类推。
本发明中需要把部分节点载入内存。当占用内存达到设定上限时,将部分满载的节点写回主存,将剩下的部分满载节点的第二个部分(即存储MD5值和地址的部分)写回内存。未满载的节点需要完整保留在内存里,等待新数据块的写入。一般地,根据MD5算法,未满载节点都在同一层。最近命中冗余的节点层也需要载入内存,因为根据空间局部性原理,当一层的某个节点命中冗余后,接下来在同一节点命中冗余的概率更大。那么,一般需要把两层完整的节点信息载入内存。除此之外,其余层也应保留一个节点进行去冗检测。如果在某一节点被命中后,与该节点同层的节点将会被调入内存。因为有限二叉树布隆过滤器一层一层往下扩展节点,所以属于同个文件的数据块的MD5值最有可能存储在有限二叉树布隆过滤器的同一层上。当一个数据块命中某个节点,之后的同一文件的数据块很有可能命中该节点同一层中的节点。而且,只需要将二阶段布隆过滤器的第一部分载入到内存中,因为第二部分主要用来定位数据块。因为内存的使用要在合理范围以内,所以需要设定一层的节点数上限Q,并称之为有限二叉树布隆过滤器。
图3是每层节点数上限为8时有限二叉树布隆过滤器的结构示意图。阶段一、二和三分别表示本发明的去冗文件系统工作的不同模式。阶段一,去冗文件系统的节点较少,所有节点都放置在内存里,每次增加叶子节点的数量都是最底层节点数的两倍。阶段二,文件系统节点多,非命中层(近期没有命中冗余块的非最底层)只留下一个代表节点在内存里,每次增加叶子节点的数量都是最底层节点数的两倍。阶段三,节点数量非常多,非命中层只留下一个代表节点,每次增加叶子节点的数量都是固定的常数。文件系统初次运行时处于阶段一,即文件系统中的有限二叉布隆过滤器中只有两个刚刚建立的空节点,也就是0*BF和1*BF,0*代表任意以0为首位的二进制串,BF代表有限二叉树布隆过滤器节点。0*BF只存储MD5值首位为0的数据块的MD5值和存储地址。和0*BF类似,1*BF只存储MD5值首位为1的块的MD5值和地址。根据MD5算法的特点,新数据块的MD5值在两个节点中均匀分布。当其中一个节点装满时,会在该节点之下建立两个子节点。很明显,为了存储新块的MD5值和地址值,需要将有限二叉树布隆过滤器最底层(未满载)的节点装入内存。但也要将图3中的已满载的0*BF,00*BF和000*BF节点载入内存,因为需要利用它们来执行成员查询,即查询数据块是否在这些节点中。如果一个数据块在第二层的00*BF中命中,则将第二层的01*BF,10*BF和11*BF节点都载入内存来执行成员查询。根据空间局部性,之后的数据块命中00*BF,01*BF,10*BF和11*BF的可能性要比命中其它节点高得多。
为了提高写通量,设计了流水线模式来分别处理数据块的计算和数据块的存储,整体的写时间只等于这两部分所花时间的较大值。由于数据块MD5值的计算及有限二叉树布隆过滤器的操作所需要的时间和块存储时间接近,该文件系统的写通量和普通文件系统的写通量接近。如果在多磁盘硬件条件下引入多线程,每两个线程为一组,分别处理文件块的计算和IO操作,那么写通量将成倍增长。
如图4所示,是数据块IO操作和计算的分离设计示意图。Key1,C1分别是第一个数据块的MD5值和块内容,以此类推。对每一个新读入的数据块,如果计算时间小于IO操作时间,那么去冗文件系统的IO速率将和正常文件系统相同。图中所示为最简单的一个单核CPU和一块独立硬盘的情况。如果能在一个数据块的IO操作时间内完成一个块的相关计算,便可以达到和正常文件系统相仿的IO速率。如果有更多的核和独立磁盘,可以建立更多的线程提高IO速度。同时,也要尽可能的保证空间局部性。在设计中,每个数据块的计算时间包括计算MD5值,将MD5值转换为二进制字符串,有限二叉树布隆过滤器及元数据文件操作。花费时间最长的是用MD5算法计算MD5值。对有限二叉树布隆过滤器的操作很少涉及到磁盘读写,所以一般会执行几个固定的步骤,在瞬间完成。有时,有限二叉树布隆过滤器需要向硬盘写节点或从硬盘读取节点载入到内存之中,但是这些文件都很小。
在删除一个文件时,系统先根据索引文件里提供的MD5值找到所要删除文件的各数据块的指纹在有限二叉树布隆过滤器里的对应位置,并查看其存储的引用次数,如果引用次数为1,则无其他文件引用该块,可以将块内容删除,并把在有限二叉树布隆过滤器里的对应节点大数组中的项删除。如果一个节点里删除操作达到一定数量,那么利用大数组里的MD5数据重新计算节点中的位数组,更新标准布隆过滤器,减少误判。通过试验计算,发现由于一个文件的数据块指纹分布在一层的节点中,删除文件的操作对一个节点的影响较小,因此删除操作所要求的比重W很少达到,很少触发节点的更新计算。
如果将一台计算机作为有限二叉树布隆过滤器的一个节点,在每台计算机上又布置一个有限二叉树布隆过滤器,那么就组成了一个集群去冗存储系统。当然,多台计算机的节点组成一个有限二叉树布隆过滤器,该有限二叉树布隆过滤器与每台计算机上的有限二叉树布隆过滤器应对MD5查询的节点策略不同,但在每个二阶段布隆过滤器中的查询都是相同的。该集群去冗系统还可以进行MD5值的并行查询,文件内容的并行存取。
本发明基于所述的有限二叉树布隆过滤器,还提供了一种去冗文件系统的构建方法,主要包括如下八个步骤。写入文件的步骤如图5所示,包括步骤1至步骤6。
步骤1:当外部应用程序发来写入文件命令时,对待写入的文件进行定长分块,并计算每个数据块的指纹。
步骤2:将有限二叉树布隆过滤器中,未满载的节点保留在内存中,每层任选一个节点保留在内存中,部分满载的节点只保留第一部分在内存中。所述的有限二叉树布隆过滤器,第一层中左节点标记为0,右节点标记为1,同一父节点的左节点标记为0,右节点标记为1;第1层节点的索引值就是该节点的标记值,第2层到第A层的任一节点的索引值为父节点的索引值附带上该节点的标记值组成,第A+1层到第L层的任一节点的索引值就是父节点的索引值,索引值为由0和1组成的二进制串。
步骤3:将每个数据块的指纹输入有限二叉树布隆过滤器中进行查找,首先从内存中保留的节点中寻找索引值匹配的节点,并从所找到的各节点中查询数据块的指纹,如果查找到,执行步骤4,如果未查找到,执行步骤5;所述的索引值匹配是指:设索引值q位,如果数据块指纹的二进制串的前q位与索引值的q位相同,则说明数据块的指纹和节点的索引值匹配。
步骤4:该数据块为重复数据块,将与该数据块命中的节点处于同层的节点都取入内存中,并保证有限二叉树布隆过滤器的每一层的任一节点和未满载的节点都保留在内存中,然后取下一个数据块的指纹继续执行步骤3。
步骤5:该数据块为新数据块,为该数据块申请存储地址,块存储器将数据块的内容存入所申请的存储地址,并在有限二叉树布隆过滤器存储该数据块的信息;保证有限二叉树布隆过滤器未满载的节点都保留在内存中,然后取下一个数据块的指纹,继续执行步骤3。在未满载的节点中,寻找与该数据块的指纹匹配的索引值的节点,如果找到,存储新数据块的信息,如果没有找到,有限二叉树布隆过滤器最底一层与该数据块指纹匹配的索引值的节点生成新的子节点,将该新数据块的信息存储到索引值匹配的节点中。
步骤6:当文件的所有数据块的指纹都经过有限二叉树布隆过滤器查找后,在索引文件中该文件对应的索引中,依据数据块在文件中的顺序,写入索引文件各数据块的指纹和存储地址。
步骤7:当外部应用程序发来读取文件命令时,根据文件路径在索引文件中找到要读取文件的索引,根据索引中各数据块的存储地址,依次从块存储器中读取各数据块的内容并输出给外部应用程序。
步骤8:当外部应用程序发来删除文件命令时,根据文件路径在索引文件中找到要删除文件的索引,根据索引找到各数据块的指纹和存储地址。对每个数据块的指纹在有限二叉树布隆过滤器中查找,在所找到的节点中查看该数据块的引用次数是否为1,若是,在根据该数据块的存储地址在块存储器中删除该数据块的内容,若引用次数大于1,则将引用次数-1。当要删除文件的各数据块都经过有限二叉树布隆过滤器的查找和处理后,在索引文件中删除该文件的索引。
在步骤8进行删除数据块操作时,当某个数据块的信息在一个节点中被删除时,设置该节点内块删除计数Co的值加1,当当块删除计数Co达到存储容量的比重W时,利用大数组里的指纹重新计算,更新位数组。
数据块的指纹以MD5值来表示,并且设上一个数据块命中有限二叉树布隆过滤器的第H层的节点,此时需要将H层的节点都取入内存中。在有限二叉树布隆过滤器中查询当前数据块的指纹时,可采用下面步骤1.1~步骤1.6实现。
步骤1.1:设置计数器iter初值为H;如果当前数据块为所要查询的第一个数据块,此时设置H为1。
步骤1.2:判断iter值是否大于有限二叉树布隆过滤器的高度L,若是,返回块地址Addr的值-1,表示该数据块在当前有限二叉树布隆过滤器中不存在,然后退出;否则,执行步骤1.3。
步骤1.3:在内存中有限二叉树布隆过滤器第iter层的节点中查找数据块的指纹,如果查找到,返回块地址Addr,否则设置Addr的值为-1,返回Addr。
步骤1.4:判断Addr的值是否为-1,若是,执行步骤1.5,若否,执行步骤1.6。
步骤1.5:判断iter是否等于H,若是,则设置iter的值为1,若否,设置iter的值为H+1,然后,转步骤1.2执行;
步骤1.6:判断H和iter的值是否相等,若不相等,则将有限二叉树布隆过滤器的第H层的代表节点保留在内存,第H层的其余节点写回外存,然后将H的值设置为iter,将第H层的节点取入内存中,返回块地址Addr。
在某一节点的二阶段布隆过滤器中查询MD5值,可依据下面步骤2.1~步骤2.7实现。
步骤2.1:首先将数据块的MD5值分别通过K个哈希函数h11~h1K计算,得到K个整数值。如图1所示,本发明实施例中,X1X2......Xn为某一数据块的MD5值的二进制串,将每个二进制位Xi(i=1,2,…,n)分别经K个哈希函数运算,得到K个整数。
步骤2.2:查看节点的位数组中对应步骤2.1得到的K个整数值的元素是否都为1,若是,则继续执行步骤2.3,若否,说明该数据块的指纹在该节点中未命中,返回块地址Addr的值为-1,表示该数据块的指纹在该节点中不存在。
步骤2.3:将K个整数通过哈希函数h2进行计算,得到整数index。本发明实施例中本步骤的实现方法是:设变量secondIndex的初始值为0,然后将K个整数依次和secondIndex按位进行异或操作,每次操作的结果存入secondIndex,最后对secondIndex的值取模,得到整数index。
步骤2.4:从起始位置数组中读取第index元素的值pos,若pos为-1,则表示该节点中没有存储该类数据块指纹,返回块地址Addr的值为-1。起始位置数组中,在初始各元素的值都设置为-1,表示该节点中还未存入数据块的信息。若pos不为-1,则根据pos,在大数组中找到该类数据块指纹的起始地址。
步骤2.5:在大数组list中,查询list[pos]项中的MD5值,是否与数据块的MD5值相同,若不相同,执行步骤2.6,若相同,将list[pos]项中的引用次数加1,将list[pos]项中的存储地址赋给Addr,并返回。
步骤2.6:将list[pos]项中的下一项地址赋值给pos,然后判断pos是否为-1,若是,执行步骤2.7;若否,转步骤2.5执行。
步骤2.7:整数index所代表的一类数据块指纹在该节点中查询完毕,返回块地址Addr为-1,该数据块在该节点中未命中,停止查询。
当某个数据块为新数据块时,在有限二叉树布隆过滤器中需要写入该数据块的信息,具体可依据步骤3.1~步骤3.4找到所要写入的节点。
步骤3.1:设置变量iter的值为L,L为当前有限二叉树布隆过滤器的高度。
步骤3.2:判断iter的值是否小于1,若是,转至步骤3.4执行,若否,执行步骤3.3。
步骤3.3:判断第iter层的与数据块的指纹匹配的索引值的节点是否满载,若否,在该节点中存入新数据块的信息,结束本过程。若是,iter值减1,然后转步骤3.2执行。
步骤3.4:若有限二叉树布隆过滤器最底层的节点数不小于每层的节点数上限Q的一半,则进入如图3所示的阶段三,在阶段三,最底层的每个节点都生成一个子节点,然后转步骤3.1执行;否则进入如图3所示的阶段一或二,最底层的每个节点都生成两个子节点,然后转步骤3.1执行。
在找到所要写入的节点后,具体可通过下面步骤4.1~步骤4.5在所找到的节点中写入新数据块的信息。
步骤4.1:首先通过K个哈希函数h11~h1K分别计算新数据块的指纹,得到K个整数,具体计算过程与步骤2.1所给出的相同。然后将位数组中对应K个整数的元素的值置位1。
步骤4.2:将K个整数通过哈希函数h2进行计算,得到整数index。具体计算方法和步骤2.3中的相同。
步骤4.3:在起始位置数组中读取第index元素的值pos,若pos为-1,表示该节点没有存储该类数据块指纹,则将大数组中下一个空单元的位置G赋值给pos和结束位置数组中第index元素,然后执行步骤4.4;否则,当pos不等于-1,表示该节点中存储有该类数据块指纹,但未存储该新数据块的信息,直接读取结束位置数组中第index元素的值pla,然后执行步骤4.5。
步骤4.4:在大数组list[pos]项中写入新数据块的指纹、数据块的存储地址、引用次数1和下一项地址,下一项地址设置为-1。
步骤4.5:将大数组中下一个空单元的位置G赋值给大数组list[pla]项中的下一项地址,然后在list[G]项中在大数组list[pos]项中写入新数据块的指纹、数据块的存储地址、引用次数1和下一项地址-1。
设上一个数据块命中有限二叉树布隆过滤器的第H层的节点,此时将H层的节点都取入内存中,将待删除的数据块的MD5值输入有限二叉树布隆过滤器,然后进行如下步骤:
步骤5.1:设置计数器iter的初值为1;
步骤5.2:若iter的值大于有限二叉树布隆过滤器的高度,返回;
步骤5.3:若MD5值的二进制串的前iter位代表的节点不在内存中,载入该节点至内存。试着删除该节点中待删除数据块的MD5值所对应的值;
步骤5.4:若返回SUCCESS,当iter和H不相等时,将H层节点(代表节点除外)写回外存,iter层的节点载入内存,iter的值赋给H,返回。否则,进行步骤5.5;
步骤5.5:iter值加1,跳至步骤5.2。
在一个二阶段布隆过滤器进行数据块信息删除的操作,包括如下步骤:
步骤6.1:当在标准布隆过滤器中查找数据块对应的K个整数对应的位结果有0时,返回FAILURE,若对应的位结果都为1,则执行步骤6.2;
步骤6.2:变量secondIndex的值置为0;
步骤6.3:将K个整数依次和secondIndex按位进行异或操作,结果存入secondIndex;
步骤6.4:对secondIndex的值取模,存入index;
步骤6.5:从起始位置数组中读取第index元素的值pos;
步骤6.6:当pos等于-1时,返回FAILURE;
步骤6.7:若pos不为-1,判断大数组list中的项list[pos]中的哈希值和输入的MD5值是否相等,如果相等,则将list[pos]项中的引用次数减1;如果不相等,跳至步骤6.10;
步骤6.8:当list[pos]中的引用次数为0时,将list[pos]中的地址赋给Addr,在块存储器ChunkStore中删除Addr存储的数据。该二阶段布隆过滤器中的块删除计数TRC加1;
步骤6.9:若TRC的值达到存储容量的比重W时,利用大数组里的指纹重新计算更新位数组,然后TRC清零;释放项list[pos],返回SUCCESS;
步骤6.10:将list[pos]项中的下一项地址赋值给pos,然后跳至步骤6.6执行。
写入一个文件时,输入文件数据、文件路径和块大小L,将文件定长L分块,设块依次为c1,c2…cj,然后执行如下步骤:
步骤7.1:设参数i初值为1;
步骤7.2:若i小于等于j时,进行步骤7.3;否则返回;
步骤7.3:生成各数据块的MD5值,设依次为Key1,Key2…Keyj,在有限二叉树布隆过滤器LBTBF中查找Keyi对应地址,将返回值赋给变量Addr;
步骤7.4:若变量Addr的值为-1,将Addr置为一个未使用的地址,将(Keyi,Addr)值对写入LBTBF,将块ci的内容写入对应地址Addr,并将(Keyi,Addri)写入文件对应的索引文件;
步骤7.5:若变量Addr的值不为-1,将(Keyi,Addri)写入文件对应的索引文件,i值加1,跳至步骤7.2。
在读取一个文件时,通过文件系统接口1接收到文件路径,然后执行如下步骤,输出文件数据:
步骤8.1:根据文件路径找到对应的索引文件,将对应的索引文件载入内存;
步骤8.2:依次读取索引文件中各数据块的地址,设其分别为Addr1,Addr2,…Addrj;j为数据块总数;
步骤8.3:设参数i初值为1;
步骤8.4:若i小于等于j时,进行步骤8.5;否则返回;
步骤8.5:读取Addri地址存储的数据块内容,然后,i=i+1,跳至步骤8.4继续执行。
在删除一个文件时,通过文件系统接口1接收到文件路径,然后执行如下步骤:
步骤9.1:根据文件路径找到对应的索引文件,将对应的索引文件装入内存;
步骤9.2:依次读取索引文件中各数据块的MD5值:Key1,Key2,…Keyj;j为数据块总数;
步骤9.3:设计数参数i初值为1;
步骤9.4:若i小于等于j时,进行步骤9.5,否则返回;
步骤9.5:在有限二叉树布隆过滤器里删除Keyi,然后,i=i+1,跳至步骤9.4继续执行。
Claims (9)
1.一种有限二叉树布隆过滤器,其特征在于,该布隆过滤器具有L层节点,L为正整数,第1层具有两个节点,设每层的节点数上限为Q,A通过对以2为底Q的对数取整得到,则第i层的每个节点在第i+1层都具有两个子节点,i为1到A-1;第j层的每个节点在第j+1层都具有1个子节点,j为A到L;每个节点是一个二阶段布隆过滤器,每个二阶段布隆过滤器包括两部分,第一部分是标准布隆过滤器,第二部分存储了各数据块的指纹和存储地址;
第一部分的标准布隆过滤器,包括一个包含有K个哈希函数h11~h1K的集合和一个位数组;位数组中包含w个元素,依次对应1~w的整数,对每个待查找的数据块指纹,分别通过哈希函数h11~h1K计算哈希值,得到K个整数值;当位数组中对应K个整数值的元素都设置为1时,表示该指纹在标准布隆过滤器中命中,否则表示该指纹在该节点中不存在;
第二部分包括哈希函数h2、起始位置数组、结束位置数组和大数组;将指纹对应的K个整数值通过哈希函数h2计算,得到一个整数index;整数index所表示的一类数据块指纹,在大数组中存储的起始位置和结束位置,分别存储在起始位置数组和结束位置数组的第index元素中;将经过哈希函数h11~h1K的集合和哈希函数h2计算得到相同整数index的数据块指纹分为同一类数据块指纹;大数组中的每一项记录一个数据块的指纹、存储地址、引用次数和存储同类数据块指纹的下一项地址;
当某数据块的指纹在标准布隆过滤器中命中时,将该指纹对应的K个整数值输入第二部分,通过哈希函数h2计算得到整数index,在大数组中从起始位置数组第index元素记录的位置开始查找,在查询完大数组的当前项后,按照当前项所存储的下一项地址,找到对应的项继续查找,如果找到完全相同的指纹,表示该数据块为重复数据块,当前节点被命中,在大数组存储该指纹的项中更新引用次数;若直到结束位置数组第index元素记录的位置查询结束,都没有找到完全相同的指纹,则表示该指纹在该节点中不存在;
当某个数据块的指纹在所述的有限二叉树布隆过滤器的各个节点中都没有查找到,则该数据块为新数据块,在未载满的节点中加入该新数据块的信息,具体是,将该新数据块的指纹经过节点中K个哈希函数h11~h1K计算得到K个整数,在节点中的位数组对应该K个整数的元素设置为1,在节点的大数组中新增一项,记录该新数据块的指纹、存储地址、引用次数和存储同类数据块指纹的下一项地址,同时在起始位置数组和结束位置数组中更新该新数据块指纹所属一类指纹在大数组中的起始位置和结束位置。
2.根据权利要求1所述的有限二叉树布隆过滤器,其特征在于,所述的每个二阶段布隆过滤器还包含存储块数St、存储容量Ca和块删除计数Co三个属性;在大数组中删除某一项时,更新块删除计数Co,但此时不更新位数组,当块删除计数Co达到存储容量的比重W时,利用大数组里的指纹重新计算,更新位数组。
3.基于权利要求1或2所述的有限二叉树布隆过滤器的去冗文件系统,包含文件系统接口、索引文件、指纹生成器和块存储器,文件系统接口接收外部应用程序发来的写入文件命令时,将待写入文件传给指纹生成器,指纹生成器将待写入文件进行定长划分,并为划分得到的每个数据块生成指纹;索引文件为每个文件建立一个索引,将该文件的各数据块的指纹和存储地址按块顺序写入索引中;文件系统接口在接收到外部应用程序发来的读取文件命令时,根据文件路径在索引文件中找到要读取文件的索引,根据索引中各数据块的存储地址,依次从块存储器中读取各数据块的内容并输出给外部应用程序;其特征在于,所述的去冗文件系统还包括有限二叉树布隆过滤器;指纹生成器将各数据块及对应的指纹传送给有限二叉树布隆过滤器;有限二叉树布隆过滤器根据数据块的指纹,对数据块进行查重,当某个数据块为新数据块时,为该数据块申请存储地址,将申请的存储地址及数据块传给块存储器,将数据块的指纹及存储地址传给索引文件,当某个数据块为重复数据块时,直接将该数据块的指纹及存储地址传给索引文件;块存储器将数据块的内容存入所申请的存储地址中。
4.根据权利要求2所述的去冗文件系统,其特征在于,所述的指纹生成器采用MD5算法对数据块计算MD5值,得到的MD5值就是该数据块的指纹。
5.根据权利要求2所述的去冗文件系统,其特征在于,所述的有限二叉树布隆过滤器中,第一层的两个节点,左节点标记为0,右节点标记为1,标记同一父节点的左节点为0,右节点为1;第1层节点的索引值就是该节点的标记值,第2层到第A层的任一节点的索引值为父节点的索引值附带上该节点的标记值,第A+1层到第L层的任一节点的索引值就是父节点的索引值,索引值为由0和1组成的二进制串;将新数据块的信息存储在有限二叉树布隆过滤器中的节点,需要满足条件:设存储新数据块信息的节点的索引值具有q位,新数据块的指纹的二进制串的前q位与该节点的索引值匹配。
6.根据权利要求4所述的去冗文件系统,其特征在于,所述的有限二叉树布隆过滤器中,未满载的节点保留在内存中,每层有一个节点被保留在内存中,部分满载的节点只保留第一部分在内存中,当内存中的某一层的节点被命中时,将该层的所有节点都调入内存中。
7.根据权利要求2所述的去冗文件系统,其特征在于,所述的有限二叉树布隆过滤器的每个节点布置在一台计算机上,每台计算机上的节点是一个有限二叉树布隆过滤器。
8.基于权利要求1或2所述的有限二叉树布隆过滤器的去冗文件系统的构建方法,其特征在于,包括如下步骤:
步骤1:当外部应用程序发来读取文件命令时,对待写入的文件进行定长分块,并计算每个数据块的指纹;
步骤2:将有限二叉树布隆过滤器中,未满载的节点保留在内存中,每层任选一个节点保留在内存中,部分满载的节点只保留第一部分在内存中;所述的有限二叉树布隆过滤器,第一层中左节点标记为0,右节点标记为1,同一父节点的左节点标记为0,右节点标记为1;第1层节点的索引值就是该节点的标记值,第2层到第A层的任一节点的索引值为父节点的索引值附带上该节点的标记值组成,第A+1层到第L层的任一节点的索引值就是父节点的索引值,索引值为由0和1组成的二进制串;
步骤3:将每个数据块的指纹输入有限二叉树布隆过滤器中进行查找,首先从内存中保留的节点中寻找索引值匹配的节点,并从所找到的各节点中查询数据块的指纹,如果查找到,执行步骤4,如果未查找到,执行步骤5;所述的索引值匹配是指:设索引值q位,如果数据块指纹的二进制串的前q位与索引值的q位相同,则说明数据块的指纹和节点的索引值匹配;
步骤4:该数据块为重复数据块,将有限二叉树布隆过滤器中,与该数据块命中的节点处于同层的节点都取入内存中,并保证有限二叉树布隆过滤器的每一层的任一节点和未满载的节点都保留在内存中,然后取下一个数据块的指纹,继续执行步骤3;
步骤5:该数据块为新数据块,为该数据块申请存储地址,块存储器将数据块的内容存入所申请的存储地址,并在有限二叉树布隆过滤器存储该数据块的信息;保证有限二叉树布隆过滤器未满载的节点都保留在内存中,然后取下一个数据块的指纹,继续执行步骤3;
在未满载的节点中,寻找与该数据块的指纹匹配的索引值的节点,如果找到,存储新数据块的信息,如果没有找到,有限二叉树布隆过滤器最底一层与该数据块指纹匹配的索引值的节点生成新的子节点,将该新数据块的信息存储到索引值匹配的节点中;
步骤6:当文件的所有数据块的指纹都经过有限二叉树布隆过滤器查找后,在索引文件中该文件对应的索引中,依据数据块在文件中的顺序,写入索引文件各数据块的指纹和存储地址;
步骤7:当外部应用程序发来读取文件命令时,根据文件路径在索引文件中找到要读取文件的索引,根据索引中各数据块的存储地址,依次从块存储器中读取各数据块的内容并输出给外部应用程序;
步骤8:当外部应用程序发来删除文件命令时,根据文件路径在索引文件中找到要删除文件的索引,根据索引找到各数据块的指纹和存储地址,对每个数据块的指纹在有限二叉树布隆过滤器中查找,在所找到的节点中查看该数据块的引用次数是否为1,若是,在根据该数据块的存储地址在块存储器中删除该数据块的内容,若引用次数大于1,则将引用次数-1;当要删除文件的各数据块都经过有限二叉树布隆过滤器的查找和处理后,在索引文件中删除该文件的索引。
9.根据权利要求8所述的构建方法,其特征在于,所述的步骤1中,数据块的指纹采用MD5算法计算得到,得到的MD5值作为数据块的指纹。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310218249.5A CN103345472B (zh) | 2013-06-04 | 2013-06-04 | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310218249.5A CN103345472B (zh) | 2013-06-04 | 2013-06-04 | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103345472A true CN103345472A (zh) | 2013-10-09 |
CN103345472B CN103345472B (zh) | 2016-08-10 |
Family
ID=49280267
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310218249.5A Expired - Fee Related CN103345472B (zh) | 2013-06-04 | 2013-06-04 | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103345472B (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593406A (zh) * | 2013-10-17 | 2014-02-19 | 北京奇虎科技有限公司 | 一种静态资源标识处理方法及装置 |
CN104123102A (zh) * | 2014-07-25 | 2014-10-29 | 华为技术有限公司 | 一种ip硬盘及其数据处理方法 |
US20150143339A1 (en) * | 2013-11-19 | 2015-05-21 | Google Inc. | Callpath finder |
CN105228265A (zh) * | 2015-08-25 | 2016-01-06 | 深圳市唯传科技有限公司 | 一种基于物联网设备的分享方法及装置 |
CN105429968A (zh) * | 2015-11-06 | 2016-03-23 | 北京数智源科技股份有限公司 | 基于布隆过滤器的网络取证载荷归属方法及系统 |
CN105630955A (zh) * | 2015-12-24 | 2016-06-01 | 华中科技大学 | 一种高效动态的数据集合成员管理方法 |
CN105812203A (zh) * | 2016-03-07 | 2016-07-27 | 亚信科技(南京)有限公司 | 一种请求消息处理方法及设备 |
CN106649131A (zh) * | 2016-12-29 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种固态硬盘及其逻辑地址范围冲突监控方法、系统 |
CN107391034A (zh) * | 2017-07-07 | 2017-11-24 | 华中科技大学 | 一种基于局部性优化的重复数据检测方法 |
CN108205571A (zh) * | 2016-12-20 | 2018-06-26 | 航天信息股份有限公司 | 键值数据表的连接方法及装置 |
CN108804242A (zh) * | 2018-05-23 | 2018-11-13 | 武汉斗鱼网络科技有限公司 | 一种数据计数去重方法、系统、服务器及存储介质 |
CN110291518A (zh) * | 2017-02-09 | 2019-09-27 | 美光科技公司 | 合并树无用单元指标 |
CN110362590A (zh) * | 2018-04-02 | 2019-10-22 | 腾讯科技(深圳)有限公司 | 数据管理方法、装置、系统、电子设备及计算机可读介质 |
CN110413611A (zh) * | 2019-06-24 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
CN111208978A (zh) * | 2019-12-31 | 2020-05-29 | 杭州安恒信息技术股份有限公司 | 以Python为接口C++实现的字符布隆过滤器 |
KR20200107662A (ko) * | 2019-03-08 | 2020-09-16 | 한국전자통신연구원 | 블록체인 기반의 분산 데이터 공유 환경에서 데이터 공유 플랫폼을 위한 시스템, 상기 시스템에서 데이터 검색 방법 및 상기 시스템에서 검색 인덱스를 제공하는 방법 |
CN112148217A (zh) * | 2020-09-11 | 2020-12-29 | 北京浪潮数据技术有限公司 | 全闪存储系统的重删元数据的缓存方法、装置及介质 |
CN112328373A (zh) * | 2020-11-30 | 2021-02-05 | 中航机载系统共性技术有限公司 | 一种面向分布式仿真的数据分发服务dds自动发现方法 |
CN112487009A (zh) * | 2020-12-14 | 2021-03-12 | 北京字节跳动网络技术有限公司 | 数据更新方法、装置、设备、存储介质及程序产品 |
CN112528685A (zh) * | 2020-12-10 | 2021-03-19 | 南京航空航天大学 | 基于动态附加布隆过滤器的rfid数据冗余处理方法 |
CN113672170A (zh) * | 2021-07-23 | 2021-11-19 | 复旦大学附属肿瘤医院 | 一种冗余数据标记及去除方法 |
US11657092B2 (en) | 2018-12-26 | 2023-05-23 | Micron Technology, Inc. | Data tree with order-based node traversal |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508924A (zh) * | 2011-11-22 | 2012-06-20 | 上海达梦数据库有限公司 | 一种使用归并连接实现优美哈希连接的方法 |
CN102799617A (zh) * | 2012-06-19 | 2012-11-28 | 华中科技大学 | 多层Bloom Filter的构建及查询优化方法 |
-
2013
- 2013-06-04 CN CN201310218249.5A patent/CN103345472B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508924A (zh) * | 2011-11-22 | 2012-06-20 | 上海达梦数据库有限公司 | 一种使用归并连接实现优美哈希连接的方法 |
CN102799617A (zh) * | 2012-06-19 | 2012-11-28 | 华中科技大学 | 多层Bloom Filter的构建及查询优化方法 |
Cited By (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593406A (zh) * | 2013-10-17 | 2014-02-19 | 北京奇虎科技有限公司 | 一种静态资源标识处理方法及装置 |
JP2016539421A (ja) * | 2013-11-19 | 2016-12-15 | グーグル インコーポレイテッド | コールパスファインダ |
US10042746B2 (en) * | 2013-11-19 | 2018-08-07 | Google Llc | Callpath finder |
US20150143339A1 (en) * | 2013-11-19 | 2015-05-21 | Google Inc. | Callpath finder |
US9218169B2 (en) * | 2013-11-19 | 2015-12-22 | Google Inc. | Callpath finder |
KR20180032669A (ko) * | 2013-11-19 | 2018-03-30 | 구글 엘엘씨 | 콜경로 파인더 |
US20160092350A1 (en) * | 2013-11-19 | 2016-03-31 | Google Inc. | Callpath finder |
CN105745647B (zh) * | 2013-11-19 | 2019-06-04 | 谷歌有限责任公司 | 调用路径查找器 |
CN105745647A (zh) * | 2013-11-19 | 2016-07-06 | 谷歌公司 | 调用路径查找器 |
KR102154757B1 (ko) * | 2013-11-19 | 2020-09-10 | 구글 엘엘씨 | 콜경로 파인더 |
CN104123102B (zh) * | 2014-07-25 | 2017-06-20 | 华为技术有限公司 | 一种ip硬盘及其数据处理方法 |
CN104123102A (zh) * | 2014-07-25 | 2014-10-29 | 华为技术有限公司 | 一种ip硬盘及其数据处理方法 |
CN105228265A (zh) * | 2015-08-25 | 2016-01-06 | 深圳市唯传科技有限公司 | 一种基于物联网设备的分享方法及装置 |
CN105429968B (zh) * | 2015-11-06 | 2018-10-30 | 北京数智源科技股份有限公司 | 基于布隆过滤器的网络取证载荷归属方法及系统 |
CN105429968A (zh) * | 2015-11-06 | 2016-03-23 | 北京数智源科技股份有限公司 | 基于布隆过滤器的网络取证载荷归属方法及系统 |
CN105630955A (zh) * | 2015-12-24 | 2016-06-01 | 华中科技大学 | 一种高效动态的数据集合成员管理方法 |
CN105630955B (zh) * | 2015-12-24 | 2019-01-29 | 华中科技大学 | 一种高效动态的数据集合成员管理方法 |
CN105812203B (zh) * | 2016-03-07 | 2019-05-10 | 亚信科技(南京)有限公司 | 一种请求消息处理方法及设备 |
CN105812203A (zh) * | 2016-03-07 | 2016-07-27 | 亚信科技(南京)有限公司 | 一种请求消息处理方法及设备 |
CN108205571A (zh) * | 2016-12-20 | 2018-06-26 | 航天信息股份有限公司 | 键值数据表的连接方法及装置 |
CN106649131B (zh) * | 2016-12-29 | 2019-12-31 | 苏州浪潮智能科技有限公司 | 一种固态硬盘及其逻辑地址范围冲突监控方法、系统 |
CN106649131A (zh) * | 2016-12-29 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种固态硬盘及其逻辑地址范围冲突监控方法、系统 |
CN110291518A (zh) * | 2017-02-09 | 2019-09-27 | 美光科技公司 | 合并树无用单元指标 |
CN107391034A (zh) * | 2017-07-07 | 2017-11-24 | 华中科技大学 | 一种基于局部性优化的重复数据检测方法 |
CN107391034B (zh) * | 2017-07-07 | 2019-05-10 | 华中科技大学 | 一种基于局部性优化的重复数据检测方法 |
CN110362590A (zh) * | 2018-04-02 | 2019-10-22 | 腾讯科技(深圳)有限公司 | 数据管理方法、装置、系统、电子设备及计算机可读介质 |
CN108804242B (zh) * | 2018-05-23 | 2022-03-22 | 武汉斗鱼网络科技有限公司 | 一种数据计数去重方法、系统、服务器及存储介质 |
CN108804242A (zh) * | 2018-05-23 | 2018-11-13 | 武汉斗鱼网络科技有限公司 | 一种数据计数去重方法、系统、服务器及存储介质 |
US11657092B2 (en) | 2018-12-26 | 2023-05-23 | Micron Technology, Inc. | Data tree with order-based node traversal |
KR102544628B1 (ko) * | 2019-03-08 | 2023-06-19 | 한국전자통신연구원 | 블록체인 기반의 분산 데이터 공유 환경에서 데이터 공유 플랫폼을 위한 시스템, 상기 시스템에서 데이터 검색 방법 및 상기 시스템에서 검색 인덱스를 제공하는 방법 |
KR20200107662A (ko) * | 2019-03-08 | 2020-09-16 | 한국전자통신연구원 | 블록체인 기반의 분산 데이터 공유 환경에서 데이터 공유 플랫폼을 위한 시스템, 상기 시스템에서 데이터 검색 방법 및 상기 시스템에서 검색 인덱스를 제공하는 방법 |
CN110413611B (zh) * | 2019-06-24 | 2023-05-12 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
CN110413611A (zh) * | 2019-06-24 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据存储、查询方法及装置 |
CN111208978B (zh) * | 2019-12-31 | 2023-05-23 | 杭州安恒信息技术股份有限公司 | 以Python为接口C++实现的字符布隆过滤器 |
CN111208978A (zh) * | 2019-12-31 | 2020-05-29 | 杭州安恒信息技术股份有限公司 | 以Python为接口C++实现的字符布隆过滤器 |
CN112148217A (zh) * | 2020-09-11 | 2020-12-29 | 北京浪潮数据技术有限公司 | 全闪存储系统的重删元数据的缓存方法、装置及介质 |
CN112148217B (zh) * | 2020-09-11 | 2023-12-22 | 北京浪潮数据技术有限公司 | 全闪存储系统的重删元数据的缓存方法、装置及介质 |
CN112328373A (zh) * | 2020-11-30 | 2021-02-05 | 中航机载系统共性技术有限公司 | 一种面向分布式仿真的数据分发服务dds自动发现方法 |
CN112328373B (zh) * | 2020-11-30 | 2024-01-12 | 中航机载系统共性技术有限公司 | 一种面向分布式仿真的数据分发服务dds自动发现方法 |
CN112528685A (zh) * | 2020-12-10 | 2021-03-19 | 南京航空航天大学 | 基于动态附加布隆过滤器的rfid数据冗余处理方法 |
CN112487009A (zh) * | 2020-12-14 | 2021-03-12 | 北京字节跳动网络技术有限公司 | 数据更新方法、装置、设备、存储介质及程序产品 |
CN113672170A (zh) * | 2021-07-23 | 2021-11-19 | 复旦大学附属肿瘤医院 | 一种冗余数据标记及去除方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103345472B (zh) | 2016-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103345472A (zh) | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 | |
CN110471795B (zh) | 区块链状态数据恢复方法及装置、电子设备 | |
US8868926B2 (en) | Cryptographic hash database | |
CN110169008B (zh) | 一种基于一致性哈希算法的分布式数据冗余存储方法 | |
CN103874980B (zh) | 存储系统中的映射 | |
CN109445702B (zh) | 一种块级数据去重存储系统 | |
CN103902623B (zh) | 用于在存储系统上存取文件的方法和系统 | |
JP4921865B2 (ja) | アドレス関連テーブル構造を持つスキップ・リスト | |
CN105897921B (zh) | 一种结合指纹抽样和减少数据碎片的数据块路由方法 | |
CN102782643A (zh) | 使用布隆过滤器的索引搜索 | |
US20160350302A1 (en) | Dynamically splitting a range of a node in a distributed hash table | |
CN105487818A (zh) | 针对云存储系统中重复冗余数据的高效去重方法 | |
CN113961514B (zh) | 数据查询方法及装置 | |
CN102968498A (zh) | 数据处理方法及装置 | |
WO2005036403A1 (en) | Database management system, data structure generating method for database management system, and storage medium therefor | |
CN108089816B (zh) | 一种基于负载均衡的查询式重复数据删除方法及装置 | |
CN104025010A (zh) | 存储系统中的可变长度编码 | |
CN105426408A (zh) | 一种多索引的数据处理方法及装置 | |
CN105320773A (zh) | 一种基于Hadoop平台的分布式重复数据删除系统和方法 | |
CN102314485A (zh) | 哈希表添加、查找和删除方法及装置 | |
CN109542339B (zh) | 数据分层访问方法、装置、多层存储设备和存储介质 | |
CN103353901B (zh) | 基于Hadoop分布式文件系统的表数据的有序管理方法以及系统 | |
CN109358987A (zh) | 一种基于两级数据去重的备份集群 | |
CN104750432B (zh) | 一种数据存储方法及装置 | |
Conway et al. | Optimal hashing in external memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160810 Termination date: 20170604 |