CN101464901B - 一种对象存储设备中的对象查找方法 - Google Patents

一种对象存储设备中的对象查找方法 Download PDF

Info

Publication number
CN101464901B
CN101464901B CN2009100605520A CN200910060552A CN101464901B CN 101464901 B CN101464901 B CN 101464901B CN 2009100605520 A CN2009100605520 A CN 2009100605520A CN 200910060552 A CN200910060552 A CN 200910060552A CN 101464901 B CN101464901 B CN 101464901B
Authority
CN
China
Prior art keywords
record
bucket
mapping
hash
disk
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.)
Expired - Fee Related
Application number
CN2009100605520A
Other languages
English (en)
Other versions
CN101464901A (zh
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.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
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 Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN2009100605520A priority Critical patent/CN101464901B/zh
Publication of CN101464901A publication Critical patent/CN101464901A/zh
Application granted granted Critical
Publication of CN101464901B publication Critical patent/CN101464901B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

一种对象存储设备中的对象查找方法,属于计算机存储系统的数据存取方法,解决现有对象查找方法需要多次读盘以及查找效率低的问题。本发明包括系统初始化、记录插入、记录查找和记录删除步骤,执行系统初始化步骤后,等待并根据用户不同类型的操作请求,分别进入记录插入、记录查找和记录删除步骤。本发明直接定位要搜索的哈希桶块以及直接定位要查找的记录,将现有方法的块搜索O(n)性能和记录搜索O(n)性能都提高到O(1)的性能,避免了多次读盘和平均查找长度大的不足,从而提高了对象查找速度,同时,本发明记录管理采用动态线性哈希查找方法,空间利用率高。特别适合包含大量对象的对象存储设备。

Description

一种对象存储设备中的对象查找方法
技术领域
本发明属于计算机存储系统的数据存取方法,特别涉及一种对象存储设备中的对象查找方法。
背景技术
在对象存储设备中,每个对象都有一个唯一的对象标志符ObjectID,由于没有目录层次信息,所有的对象标志符构成了一个平面的名字空间。目前,还没有设立对象接口的磁盘,一种普遍的做法是用通用文件系统(如Ext2,Ext3)来对对象进行组织和管理:一个对象被映射成为一个文件,设备上的所有对象,位于文件系统中的一个大目录下面。因此,根据对象标志符定位对象索引节点的对象查找过程,被映射成为文件系统下由文件名找文件索引节点的过程,并且这一过程包括两个阶段:(1)从磁盘读取相应目录文件块到内存;(2)在相应内存块中,进行匹配查找。然而,传统文件系统在大目录下根据文件名查找文件索引节点信息时,会出现两个问题:一是目录文件需要多次读盘,二是查找子目录项的线性查找算法效率低下(它的开销为O(n))。一个对象存储设备可能包含2128个对象,面对如此巨大的平面名字空间,用传统文件系统下的方法查找对象时,上述问题将尤其突出,以至降低了对象查找操作的效率,从而严重影响了对象创建,对象删除和对象读写操作的性能。
有鉴于此,如何设计一种高效的对象查找方法,从而加快对象存储设备上对象相关操作的性能显得及其重要。
发明内容
本发明提出一种对象存储设备中的对象查找方法,解决现有对象存储设备上对象查找方法存在需要多次读盘以及线性查找算法效率低下的问题。
本发明将对象标识符ObjectID和磁盘上的对象索引节点的位置OnodeBlock,以记录的形式存放在磁盘块中,对象查找过程就是在这些磁盘块中查找记录过程。通过采用动态的线性哈希技术对记录进行管理,使得在多数情况下,只需要一次磁盘读操作便能找到对应的记录所在的磁盘块,而在对记录进行匹配的同时,由于再次采用哈希技术,也在多数情况下能一次找到想要的记录。由于减少了读盘操作次数和缩短了记录平均查找长度,使得对象查找操作的性能得到了极大的提高,特别是当OSD上包含数量巨大的对象时,这种方法的好处将更是明显。
本发明基于动态的线性哈希查找方法,构建在如下结构之上:记录,哈希桶,哈希函数和索引结构体;其中,
记录:记录由对象标志符ObjectID和对象索引节点块号BlockNum组成,其中对象标志符ObjectID为128位的无符号整数,对象索引节点块号BlockNum为相应对象索引节点(Onode)在磁盘上的块号。本发明中,一个对象索引节点占4096字节,里面存放对象大小、对象访问时间、对象修改时间、对象创建时间和对象数据的位置等信息。对象索引节点块号可以是磁盘上任何可能被分配的块号。在本发明的实施例中,对象索引节点块号为32位无符号整数,它表明对象存储设备最大可以支持232×4096字节,即16TB的容量;如果要支持更大的磁盘空间,对象索引节点块号可以取64或128位无符号整数。
哈希桶:哈希桶是一个存储单元,由磁盘上固定数目的磁盘块构成,它最多存放J个记录和一个32位的溢出桶地址,所有记录的对象标志符的哈希值的右边I位均相同,I由索引结构体中指定。本发明的实施例中规定一个哈希桶由一个磁盘块构成,为4096字节;因此,一个哈希桶所包含的记录数J为204个((4096×8-32)/(128+32)后取整)。当向一个已满的哈希桶中添加新记录时,就另外创建一个同样大小的溢出桶,哈希桶包含的溢出桶地址指向该溢出桶,新记录存放在该溢出桶中。本发明中,使用主记录号表示根据记录哈希值算出的记录在哈希桶中的位置;使用记录号表示哈希桶中动态查找的记录位置。
哈希函数:哈希函数HASH,它是一个将对象标志符ObjectID映射成一个较小的哈希值hash_value的函数。
索引结构体,是一个数据结构,由I、N、R、HT 4个参数组成,其中,I为二进制形式表示的哈希值中当前被使用的位数,N为当前哈希桶数,R为当前记录总数,HT为含有N个表项的哈希表,它的每个表项存放对应哈希桶在磁盘上的地址,以便通过它可以找到对应的哈希桶。索引结构体在磁盘上的位置放在磁盘的超级块中。
本发明的记录通过哈希桶存放在磁盘上,索引结构体存放在磁盘上,当在对象存储设备上进行对象查找,创建,删除时,哈希桶中的内容被读到内存中的映射桶中、索引结构体被读到内存中的映射结构体中进行操作,映射桶的存储空间大小和哈希桶相同,映射结构体的数据结构和索引结构体相同;操作后如果内存中的映射桶中的内容和映射结构体发生了变化,就将相关的数据写回到磁盘中原哈希桶和索引结构体的对应位置,以保证磁盘上存储的结构能正确反映当前对象存储设备上的对象名字空间。
本发明的一种对象存储设备中的对象查找方法,包括:
(1)系统初始化步骤:读取磁盘上的索引结构体块,根据其内容设置内存索引结构体的内容,等待用户操作,根据用户操作类型,分别转步骤(2)、(3)、(4);
(2)记录插入步骤:创建一个新对象时,将一条新的记录添加到对应的哈希桶中,同时,判断当前记录总数/当前哈希桶数的值是否超过给定阈值,以决定是否要添加一个新哈希桶到哈希表中;等待用户操作,分别转步骤(2)、(3)、(4);
(3)记录查找步骤:在读对象,写对象或者查看对象属性信息时进行,根据对象标志符,通过哈希表,在哈希桶中搜索记录是否存在,是则返回要查找的记录,否则返回空记录信息;等待用户操作,分别转步骤(2)、(3)、(4);
(4)记录删除步骤:在删除一个已存在的对象时,删除相应的一条记录;等待用户操作,分别转步骤(2)、(3)、(4);
所述步骤(2)、(3)、(4)根据用户操作类型独立运行。
所述的对象查找方法,其特征在于:
(1).所述系统初始化步骤,顺序进行下述过程:
(1.1)根据磁盘的超级块信息,找到磁盘上索引结构体所在的磁盘块号W,根据磁盘块号W,将磁盘上索引结构体内容读到内存中;
(1.2)在内存中建立映射结构体,将映射结构体的内容,设置为读取的索引结构体的I、R、N、HT;
(1.3)等待用户操作,根据用户操作类型,分别转步骤(2)、(3)、(4);
(2).所述记录插入步骤,根据用户创建对象操作,进行下述过程:
(2.1)从内存映射结构体中,取参数I、N、R、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将其换算为整数,记为M,置R为R+1,将区分哈希桶是否要分裂的标志Splitflag置为0;
(2.2)判断是否M<N,是则顺序进行,否则转过程(2.10);
(2.3)将第一操作桶址D1置为HT中第M项的值,将块号为D1的磁盘块内容读到内存中的第一映射桶;
(2.4)主记录号H置为所述哈希值除以J的余数,第一记录号F初始化为主记录号H;
(2.5)在第一映射桶中取出第F个记录,判断该记录是否为空记录,是则顺序进行,否则转过程(2.7);
(2.6)将新记录添加到第一映射桶中第F个记录的位置,同时将第一映射桶的内容写回到块号为D1的磁盘块中;转过程(2.12);
(2.7)第一记录号F+1后除以J,所得余数赋予F,判断是否F=H,是则顺序进行,否则转过程(2.5);
(2.8)判断第一映射桶是否有溢出桶,是则顺序进行,否则转过程(2.11);
(2.9)将D1置为第一映射桶的溢出桶地址,将块号为D1的磁盘块内容从磁盘读到内存中的第一映射桶,转过程(2.4);
(2.10)将M置为M-2(I-1),转过程(2.3);
(2.11)在磁盘上分配块号为V的磁盘块作为第一映射桶的溢出桶,将第一映射桶的内容写回到块号为D1的磁盘块中;将第一映射桶的所有内容置为空,将新记录添加到第一映射桶中第H条记录位置,将第一操作桶址D1置为V,将第一映射桶的内容写回到块号为D1的磁盘块中;
(2.12)判断是否R/N>t,t为给定的阈值,是则顺序进行,否则转过程(2.22);
(2.13)在磁盘上分配块号为U的磁盘块为一个新哈希桶,将HT的第N项值置为U,将N置为N+1;
(2.14)判断是否N>2I,是则顺序进行,否则转过程(2.16);
(2.15)将I置为I+1;
(2.16)判断N-1的I位二进制形式第一位是否为1,是则顺序进行,否则转过程(2.23);
(2.17)将N-1的I位二进制形式的低I-1位换算成整数,记为K,将第二操作桶址D2置为HT中第K项的值,将块号为D2的磁盘块内容读到内存中的第二映射桶,第二记录号S初始化为0;将第一操作桶址D1置为HT中第N-1项的值,将块号为D1的磁盘块内容读到内存中的第一映射桶,将Splitflag置为1;
(2.18)在第二映射桶中取出第S个记录,判断该记录哈希值的二进制形式从右往左的第I位是否等于1,是则将第二映射桶中第S个记录置为空,将第二映射桶的内容写回到块号为D2的磁盘块中,转过程(2.4),否则顺序进行;
(2.19)第二记录号S+1后除以J,所得余数赋予记录号S,判断是否S=0,是则顺序进行,否则转过程(2.18);
(2.20)判断第二映射桶是否有溢出桶,是则顺序进行,否则置Splitflag=0,转过程(2.23);
(2.21)将D2置为第二映射桶的溢出桶地址,将溢出桶内容从磁盘读到内存中的第二映射桶,转过程(2.18);
(2.22)判断是否Splitflag=0,是则顺序进行,否则转过程(2.19);
(2.23)将内存中的映射结构体内容写回到磁盘块W中,等待用户操作;
(3).所述记录查找步骤,顺序进行下述过程:
(3.1)从内存映射结构体中,取参数I、N、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将该低I位二进制数换算为整数,记为M;
(3.2)判断是否M<N,是则顺序进行,否则转过程(3.9);
(3.3)将块号为HT中第M项值的磁盘块内容读到内存中的映射桶;
(3.4)主记录号H置为哈希值除以J的余数,记录号A初始化为主记录号H;
(3.5)在映射桶中取出第A个记录,判断该记录的关键字是否为要查找的对象标志符,是则顺序进行,否则转过程(3.7);
(3.6)返回第A个记录,转过程(3.12);
(3.7)记录号A+1后除以J,所得余数赋予记录号A,判断是否A=H,是则顺序进行,否则转过程(3.5);
(3.8)判断映射桶是否有溢出桶,是则顺序进行,否则转过程(3.11);
(3.9)将溢出桶内容从磁盘读到内存中的映射桶,转过程(3.5)
(3.10)将M设置为M-2(I-1),转过程(3.3);
(3.11)返回空记录;
(3.12)等待用户操作;
(4).所述记录删除步骤,进行下述过程:
(4.1)从内存映射结构体中,取参数I、N、R、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将该低I位二进制数换算为整数,记为M;
(4.2)判断是否M<N,是则顺序进行,否则转过程(4.9);
(4.3)将操作桶址D置为HT中第M项的值,将块号为D的磁盘块内容读到内存中的映射桶;
(4.4)主记录号H置为哈希值除以J的余数,记录号A初始化为主记录号H;
(4.5)在映射桶中取出第A个记录,判断该记录的关键字是否为要查找的对象标志符,是则顺序进行,否则转过程(4.7);
(4.6)删除映射桶中第A个记录,将映射桶的内容写回到块号为D的磁盘块中,将R置为R-1,将内存中的映射结构体内容写回到磁盘块W中,转过程(4.11);
(4.7)记录号A+1后除以J,所得余数赋予记录号A,判断是否A=H,是则顺序进行,否则转过程(4.5);
(4.8)判断映射桶是否有溢出桶,是则顺序进行,否则转过程(4.11);
(4.9)将操作桶址D置为映射桶的溢出桶地址,将溢出桶内容从磁盘读到内存中的映射桶,转过程(4.5)
(4.10)将M设置为M-2(I-1),转过程(4.3);
(4.11)等待用户操作。
所述的对象查找方法,所述记录插入步骤中,阈值t=P×J,P为实数,0<P<1,P过小时,生成的空闲哈希桶过多,哈希表过大,磁盘空间浪费多;P过大时,可能有较多的哈希桶有溢出桶,查找效率下降;J为一个哈希桶最多存放的记录数。
与现有方法采用线性搜索技术查找所有记录的哈希桶块和块中记录不同,本发明直接定位要搜索的哈希桶块以及直接定位要查找的记录,将现有方法的块搜索O(n)性能和记录搜索O(n)性能都提高到O(1)的性能,避免了现有方法导致的多次读盘和平均查找长度大的不足,从而达到了提高对象查找速度的目的。此外,由于本发明的记录管理采用的是动态的线性哈希查找方法,空间利用率高。具体而言,本发明具有如下优势和效果:
(1)在对象标志符到对象索引节点磁盘块号的查找过程中,多数情况只需一次磁盘读操作,就能找到包含对应记录的桶所在的磁盘块,避免了将所有的桶都逐一读到内存中来的费时的磁盘I/O操作,加快对象查找操作的速度。
(2)在内存中对映射桶中的记录进行匹配时,由于也采用了哈希查找,多数情况下一次查找能定位记录,查找速度快。
(3)哈希表的大小,哈希桶的个数,根据记录的多少动态扩展,它们每次最多增加一个,哈希桶的个数与对象存储设备上的对象个数维持在一定的比例以内,不存在表项目数太小,导致多个记录映射到同一个桶中,冲突过多的情况,也不存在哈希表的表项目数太大,导致大量桶中存在空闲记录,磁盘空间浪费严重的情况。
附图说明
图1是本发明的流程示意图。
图2是本发明的初始化步骤流程图。
图3(a)、图3(b)是本发明的记录插入步骤流程图。
图4是本发明的记录查找步骤流程图。
图5是本发明的记录删除步骤流程图。
具体实施方式
本发明的实施例中,哈希函数HASH定义如下:
Unsigned int HASH(char key[16])
     {
unsigned int value;/*用来计算哈希值*/
int   index;     /*用来循环随机值*/
value=0x158F43AF;/*设置初始随机值*/
for(index=0;index<16;index++)
  value=(value+(key[index]<<(index*7%26)))&0x7FFFFFFF;
value=(3703518243*value+0x13579bd)& 0x7FFFFFFF;
return value;/*返回哈希值*/
}
这是一个哈希值分布很均匀的函数。决定阈值t的P取0.85,从而t=P×J=0.85×204=173.4,使得磁盘空间利用率和查找效率达到很好的平衡。
图1是本发明的流程示意图,对象存储设备启动时,执行系统初始化步骤,然后,对象存储设备循环等待用户的操作。如果对象存储设备接收到了用户的操作请求,则判断操作的类型,然后根据对象操作的不同类型,分别进入不同的操作步骤:当用户的请求为创建一个新对象时,它就进入记录插入步骤;当用户的请求为读、写一个对象等一些要获取对象元数据信息的操作时,它就进入记录查找步骤;当用户的请求为删除一个对象时,它就进入记录删除步骤。所述操作步骤完成后,对象存储设备再次等待用户的操作,并根据操作类型进行相应处理。
图2是本发明的初始化步骤流程图,顺序进行下述过程:
(1)根据磁盘的超级块信息,找到磁盘上索引结构体所在的磁盘块号W,根据磁盘块号W,将磁盘上索引结构体内容读到内存中;
(2)在内存中建立映射结构体,将映射结构体的内容,设置为读取的索引结构体的I、R、N、HT;
(3)等待用户操作,根据用户操作类型,分别转步骤(2)、(3)、(4);
图3(a)、图3(b)是本发明的记录插入步骤流程图,进行下述过程:
(1)从内存映射结构体中,取参数I、N、R、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将其换算为整数,记为M,置R为R+1,将区分哈希桶是否要分裂的标志Splitflag置为0;
(2)判断是否M<N,是则顺序进行,否则转过程(10);
(3)将第一操作桶址D1置为HT中第M项的值,将块号为D1的磁盘块内容读到内存中的第一映射桶;
(4)主记录号H置为所述哈希值除以204的余数,第一记录号F初始化为主记录号H;
(5)在第一映射桶中取出第F个记录,判断该记录是否为空记录,是则顺序进行,否则转过程(7);
(6)将新记录添加到第一映射桶中第F个记录的位置,同时将第一映射桶的内容写回到块号为D1的磁盘块中;转过程(12);
(7)第一记录号F+1后除以204,所得余数赋予F,判断是否F=H,是则顺序进行,否则转过程(5);
(8)判断第一映射桶是否有溢出桶,是则顺序进行,否则转过程(11);
(9)将D1置为第一映射桶的溢出桶地址,将块号为D1的磁盘块内容从磁盘读到内存中的第一映射桶,转过程(4);;
(10)将M置为M-2(I-1),转过程(3);
(11)在磁盘上分配块号为V的磁盘块作为第一映射桶的溢出桶,将第一映射桶的内容写回到块号为D1的磁盘块中;将第一映射桶的所有内容置为空,将新记录添加到第一映射桶中第H条记录位置,将第一操作桶址D1置为V,将第一映射桶的内容写回到块号为D1的磁盘块中;
(12)判断是否R/N>173.4,是则顺序进行,否则转过程(22);
(13)在磁盘上分配块号为U的磁盘块为一个新哈希桶,将HT的第N项值置为U,将N置为N+1;
(14)判断是否N>2I,是则顺序进行,否则转过程(16);
(15)将I置为I+1;
(16)判断N-1的I位二进制形式第一位是否为1,是则顺序进行,否则转过程(23);
(17)将N-1的I位二进制形式的低I-1位换算成整数,记为K,将第二操作桶址D2置为HT中第K项的值,将块号为D2的磁盘块内容读到内存中的第二映射桶,第二记录号S初始化为0;将第一操作桶址D1置为HT中第N-1项的值,将块号为D1的磁盘块内容读到内存中的第一映射桶,将Splitflag置为1;
(18)在第二映射桶中取出第S个记录,判断该记录哈希值的二进制形式从右往左的第I位是否等于1,是则将第二映射桶中第S个记录置为空,将第二映射桶的内容写回到块号为D2的磁盘块中,转过程(4),否则顺序进行;
(19)第二记录号S+1后除以204,所得余数赋予记录号S,判断是否S=0,是则顺序进行,否则转过程(18);
(20)判断第二映射桶是否有溢出桶,是则顺序进行,否则置Splitflag=0,转过程(23);
(21)将D2置为第二映射桶的溢出桶地址,将溢出桶内容从磁盘读到内存中的第二映射桶,转过程(18);
(22)判断是否Splitflag=0,是则顺序进行,否则转过程(19);
(23)将内存中的映射结构体内容写回到磁盘块W中,等待用户操作;
图4是本发明的记录查找步骤流程图,顺序进行下述过程:
(1)从内存映射结构体中,取参数I、N、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将该低I位二进制数换算为整数,记为M;
(2)判断是否M<N,是则顺序进行,否则转过程(9);
(3)将块号为HT中第M项值的磁盘块内容读到内存中的映射桶;
(4)主记录号H置为哈希值除以204的余数,记录号A初始化为主记录号H;
(5)在映射桶中取出第A个记录,判断该记录的关键字是否为要查找的对象标志符,是则顺序进行,否则转过程(7);
(6)返回第A个记录,转过程(12);
(7)记录号A+1后除以204,所得余数赋予记录号A,判断是否A=H,是则顺序进行,否则转过程(5);
(8)判断映射桶是否有溢出桶,是则顺序进行,否则转过程(11);
(9)将溢出桶内容从磁盘读到内存中的映射桶,转过程(5)
(10)将M设置为M-2(I-1),转过程(3);
(11)返回空记录;
(12)等待用户操作;
图5是本发明的记录删除步骤流程图,进行下述过程:
(1)从内存映射结构体中,取参数I、N、R、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将该低I位二进制数换算为整数,记为M;
(2)判断是否M<N,是则顺序进行,否则转过程(9);
(3)将操作桶址D置为HT中第M项的值,将块号为D的磁盘块内容读到内存中的映射桶;
(4)主记录号H置为哈希值除以204的余数,记录号A初始化为主记录号H;
(5)在映射桶中取出第A个记录,判断该记录的关键字是否为要查找的对象标志符,是则顺序进行,否则转过程(7);
(6)删除映射桶中第A个记录,将映射桶的内容写回到块号为D的磁盘块中,将R置为R-1,将内存中的映射结构体内容写回到磁盘块W中,转过程(11);
(7)记录号A+1后除以204,所得余数赋予记录号A,判断是否A=H,是则顺序进行,否则转过程(5);
(8)判断映射桶是否有溢出桶,是则顺序进行,否则转过程(11);
(9)将操作桶址D置为映射桶的溢出桶地址,将溢出桶内容从磁盘读到内存中的映射桶,转过程(5)
(10)将M设置为M-2(I-1),转过程(3);
(11)等待用户操作。

Claims (2)

1.一种对象存储设备中的对象查找方法,包括:
(1)系统初始化步骤:顺序进行下述过程:
(1.1)根据磁盘的超级块信息,找到磁盘上索引结构体所在的磁盘块号W,根据磁盘块号W,将磁盘上索引结构体内容读到内存中;
(1.2)在内存中建立映射结构体,将映射结构体的内容,设置为读取的索引结构体的I、R、N、HT;
(1.3)等待用户操作,根据用户操作类型,分别转步骤(2)、(3)、(4);
(2)记录插入步骤:创建一个新对象时,进行下述过程:
(2.1)从内存映射结构体中,取参数I、N、R、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将其换算为整数,记为M,置R为R+1,将区分哈希桶是否要分裂的标志Splitflag置为0;
(2.2)判断是否M<N,是则顺序进行,否则转过程(2.10);
(2.3)将第一操作桶址D1置为HT中第M项的值,将块号为D1的磁盘块内容读到内存中的第一映射桶;
(2.4)主记录号H置为所述哈希值除以J的余数,第一记录号F初始化为主记录号H;J为一个哈希桶最多存放的记录数;
(2.5)在第一映射桶中取出第F个记录,判断该记录是否为空记录,是则顺序进行,否则转过程(2.7);
(2.6)将新记录添加到第一映射桶中第F个记录的位置,同时将第一映射桶的内容写回到块号为D1的磁盘块中;转过程(2.12);
(2.7)第一记录号F+1后除以J,所得余数赋予F,判断是否F=H,是则顺序进行,否则转过程(2.5);
(2.8)判断第一映射桶是否有溢出桶,是则顺序进行,否则转过程(2.11);
(2.9)将D1置为第一映射桶的溢出桶地址,将块号为D1的磁盘块内容从磁盘读到内存中的第一映射桶,转过程(2.4);
(2.10)将M置为M-2(I-1),转过程(2.3);
(2.11)在磁盘上分配块号为V的磁盘块作为第一映射桶的溢出桶,将第一映射桶的内容写回到块号为D1的磁盘块中;将第一映射桶的所有内容置为空,将新记录添加到第一映射桶中第H条记录位置,将第一操作桶址D1置为V,将第一映射桶的内容写回到块号为D1的磁盘块中;
(2.12)判断是否R/N>t,t为给定的阈值,是则顺序进行,否则转过程(2.22);
(2.13)在磁盘上分配块号为U的磁盘块为一个新哈希桶,将HT的第N项值置为U,将N置为N+1;
(2.14)判断是否N>2I,是则顺序进行,否则转过程(2.16);
(2.15)将I置为I+1;
(2.16)判断N-1的I位二进制形式第一位是否为1,是则顺序进行,否则转过程(2.23);
(2.17)将N-1的I位二进制形式的低I-1位换算成整数,记为K,将第二操作桶址D2置为HT中第K项的值,将块号为D2的磁盘块内容读到内存中的第二映射桶,第二记录号S初始化为0;将第一操作桶址D1置为HT中第N-1项的值,将块号为D1的磁盘块内容读到内存中的第一映射桶,将Splitflag置为1;
(2.18)在第二映射桶中取出第S个记录,判断该记录哈希值的二进制形式从右往左的第I位是否等于1,是则将第二映射桶中第S个记录置为空,将第二映射桶的内容写回到块号为D2的磁盘块中,转过程(2.4),否则顺序进行;
(2.19)第二记录号S+1后除以J,所得余数赋予记录号S,判断是否S=0,是则顺序进行,否则转过程(2.18);
(2.20)判断第二映射桶是否有溢出桶,是则顺序进行,否则置Splitflag=0,转过程(2.23);
(2.21)将D2置为第二映射桶的溢出桶地址,将溢出桶内容从磁盘读到内存中的第二映射桶,转过程(2.18);
(2.22)判断是否Splitflag=0,是则顺序进行,否则转过程(2.19);
(2.23)将内存中的映射结构体内容写回到磁盘块W中,等待用户操作,分别转步骤(2)、(3)、(4);
(3)记录查找步骤:在读对象,写对象或者查看对象属性信息时进行,顺序进行下述过程:
(3.1)从内存映射结构体中,取参数I、N、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将该低I位二进制数换算为整数,记为M;
(3.2)判断是否M<N,是则顺序进行,否则转过程(3.9);
(3.3)将块号为HT中第M项值的磁盘块内容读到内存中的映射桶;
(3.4)主记录号H置为哈希值除以J的余数,记录号A初始化为主记录号H;
(3.5)在映射桶中取出第A个记录,判断该记录的关键字是否为要查找的对象标志符,是则顺序进行,否则转过程(3.7);
(3.6)返回第A个记录,转过程(3.12);
(3.7)记录号A+1后除以J,所得余数赋予记录号A,判断是否A=H,是则顺序进行,否则转过程(3.5);
(3.8)判断映射桶是否有溢出桶,是则顺序进行,否则转过程(3.11);
(3.9)将溢出桶内容从磁盘读到内存中的映射桶,转过程(3.5);
(3.10)将M设置为M-2(I-1),转过程(3.3);
(3.11)返回空记录;
(3.12)等待用户操作,分别转步骤(2)、(3)、(4);
(4)记录删除步骤:在删除一个已存在的对象时,进行下述过程:
(4.1)从内存映射结构体中,取参数I、N、R、HT,以对象标志符为关键字,根据哈希函数,计算出哈希值,取出哈希值对应的二进制形式的低I位,并将该低I位二进制数换算为整数,记为M;
(4.2)判断是否M<N,是则顺序进行,否则转过程(4.9);
(4.3)将操作桶址D置为HT中第M项的值,将块号为D的磁盘块内容读到内存中的映射桶;
(4.4)主记录号H置为哈希值除以J的余数,记录号A初始化为主记录号H;
(4.5)在映射桶中取出第A个记录,判断该记录的关键字是否为要查找的对象标志符,是则顺序进行,否则转过程(4.7);
(4.6)删除映射桶中第A个记录,将映射桶的内容写回到块号为D的磁盘块中,将R置为R-1,将内存中的映射结构体内容写回到磁盘块W中,转过程(4.11);
(4.7)记录号A+1后除以J,所得余数赋予记录号A,判断是否A=H,是则顺序进行,否则转过程(4.5);
(4.8)判断映射桶是否有溢出桶,是则顺序进行,否则转过程(4.11);
(4.9)将操作桶址D置为映射桶的溢出桶地址,将溢出桶内容从磁盘读到内存中的映射桶,转过程(4.5);
(4.10)将M设置为M-2(I-1),转过程(4.3);
(4.11)等待用户操作,分别转步骤(2)、(3)、(4);
所述步骤(2)、(3)、(4)根据用户操作类型独立运行;
所述记录由对象标志符和对象索引节点块号组成,其中对象标志符为128位的无符号整数,对象索引节点块号为相应对象索引节点在磁盘上的块号;
所述索引结构体,是一个数据结构,由I、N、R、HT 4个参数组成,其中,I为二进制形式表示的哈希值中当前被使用的位数,N为当前哈希桶数,R为当前记录总数,HT为含有N个表项的哈希表,它的每个表项存放对应哈希桶在磁盘上的地址,以便通过它可以找到对应的哈希桶;
所述映射结构体,是一个数据结构,位于内存中,其数据结构和索引结构体相同;
所述哈希桶,是一个存储单元,由磁盘上固定数目的磁盘块构成,它最多存放J个记录和一个32位的溢出桶地址,所有记录的对象标志符的哈希值的右边I位均相同,I由索引结构体中指定;
所述哈希表,为含有N个表项的表,它的每个表项存放对应哈希桶在磁盘上的地址,以便通过它可以找到对应的哈希桶。
2.如权利要求1所述的对象查找方法,其特征在于:
所述记录插入步骤中,所述阈值t=P×J,P为实数,0<P<1,P过小时,生成的空闲哈希桶过多,哈希表过大,磁盘空间浪费多;P过大时,可能有较多的哈希桶有溢出桶,查找效率下降;J为一个哈希桶最多存放的记录数。
CN2009100605520A 2009-01-16 2009-01-16 一种对象存储设备中的对象查找方法 Expired - Fee Related CN101464901B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009100605520A CN101464901B (zh) 2009-01-16 2009-01-16 一种对象存储设备中的对象查找方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009100605520A CN101464901B (zh) 2009-01-16 2009-01-16 一种对象存储设备中的对象查找方法

Publications (2)

Publication Number Publication Date
CN101464901A CN101464901A (zh) 2009-06-24
CN101464901B true CN101464901B (zh) 2012-03-21

Family

ID=40805476

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009100605520A Expired - Fee Related CN101464901B (zh) 2009-01-16 2009-01-16 一种对象存储设备中的对象查找方法

Country Status (1)

Country Link
CN (1) CN101464901B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101674334B (zh) * 2009-09-30 2012-05-23 华中科技大学 一种网络存储设备的访问控制方法
CN101702180B (zh) * 2009-12-04 2013-03-27 金蝶软件(中国)有限公司 一种关联字段值的查找方法及系统
CN101782922B (zh) * 2009-12-29 2012-01-18 山东山大鸥玛软件有限公司 一种面向海量数据检索的多级桶哈希索引方法
CN103514177A (zh) * 2012-06-20 2014-01-15 盛趣信息技术(上海)有限公司 数据存储方法及系统
CN103064906B (zh) * 2012-12-18 2016-08-03 华为技术有限公司 文件管理方法及装置
CN103914399B (zh) * 2012-12-31 2017-03-29 中国移动通信集团公司 一种并行计算系统中的磁盘缓存方法及装置
CN104008111B (zh) * 2013-02-27 2019-02-15 深圳市腾讯计算机系统有限公司 一种数据的存储管理方法及装置
CN104639570A (zh) * 2013-11-06 2015-05-20 南京中兴新软件有限责任公司 资源对象存储处理方法及装置
CN106682003B (zh) * 2015-11-06 2019-09-20 中国电信股份有限公司 分布式存储命名空间的路径分割映射方法和装置
CN106201351A (zh) * 2016-07-07 2016-12-07 乐视控股(北京)有限公司 一种基于对象存储的存储方法和服务器
CN111046034B (zh) * 2018-10-12 2024-02-13 第四范式(北京)技术有限公司 管理内存数据及在内存中维护数据的方法和系统

Also Published As

Publication number Publication date
CN101464901A (zh) 2009-06-24

Similar Documents

Publication Publication Date Title
CN101464901B (zh) 一种对象存储设备中的对象查找方法
CN104346357B (zh) 一种嵌入式终端的文件存取方法及系统
US9047301B2 (en) Method for optimizing the memory usage and performance of data deduplication storage systems
CN102779180B (zh) 数据存储系统的操作处理方法,数据存储系统
CN100498740C (zh) 一种数据缓存处理方法、系统及数据缓存装置
CN106874348B (zh) 文件存储和索引方法、装置及读取文件的方法
CN100468402C (zh) 一种数据存储及查询方法
CN101782922B (zh) 一种面向海量数据检索的多级桶哈希索引方法
CN102915278A (zh) 重复数据删除方法
CN103838853B (zh) 一种基于不同存储介质的混合文件系统
CN110825748A (zh) 利用差异化索引机制的高性能和易扩展的键值存储方法
JP2005267600A5 (zh)
CN107016100A (zh) 一种基于非易失性内存文件系统的元数据管理方法
CN102024019B (zh) 一种分布式文件系统中基于后缀树的目录组织方法
CN1858746A (zh) 在文件系统中存储和管理附加数据的设备和方法
CN101526965B (zh) 一种磁盘文件的索引节点定位方法和装置
CN104731896A (zh) 一种数据处理方法及系统
CN111143285A (zh) 一种小文件存储文件系统以及小文件处理方法
CN109407985B (zh) 一种数据管理的方法以及相关装置
US8239427B2 (en) Disk layout method for object-based storage devices
CN103942301A (zh) 一种面向多数据类型访问应用的分布式文件系统
CN111142780A (zh) 一种大文件存储文件系统以及大文件处理方法
CN102609531A (zh) 一种根据关键字反查文件的方法
CN100543748C (zh) 一种利用文件分配表进行文件寻道的方法及系统
CN112463734A (zh) 一种文件检索方法、系统及相关装置

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

Granted publication date: 20120321

Termination date: 20220116

CF01 Termination of patent right due to non-payment of annual fee