一种对象数据处理方法及装置的制作方法

文档序号:6341372阅读:209来源:国知局
专利名称:一种对象数据处理方法及装置的制作方法
技术领域
本发明涉及计算机数据处理技术领域,尤其涉及一种可应用于基于对象的数据存储设备或系统的对象数据处理方法及装置。
背景技术
在对象存储系统中,对象存储设备(Object-based Storage Device, 0SD)用来永久存储系统中的对象数据,以及提供对象数据读写功能。对象数据在客户端和OSD之间传输,OSD的性能对整个系统有着直接而显著的影响。在OSD内,当前的对象组织和管理方式有以下几种(1)根据对象负载特性设计全新的对象文件系统(OBFS),即提出一种全新的类似于现在文件系统的对象数据组织和管理方式;(2)利用现有的文件系统,将对象数据封装为传统的文件格式。由于方式(1)的开发周期过长、难度过大,因此大部分系统采用方式( 。在方式( 中,常将每个对象当做一个文件存储在OSD的本地文件系统上,这种方法简单直接,目前大部分系统采用了该方式。在对象存储标准0SD-2中规定,在一个OSD上,对象标识符OID由(Partition_ID, User_0bject_ID)组成,它是对象的唯一标识,这也是客户端访问对象的接口。在方式O) 中,若将对象标识符作为文件的路径名,在OSD上只能为对象建立平坦的目录结构。由于单个OSD上的对象数量巨大,一般至少有上百万个,根据传统文件系统(如ext3)的目录文件组织结构及其查找方法,对于包含大量文件的目录,它无法有效的管理(当单个目录下文件超过一定数目时,在该目录下的文件查找效率就会急剧下降)。为了有效管理大量的对象,最简单的方法就是将平坦的目录结构转换为树型的目录层次结构,以适应于传统文件系统的目录管理策略和方法。采用这种方式的系统有PVFS、 HOSS等。这种方式的优点是解决了平坦名字空间的问题,使得定位对象的时间有所减少。在传统文件系统中,要读取文件数据时,需要以下几个步骤(1)需要先从目录数据中查找文件名,获得该文件名对应的索引号;( 根据索引号查找该文件元数据 (inode),获得文件数据所在的磁盘位置;C3)从磁盘上获取文件数据。将每个对象当做一个文件存放在OSD内的同一个目录内的方案中,由于同一目录下的文件数量巨大导致目录数据很多,在上述步骤(1)中需要上10次随机磁盘IO操作(10 操作次数与该目录下的文件数量相关)才能获得文件名对应的索引号,步骤O)需要一次磁盘IO操作,步骤(3)需要的磁盘IO操作数则与对象数据量有关。可见,为了读取对象数据需要太多次磁盘IO操作,严重降低了 OSD的性能。虽然,将每个对象当做一个文件存放在OSD内,并将平坦的目录结构转换为树型的目录层次结构的方案中,减少了上一方案步骤(1)中的磁盘IO数。步骤(1)需要的磁盘 IO操作次数与该文件所在目录层次结构的深度和它父目录包含的文件数有关,但是由于系统中的文件总数并没有改变,因此其需要的磁盘IO操作次数仍然很多。发明人在实现本发明的过程中,发现利用现有的文件系统,将对象数据封装为传统的文件格式进行对象组织和管理的现有技术至少存在以下问题
由于传统文件系统中能够保持的文件总数有限,将每个对象当做一个文件存储会受限于系统能够保存的文件总数;另外,将每个对象当做一个文件存储,每个文件都要求一个inode (几百个字节),内存使用效率不高,而且对象的访问总是需要多次磁盘IO操作,小对象的元数据访问会成为性能瓶颈,严重影响了 OSD的性能。

发明内容
本发明的目的在于提供一种对象数据处理方法及系统,以提高对象数据处理性能,为此,本发明实施例采用以下技术方案一种对象数据处理方法,包括接收到写对象的命令后,在对象数据文件中写入该对象的对象块,并在与所述对象数据文件对应的元数据文件中写入该对象的元数据;其中,在不超过所述对象数据文件的配额空间的情况下,所述对象数据文件能够存储多个对象。一种对象数据处理装置,包括接口模块,用于接收写对象的命令;写处理模块,用于在对象数据文件中写入该对象的对象块,并在与所述对象数据文件对应的元数据文件中写入该对象的元数据;其中,在不超过所述对象数据文件的配额空间的情况下,所述对象数据文件能够存储多个对象。采用本发明的上述实施例,通过将多个对象绑定为单个对象数据文件,减少了 OSD 内部的文件总数,一定程度上避免了文件数量众多以及平坦的目录结构导致的文件查找效率低、需要多次磁盘IO操作才能访问到对象的问题。


图1为本发明实施例中的OSD对象数据存储结构示意图;图2为本发明实施例中的B文件的结构示意图;图3为本发明实施例中的BM文件的结构示意图;图4为本发明实施例中的对象元数据的内存数据结构示意图;图5为本发明实施例中的对象元数据内存数据结构的建立流程示意图;图6为本发明实施例中的对象数据的写操作流程示意图;图7为本发明实施例中的删除对象数据的流程示意图;图8为本发明实施例中的压缩对象存储空间的流程示意图;图9为本发明实施例中的对象数据的读流程示意图;图10为本发明实施例中的对象数据处理装置的结构示意图。
具体实施例方式针对上述现有技术存在的问题,为了提高OSD的访问性能,应该尽量减少读写对象元数据和对象数据涉及到的磁盘IO操作次数,并尽量减少磁盘的随机访问次数,充分利用系统内存。以此为目标,本发明实施例给出了一种提高OSD中对象数据存储效率的对象组织方式和相应的对象数据处理方法。本发明实施例将多个对象绑定为单个大文件存储在OSD的本地文件系统上,从而减少了读写对象元数据和对象数据涉及到的磁盘IO操作次数,同时也减少了随机磁盘IO操作次数,提高了 OSD的访问性能。下面结合附图对本发明实施例进行详细描述。参见图1,为本发明实施例提供的OSD对象数据存储结构示意图。如图1所示,本发明实施例在每个OSD中,根据挂载的物理磁盘分区情况,配置若干存储单元(SU)。每个SU属于一个物理磁盘分区,同一个物理磁盘分区可以有多个SU。 每个SU目录下有Data (数据)和Compact (压缩)两个子目录和一个存储单元配置文件 (SUC)。Data目录下的文件用于存储和索引对象数据。其中,Bundle文件(对象数据文件,可容纳多个对象数据,以下简称B文件)用来存储对象数据,它可包含多个对象的数据, 每个对象可属于一个B文件。Bundle_Meta文件(与B文件对应的对象元数据文件,以下简称BM文件)与B文件一一对应,负责存储在对应B文件中的每个对象的元数据信息,主要用于对应B文件的压缩扫描,以及系统重启时在内存中重建对应B文件的元数据信息等。Compact目录下的文件与Data目录下的文件对应,用于当某个B文件的空间利用率小于阈值时,对B文件和BM文件压缩,回收磁盘空间。压缩期间,Data目录下B文件中的有效数据会被读入到Compact目录下的B_C文件中;压缩操作完成后,有效的对象元数据会被填充写入Compact目录下的BM_C文件,然后用Compact目录下的B_C以及BM_C文件覆盖Data目录下对应的B文件和BM文件,删除B_C和BM_C文件。SUC记录了该SU的一些基本配置信息,如总磁盘空间配额、Data目录磁盘空间配额、Compact目录磁盘空间配额、 每个B文件和BM文件的文件配额等信息。其中B文件的大小可根据OSD通常处理的对象的大小、磁盘10性能的因素确定,一般应可容纳一定数量的对象。下面首先说明Data目录下的B文件和BM文件的结构,以及对象元数据在内存中的数据组织方式。每个B文件由一个超级块和多个Slice (数据片)组成。超级块中可存储B文件的空间配额等信息。Slice中记录了每个对象块及其元数据信息。图2示出了 B文件的组成结构以及每个Slice的组成格式。如图所示,Slice Key由<0ID,BID>两部分组成,其中, OID是对象块所属对象的对象标识符;BID是对象块的标识符(如对象块编号),可表示对象块在其所属对象内的块偏址。Flag用来记录对象块是否有效,可使用True表示该块能提供正常服务,使用False表示该块已经被删除。Size用来指出对象块的长度。Block是该对象块的实体数据。每个BM文件由一个超级块和多个ObjectMeta(对象元数据)组成。超级块中可存储BM文件的空间配额等信息。图3示出了 BM文件的组成以及每个ObjectMeta的组成格式。如图所示,ObjectMeta记录了每个对象的基本元数据和其包含的对象块的元数据信息。其中,对象的基本元数据可包括对象标识符0ID、对象大小0_size ;对象块的元数据可包括对象块标识符BID、对象块大小Size、对象块在所属对象内的偏址(即地址偏移量) Offset。为了在B文件中快速取回对象块,每个OSD需要维持一个元数据内存数据结构, 它指明了元数据在内存中的数据组织方式。内存数据结构记录了每个对象的每个对象块Slice Key到〈Offset,Size〉的映射,其中,Offset是指对象块对应的Slice在B文件的偏址。在具体实现中可采用较简单的直接组织方式,如图4所示。参见图4,为本发明实施例提供的对象元数据的内存数据结构示意图。内存中的对象元数据主要包含以下信息:“0ID,0_size,Vec<BID,(size,offset) >”。其中,OID是对象标识符,根据它来定位对象元数据在内存中的位置,若内存中没有该条目,说明OSD内没有存放该对象;0_siZe是对象的总大小,它等于对象所有对象块的size的总和;“Vec<BID, (size, offset) ”〉里记录了对象的所有对象块的元数据信息。由于随机磁盘IO操作会严重影响系统性能,因此本发明实施例优选采取顺序读写的方式访问文件。新来的对象数据会被填充到当前B文件的尾部,对应的对象元数据会被同步填充到当前BM文件的尾部。B文件采取写时创建的延迟创建策略。最初的系统中,对应的SU的Data目录下并没有B文件。当用户写对象数据时,检测SU的Data目录下的B文件的状态,若其中没有B 文件或者已创建的B文件大小达到设定阈值,并且在SU的Data磁盘空间配额允许的情况下,则创建新的B文件以及与其对应的BM文件;若其中有B文件且B文件的大小未达到设定阈值,则不需要创建B文件和对应的BM文件,在写对象数据时,可写入到现有B文件及其对应的BM文件中。在OSD运行中,会为每个B文件计算其已经使用的空间(表示为Used)、存储有效对象块的空间(表示为Valid),B文件的空间利用率P = Valid/Used。如果每个B文件的文件空间配额为Max,则当hed+当前要写入B文件的数据大小>Max时,说明该B文件的存储空间不够,需要在SU内新分配一个B文件来存放后续的对象数据。基于上述OSD对象数据存储结构,下面结合附图详细描述对象数据的各种处理流程。参见图5,为本发明实施例提供的加载对象元数据到内存的流程示意图。由于访问对象数据需要先获得对象元数据信息,为了避免随机磁盘IO操作,可将对象元数据信息全部载入到内存中。通常在系统启动时或者在因系统出错而需要重启恢复时,在内存中加载对象元数据信息。在加载对象元数据到内存的过程中,可以按照B文件中的每个条目依次对B文件进行检查,但由于B文件通常较大,通过顺序读完它的所有内容来重构对象元数据的内存数据结构将比较耗时。为解决该问题,本发明实施例优选根据BM文件建立对象元数据的内存数据结构, 即,采用BM文件来记录对应B文件中包含的对象的元数据信息。具体的,在加载对象元数据到内存的过程中,读取BM中的对象元数据,判断当前读取到的对象元数据所对应的OID是否已经存在于对象元数据的内存数据结构中,若不存在,则将当前读取到的对象元数据保存到对象元数据的内存数据结构中;否则,先删除对象元数据的内存数据结构中的该OID 对应的对象元数据,再将当前读取到的对象元数据保存到对象元数据的内存数据结构中; 重复以上操作,直到BM文件中的所有对象元数据遍历完成。通过BM文件来重建对象元数据的内存数据结构,可以减少系统初始化或数据恢复时间。其流程可包括步骤501,打开BM文件,定位到BM内第一条对象元数据;步骤502,检查是否已到BM文件尾部,若没有则转到步骤503,否则结束本流程;
步骤503,检查内存中是否有该对象的元数据,若有,则转到步骤504 ;否则,转到步骤505 ;其中,如果内存中有该对象的对象标识符Oi所对应的对象元数据条目,则表明内存中已经存在该对象的元数据;步骤504,删除内存中已经存在的该Oi对应的对象元数据条目,转到步骤505 ;步骤505,将从BM中读取的这条对象元数据条目“0i,0_size,Vec<BID,(size, offset)) “插入内存,转到步骤506。步骤506,在BM文件中定位到下一条对象元数据,转到步骤502。从以上加载对象元数据信息到内存的流程可以看出,该流程中仅根据BM文件重建对象元数据的内存数据结构。若向同一个B文件中多次写入过对象标识符相同的对象, 则认为其是同一个对象的多次更新操作,以BM文件中该对象的最尾部的对象元数据为准, 因此在初始化或恢复流程中,内存中保存的是最后一次更新的对象元数据。参见图6,为本发明实施例提供的对象数据的写操作流程示意图。为了提高OSD的访问性能,减少磁盘IO操作,系统中可为对象提供数据缓存,缓存的单位可以以对象块(Block)为粒度,Block的大小可设置,可根据OSD的磁盘IO性能设置。一个对象可包含一个Block,若对象数据量较大,则可以根据将其分割为多个Block,这样一个对象可能包含多个对象块。当客户端向OSD进行对象写操作时,OSD可将从网络或其它存储设备接收到的数据放到数据缓存中,直到数据量达到一个Block时,会以Block为单位将数据写入到B文件中。通常情况下,一个对象只能属于一个B文件,在写入之前需要判断该对象是否在B中存放得下,如果放得下,则在该B文件中写入该对象,否则可以另创建一B文件写入该对象。系统可当每个对象的所有对象块全部写入到B文件后,在相应的BM文件中以对象为粒度将对象元数据写入BM文件的尾部。此种情况下,由于B文件是按照对象块的粒度写入,而BM文件是按照对象的粒度写入,因此可能会存在对象的某个对象块早已写入B文件而由于该对象没有完全写完,其元数据并没有写入BM文件。若此时系统出错,会导致B文件中有对象块而BM中没有该对象元数据信息,这种情况下,认为对象写操作失败。只有当 BM文件中有对应的对象元数据条目并且对应的对象块所在的Slice中的Flag为Ture时, 才会认为该对象存在。图6示出了一种优选的对象数据写操作流程,其中,对象可能分为多个对象块写入B文件,当要写入某个对象时,其流程可包括步骤601,根据待写入的对象的对象标识符0i,从对象元数据的内存数据结构中查找该对象是否存在,若存在则转到步骤602,若不存在则转到步骤603 ;步骤602,调用删除对象操作流程,将已存在的对象删除(删除流程可参见图7);步骤603 604,将对象Oi的第j个对象块Bj添加到B文件尾部< (0i,Bj),flag 为T,sj, Block〉,其中,Bj是该对象块在该对象内的块偏址(如块编号),flag为T表示是有效数据,sj是该对象块的大小,Block是该对象块的实体数据;更新B文件的Used = used+sj ;步骤605,若该对象块不是该对象的最后一块,则转到步骤606,否则转到步骤 607 ;步骤606,递增j值(即++j),转到步骤604 ;
步骤607 609,该对象的所有对象都已写完,更新对应B文件的Vaild = Vaild+0_siZe,在对象元数据的内存数据结构中插入该对象的元数据信息<0i,0_size, Vec (Bk, sk,offk)>,将该对象元数据 <0i, 0_size,Vec (Bk, sk,offk) > 顺序写入到 BM 文件尾部,其中,k从1到对象块总数。为了提高OSD的并发访问能力,OSD内可采用多个线程并发执行对象数据的读写操作。通过以上写操作流程可以看出,若向同一个B文件中多次写入过对象标识符相同的对象,则认为其是同一个对象的多次更新操作,以最后一次为准,会调用删除对象操作将已存在的对象块所在的Slice的Flag设置为F,内存中保留的是最后一次更新的对象元数据,通过该对象元数据只能访问到最新的对象数据。由于在删除过程中没有将BM文件中原来的对象元数据删除,而又在其尾部添加了一条该对象的新元数据,因而会有同一个对象对应有多条对象元数据的情况,通过图5所示的对象元数据加载到内存的流程,可保证以最后一次写入的对象及其元数据为准。参见图7,为本发明实施例提供的删除对象数据的流程示意图。对象数据可能分散存放在B文件的不同slice中,其删除流程可包括步骤701,根据待删除对象的对象标识符0i,从对象元数据的内存数据结构中查找该对象是否存在,若不存在则结束本流程,若存在则转到步骤702 ;其中,若对象元数据的内存数据结构中存在该Oi对应的条目,则表明该对象存在;步骤702 703,读取该对象的元数据信息<0i,0_size,Vec (Bj,sj,off j) >,获知对象的所有对象块在B文件中的偏址,将a赋值为1 (即从第一块开始);步骤704,在B文件中,根据元数据信息直接定位到Slice key为<0i,Ba>的 Slice ;将该Slice中的Flag置为F(表明该对象已经被删除);步骤705 706,若其为第一个对象块,则更新该B文件的Vaild = Vaild-0_size, 其中0_size为标识符为Oi的对象的对象大小;步骤707,判断a是否等于该对象的对象块总数(即该对象块是否是最后一块), 若不等于,则转到步骤708,否则转到步骤709 ;步骤708,递增a (即++a),转到步骤704 ;步骤709,将该对象元数据从内存数据结构中删除。以上流程中,在将一个对象的第一个对象块的flag置为F后,更新B文件的Vaild =Vaild-0_size,当然也可以在将一个对象的最后一个对象块的flag置为F后,更新B文件的Vai 1 d = Vai 1 d-0_size,还可以在将每个对象块的flag置为F后,更新B文件的Vai 1 d =Vaild_B_size,其中B_size为当前对象块的大小。以上流程是从一个对象的第一个对象块开始并逐个进行处理直到该对象的最后一个对象块为止,当然还可以采用其它顺序,例如从一个对象的最后一个对象块开始到第一个对象块为止。通过以上删除对象数据流程可以看出,在删除过程中,仅设置了 B文件中相应 Slice的Flag为F,而没有对BM文件的相应条目进行修改(为了避免随机修改影响性能), 可能会出现系统重启后根据BM文件重构内存数据结构后有某个对象的元数据条目而在读写对象数据时发现其相应Slice的Flag为F,此时只需要将该对象元数据从内存中删除即可。参见图8,为本发明实施例提供的压缩对象存储空间的流程示意图。当某个B文件的空间利用率P = Valid/Used小于空间利用率阈值A时,说明该B 文件中垃圾数据过多,需要对其压缩,进行空间回收。另外,通过以上写对象数据流程可以看出,由于是最后写BM文件,可能存在某些对象块所在的Slice的Flag为T而BM文件没有该对象条目的情况(如写对象块的过程中系统出错),这时可能是只完成对象的部分写操作,它们会成为垃圾数据。当B文件的空间利用率P小于空间利用率阈值A时,这些空间可以在压缩操作中被回收。当某个B文件的空间利用率P = Valid/Used小于空间利用率阈值时,其压缩流程可包括 步骤801,在该SU的Compact目录下创建B_C和BM_C文件;步骤802 803,检查待压缩的B文件是否有对应的内存数据结构,若没有,则根据其BM文件将该B文件的对象元数据都读入内存,重建对象元数据的内存数据结构(其过程可参考图5所示的流程);步骤804,遍历内存中对应的对象元数据,若遍历完则转到步骤812,否则转到步骤 805 ;步骤805,取下一条对象元数据 <0i,0_size, Vec (Bj,sj,off j) >,转到步骤 806 ;步骤806,根据该对象元数据,从Data目录下的对应B文件中取出该对象的所有对象块所在的Slice的信息;步骤807,第一个对象块对应的Slice中的Flag是否为T,若不是则说明该对象已被删除,则转到步骤808 ;否则转到步骤809 ;步骤808,将该对象元数据从内存中删除;步骤809 811,将该对象的所有对象块所在的slice的信息依次顺序写入到 Compact目录下的B_C文件的尾部,计算该B_C文件的hed = used+0_size, valid = used, 根据该对象的所有对象块在B_C文件中的新偏址修改对象元数据的内存数据结构中该对象的元数据信息;转到步骤804 ;步骤812,重新遍历对象元数据的内存数据结构中对应的对象元数据;转到步骤 813 ;步骤813,取当前的对象元数据信息<0i,0_size, Vec (Bj, sj, off j)>顺序写入到 Compact目录下BM_C文件的尾部;步骤814,检查是否遍历完,是则转到步骤816,否则转到步骤815 ;步骤815,在内存中定位到下一条对象元数据,转到步骤813 ;步骤816 818,将Compact目录下的B_C以及BM_C文件覆盖Data目录下对应的 B和BM文件,并用B_C文件对应的Used和Valid信息更新B文件的对应信息,并将B_C和 BM_C文件删除。当然,也可以在向B_C文件写入数据块时,直接更新B文件对应的Used和 Valid信息。上述流程对每个B文件采用单线程负责压缩工作,使得每个对象的所有对象块被顺序重写入B_C文件,保证了下次读该对象的顺序性,提高了系统性能。压缩过程可在后台运行,压缩过程中相应的B文件和BM文件不对外提供服务,只有当压缩过程完成后才会采用更新的B文件和BM文件对外提供服务。若在压缩过程中突然遇到系统故障,则系统重启后会发现在Compact目录下有相应的B_C和BM_C文件存在, 此时将该文件删除,采用对应的B文件和BM文件重做压缩操作即可。通过以上流程可以看出,首先根据对象元数据的内存数据结构,仅将标识为有效的对象块(即Flag为T的slice)写入B_C文件,并删除内存数据结构中无效对象的元数据,然后再将内存数据结构中的对象元数据写入BM_C文件,最后用B_C文件内容覆盖B文件,用BM_C文件内容覆盖BM文件,从而使更新后的B文件存储的对象数据均为有效数据, BM文件中存储的元数据均为有效对象的元数据,达到了压缩B文件及其对应的BM文件的目的。参见图9,为本发明实施例提供的对象数据的读流程示意图。在写入对象数据操作中,由于多线程写入的影响,同一个对象的多个Block在B文件内不一定是连续性存放的, 即,对象数据可能位于B文件中不连续的多个Slice中。当要读取某个对象的数据时,可首先在数据缓存中查找,若存在则直接读取,若缓存中没有,则进行磁盘操作,从B文件中读取对象数据,这时需要知道对象数据在B文件内的偏址和大小(即需要知道对象元数据),然后将对象数据读取到数据缓存中(便于下次访问时直接命中缓存)并将数据返回给客户端。当然,也可以直接通过磁盘IO操作读取对象数据。其读操作流程可包括步骤901,根据对象标识符0i,从对象元数据的内存数据结构中查找该对象是否存在,若存在则转到步骤902,若不存在则结束本流程;步骤902,读取该对象的元数据信息<0i,0_siZe,VeC(Bj,sj,off j) >,获知对象的所有对象块在B文件中的偏址;步骤903,根据要访问对象的偏址(offset)和长度(size)计算出要访问的所有对象块k-m,其中k为第一个对象块的编号,m为最后一个对象块的编号;将a赋值为k ;步骤904,在B文件中根据该对象元数据信息直接定位到Slice key为<0i,Ba>的 Slice ;步骤905,判断该Slice中的Flag是否为F,若为F说明该对象已经被删除(即为无效数据),则结束本流程;若Flag为T,则转到步骤906 ;步骤906,将该Slice对应的Block读出;步骤907,判断a是否等于m(即该对象块不是要读取的最后一个对象块),若不等于,则递增a (即++a),转到步骤904 ;否则,结束本流程。为了减少随机修改操作影响OSD的性能,在删除对象数据操作中,仅设置了 B文件中相应Slice的Flag为F,而没有对BM文件的相应条目进行修改,因此可能会出现B文件中对应对象块为F而BM文件有该对象元数据的情况。针对这种情况,以上读对象数据流程没有涉及到修改操作。在本发明的另一实施例中,在根据对象元数据访问到对象块后,可以根据Flag来决定该对象是否有效。若在读写对象时发现对象块所在Slice的Flag为F,则认为该对象无效,此时可将该对象的元数据从对象数据的内存数据结构中删除。需要说明的是,本发明实施例中的压缩对象存储空间的流程为可选流程。在无需压缩对象存储空间的情况下,在对象数据的写操作流程或删除对象数据的流程中,可以省略对B文件的^ed参数、Valid参数等参数进行更新的操作。
基于相同的技术构思,本发明实施例还提供了一种对象处理装置,该装置可以是适用于上述流程的0SD。参见图10,为本发明实施例提供的对象数据处理装置的结构示意图。该装置可包括接口模块1000、写处理模块1002,此外还可包括加载模块1001,并可根据需要,还可包括以下模块中的一种或多种删除处理模块1003、压缩处理模块1004和读处理模块1005, 相应的,接口模块1000可接收写对象的命令、删除对象的命令、读取对象的命令等对象处理命令,以触发相应对象处理功能模块进行相应对象处理过程。其中,接口模块1000可接收写对象的命令,写处理模块1002可接口模块接收到写对象的命令后,在对象数据文件中写入该对象的对象块,并在与所述对象数据文件对应的元数据文件中写入该对象的元数据,如在写入该对象的所有对象块后在与所述对象数据文件对应的元数据文件中写入该对象的元数据。其中,在不超过所述对象数据文件的配额空间的情况下,所述对象数据文件能够存储多个对象。进一步的,写处理模块1002在对象数据文件中写入所述对象的对象块的过程中,将该对象块的数据有效性标识置为有效。加载模块1001可在内存中载入对象元数据(图中表示为BM01),所述对象元数据包括对象中各对象块的元数据;相应的,写处理模块1002还可在写入所述对象的所有对象块后,在载入内存的对象元数据中写入所述对象的元数据。进一步的,写处理模块1002在写入对象之前,判断载入内存的对象元数据中是否存在所述对象的对象标识对应的对象元数据;若判断为存在,则先将对象数据文件中与所述对象标识对应的对象中的各对象块的数据有效性标识置为无效,从内存中删除所述对象标识对应的对象元数据,再在对象数据文件中写入该对象的对象块;若不存在,则在对象数据文件中写入该对象的对象块。具体的,加载模块1001可逐一读取对象元数据文件中的对象元数据,针对读取到的每条对象元数据判断其所对应的对象标识是否已经存在于内存中的对象元数据中,若不存在,则将当前读取到的对象元数据保存到内存中;否则,先删除内存中该对象标识对应的对象元数据,再将当前读取到的对象元数据保存到内存中。写处理模块1002还可用于当待写入对象的大小超过设定阈值时,在写入该对象之前将待写入对象分割为多个大小不超过所述设定阈值的对象块;当待写入对象的大小未超过设定阈值时,将该对象作为一个对象块处理。写处理模块1002可在对象数据文件的尾部顺序写入对象块,在所述元数据文件的尾部顺序写入对象元数据。写处理模块1002可具体用于若当前对象数据文件的大小与当前待写入对象的大小还未达到该对象数据文件的空间配额,则在该对象数据文件中写入对象;所述创建模块,用于若当前对象数据文件的大小与当前待写入对象的大小达到该对象数据文件的空间配额,则创建新的对象数据文件和对应的元数据文件,并在新创造的对象数据文件中写入对象,在新创建的元数据文件中写入对象元数据。写处理模块1002还可在向对象数据文件写入对象块后,根据写入的对象块的大小更新所述对象数据文件已使用空间大小;在向对象数据文件写入对象的所有对象块后, 根据写入的对象的大小更新所述对象数据文件的有效对象块所占空间大小。删除处理模块1003,用于判断内存中的对象元数据中是否存在待删除对象的对象标识对应的对象元数据;若判断为存在,则根据内存中该对象标识对应的对象元数据,逐一定位出对象数据文件中的相应对象块,逐一将所述对象块的数据有效性标识设置为无效, 并当将所述所有对象块的有效性标识设置为无效后,删除内存中所述对象标识对应的对象元数据。删除处理模块1003还可在将对象块的数据有效性标识设置为无效后,根据所述待删除的对象的大小更新所述对象数据文件的有效对象块所占空间大小。压缩处理模块1004,用于当对象数据文件的有效对象块所占空间大小与已使用空间大小的比值低于设定阈值时,分别为待压缩存储空间的对象数据文件和对应的对象元数据文件,创建中间过程文件;遍历内存中待压缩存储空间的对象的元数据,并在遍历到每个对象块的元数据时,根据当前对象块的元数据定位到对象数据文件中的相应对象块,若该对象块的数据有效性标识为无效,则从内存中删除该对象块的元数据;若该对象块的数据有效性标识为有效,则将该对象块写入对象数据文件的中间过程文件,并更新内存中的相应对象块的元数据;遍历内存中待压缩存储空间的对象的元数据,并在遍历到每个对象块的元数据时,将当前的对象块元数据写入对象元数据文件的中间过程文件;用对象数据文件的中间过程文件覆盖待压缩存储空间的对象数据文件,用对象元数据文件的中间过程文件覆盖待压缩存储空间的对象元数据文件。压缩处理模块1004可向对象数据文件的中间过程文件写入对象块时,写入到该文件的尾部;向对象元数据文件的中间过程文件写入对象元数据时,写入到该文件的尾部。压缩处理模块1004还可在将对象块写入到对象数据文件的中间过程文件后,根据待压缩存储空间的对象的大小,更新该待压缩存储空间的对象数据文件的已使用空间大小和有效对象块所占空间大小。读处理模块1005,用于当需要读取对象时,判断内存中是否存在与待读取对象的对象标识对应的对象元数据,若存在,则逐一根据该对象元数据中的对象块元数据定位到对象数据文件中的相应对象块,并在该对象块的数据有效性标识为有效的情况下,读出该对象块。读处理模块1005可具体用于若判断内存中存在与待读取对象的对象标识对应的对象元数据,则首先根据该对象元数据从缓存中读取对应的对象块;若未从缓存中读取到对应的对象块,则再逐一根据该对象元数据中的对象块元数据定位到对象数据文件中的相应对象块,并在该对象块的数据有效性标识为有效的情况下,读出该对象块;以及,从对象数据文件读出对象块后,将读出的对象块存放在缓存中。综上所述,本发明实施例,一方面通过将多个对象绑定为单个大文件(B文件),减少了 OSD内部的文件总数,一定程度上避免了文件数量众多以及平坦的目录结构导致的文件查找效率低、需要多次磁盘IO操作才能访问到对象的问题;另一方面,通过将对象分为对象块,以对象块为粒度将其写入到B文件中,减轻了对象数据对数据缓存区的要求,同时高效率地利用了 OSD的磁盘能力。可以看出,本发明实施例使得OSD能对外提供高性能的服务。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是⑶-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本发明序号仅仅为了描述,不代表实施例的优劣。以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
权利要求
1.一种对象数据处理方法,其特征在于,包括接收到写对象的命令后,在对象数据文件中写入该对象的对象块,并在与所述对象数据文件对应的元数据文件中写入该对象的元数据;其中,在不超过所述对象数据文件的配额空间的情况下,所述对象数据文件能够存储多个对象。
2.如权利要求1所述的方法,其特征在于,在对象数据文件中写入所述对象的对象块的过程中,还包括将该对象块的数据有效性标识置为有效。
3.如权利要求1所述的方法,其特征在于,还包括预先在内存中载入对象元数据,所述对象元数据包括对象中各对象块的元数据;在写入所述对象的所有对象块后,还包括在载入内存的对象元数据中写入所述对象的元数据。
4.如权利要求3所述的方法,其特征在于,在对象数据文件中写入该对象的对象块之前,还包括判断载入内存的对象元数据中是否存在所述对象的对象元数据;所述在对象数据文件中写入该对象的对象块,具体为若判断为存在,则先将对象数据文件中所述对象中的各对象块的数据有效性标识置为无效,从内存中删除所述对象的对象元数据,再在对象数据文件中写入该对象的对象块;若不存在,则在对象数据文件中写入该对象的对象块。
5.如权利要求3所述的方法,其特征在于,所述在内存中载入对象元数据,包括逐一读取对象元数据文件中的对象元数据,针对读取到的每条对象元数据,执行以下步骤判断其所对应的对象标识是否已经存在于内存中的对象元数据中,若不存在,则将当前读取到的对象元数据保存到内存中;否则,先删除内存中该对象标识对应的对象元数据, 再将当前读取到的对象元数据保存到内存中。
6.如权利要求1至5任一项所述的方法,其特征在于,所述对象数据文件中,针对各对象块对应记录有该对象块所属对象的对象标识、该对象块在其所属对象中的块偏移、该对象块的数据有效性标识、该对象块的大小;所述对象元数据包括对象标识、对象大小和该对象的各对象块元数据,其中,所述对象块元数据包括对象块在其所属对象中的块偏移、对象块大小和对象块在其所属对象中的地址偏移。
7.如权利要求1至5任一项所述的方法,其特征在于,当待写入对象的大小超过设定阈值时,在对象数据文件中写入该对象之前还包括将待写入对象分割为多个大小不超过所述设定阈值的对象块;当待写入对象的大小未超过设定阈值时,将该对象作为一个对象块处理。
8.如权利要求1至5任一项所述的方法,其特征在于,在对象数据文件的尾部顺序写入对象块,在所述元数据文件的尾部顺序写入对象元数据。
9.如权利要求1至5任一项所述的方法,其特征在于,若当前对象数据文件的大小与当前待写入对象的大小还未达到该对象数据文件的空间配额,则在该对象数据文件中写入对象;若当前对象数据文件的大小与当前待写入对象的大小达到该对象数据文件的空间配额,则创建新的对象数据文件和对应的元数据文件,并在新创造的对象数据文件中写入对象,在新创建的元数据文件中写入对象元数据。
10.如权利要求1至5任一项所述的方法,其特征在于,在向对象数据文件写入对象块后,还包括根据写入的对象块的大小更新所述对象数据文件已使用空间大小;在向对象数据文件写入对象的所有对象块后,还包括根据写入的对象的大小更新所述对象数据文件的有效对象块所占空间大小。
11.如权利要求1至5任一项所述的方法,其特征在于,当对象数据文件的有效对象块所占空间大小与已使用空间大小的比值低于设定阈值时,还包括分别为待压缩存储空间的对象数据文件和对应的对象元数据文件,创建中间过程文件;遍历载入内存的待压缩存储空间的对象的元数据,并在遍历到每个对象块的元数据时,根据当前对象块的元数据定位到对象数据文件中的相应对象块,若该对象块的数据有效性标识为无效,则从内存中删除该对象块的元数据;若该对象块的数据有效性标识为有效,则将该对象块写入对象数据文件的中间过程文件,并更新内存中的相应对象块的元数据;遍历载入内存的待压缩存储空间的对象的元数据,并在遍历到每个对象块的元数据时,将当前的对象块元数据写入对象元数据文件的中间过程文件;用对象数据文件的中间过程文件覆盖待压缩存储空间的对象数据文件,用对象元数据文件的中间过程文件覆盖待压缩存储空间的对象元数据文件。
12.如权利要求11所述的方法,其特征在于,向对象数据文件的中间过程文件写入对象块时,将对象块写入到该文件的尾部;向对象元数据文件的中间过程文件写入对象元数据时,将对象元数据写入到该文件的尾部。
13.如权利要求11所述的方法,其特征在于,在将对象块写入到对象数据文件的中间过程文件后,还包括根据待压缩存储空间的对象的大小,更新该待压缩存储空间的对象数据文件的已使用空间大小和有效对象块所占空间大小。
14.如权利要求1至5任一项所述的方法,其特征在于,还包括接收删除对象的命令后,判断载入内存中的对象元数据中是否存在待删除对象的对象元数据,如果存在,则根据内存中该对象的对象元数据,逐一定位出对象数据文件中的相应对象块,逐一将所述对象块的数据有效性标识设置为无效,并当将所述所有对象块的有效性标识设置为无效后,删除内存中所述对象的对象元数据。
15.如权利要求14所述的方法,其特征在于,在将对象块的数据有效性标识设置为无效后,还包括根据所述待删除的对象的大小更新所述对象数据文件的有效对象块所占空间大小。
16.如权利要求1至5任一项所述的方法,其特征在于,还包括接收到读取对象的命令后,判断载入内存中的对象元数据是否存在与待读取对象的对象的对象元数据,若存在,则逐一根据该对象元数据中的对象块元数据定位到对象数据文件中的相应对象块,并在该对象块的数据有效性标识为有效的情况下,读出该对象块。
17.如权利要求16所述的方法,其特征在于,若判断内存中存在待读取对象的对象元数据,则首先根据该对象元数据从缓存中读取对应的对象块;若未从缓存中读取到对应的对象块,则再逐一根据该对象元数据中的对象块元数据定位到对象数据文件中的相应对象块,并在该对象块的数据有效性标识为有效的情况下,读出该对象块;从对象数据文件读出对象块后,还包括将读出的对象块存放在缓存中。
18.—种对象数据处理装置,其特征在于,包括接口模块,用于接收写对象的命令;写处理模块,用于在对象数据文件中写入该对象的对象块,并在与所述对象数据文件对应的元数据文件中写入该对象的元数据;其中,在不超过所述对象数据文件的配额空间的情况下,所述对象数据文件能够存储多个对象。
19.如权利要求18所述的装置,其特征在于,所述写处理模块还用于,在对象数据文件中写入所述对象的对象块的过程中,将该对象块的数据有效性标识置为有效。
20.如权利要求18所述的装置,其特征在于,还包括加载模块,用于在内存中载入对象元数据,所述对象元数据包括对象中各对象块的元数据;所述写处理模块还用于,在写入所述对象的所有对象块后,在载入内存的对象元数据中写入所述对象的元数据。
21.如权利要求20所述的装置,其特征在于,所述写处理模块具体用于,-在对象数据文件中写入对象的对象块之前,判断载入内存的对象元数据中是否存在所述对象的对象元数据;若判断为存在,则先将对象数据文件中所述对象的各对象块的数据有效性标识置为无效,从内存中删除所述对象的对象元数据,再在对象数据文件中写入该对象的对象块;若不存在,则在对象数据文件中写入该对象的对象块。
22.如权利要求20所述的装置,其特征在于,所述加载模块具体用于,逐一读取对象元数据文件中的对象元数据,针对读取到的每条对象元数据判断其所对应的对象标识是否已经存在于内存中的对象元数据中,若不存在,则将当前读取到的对象元数据保存到内存中;否则,先删除内存中该对象标识对应的对象元数据,再将当前读取到的对象元数据保存到内存中。
23.如权利要求18至22任一项所述的装置,其特征在于,所述写处理模块还用于,当待写入对象的大小超过设定阈值时,在对象数据文件中写入该对象之前将待写入对象分割为多个大小不超过所述设定阈值的对象块;当待写入对象的大小未超过设定阈值时,将该对象作为一个对象块处理。
24.如权利要求18至22任一项所述的装置,其特征在于,所述写处理模块具体用于,在对象数据文件的尾部顺序写入对象块,在所述元数据文件的尾部顺序写入对象元数据。
25.如权利要求18至22任一项所述的装置,其特征在于,所述写处理模块具体用于,若当前对象数据文件的大小与当前待写入对象的大小还未达到该对象数据文件的空间配额, 则在该对象数据文件中写入对象块;所述创建模块,用于若当前对象数据文件的大小与当前待写入对象的大小达到该对象数据文件的空间配额,则创建新的对象数据文件和对应的元数据文件,并在新创造的对象数据文件中写入对象块,在新创建的元数据文件中写入对象元数据。
26.如权利要求18至22任一项所述的装置,其特征在于,所述写处理模块还用于,在向对象数据文件写入对象块后,根据写入的对象块的大小更新所述对象数据文件已使用空间大小;在向对象数据文件写入对象的所有对象块后,根据写入的对象的大小更新所述对象数据文件的有效对象块所占空间大小。
27.如权利要求18至22任一项所述的装置,其特征在于,还包括压缩处理模块,用于当对象数据文件的有效对象块所占空间大小与已使用空间大小的比值低于设定阈值时,分别为待压缩存储空间的对象数据文件和对应的对象元数据文件, 创建中间过程文件;遍历内存中待压缩存储空间的对象的元数据,并在遍历到每个对象块的元数据时,根据当前对象块的元数据定位到对象数据文件中的相应对象块,若该对象块的数据有效性标识为无效,则从内存中删除该对象块的元数据;若该对象块的数据有效性标识为有效,则将该对象块写入对象数据文件的中间过程文件,并更新内存中的相应对象块的元数据;遍历内存中待压缩存储空间的对象的元数据,并在遍历到每个对象块的元数据时,将当前的对象块元数据写入对象元数据文件的中间过程文件;用对象数据文件的中间过程文件覆盖待压缩存储空间的对象数据文件,用对象元数据文件的中间过程文件覆盖待压缩存储空间的对象元数据文件。
28.如权利要求27所述的装置,其特征在于,所述压缩处理模块具体用于,向对象数据文件的中间过程文件写入对象块时,写入到该文件的尾部;向对象元数据文件的中间过程文件写入对象元数据时,写入到该文件的尾部。
29.如权利要求27所述的装置,其特征在于,所述压缩处理模块还用于,在将对象块写入到对象数据文件的中间过程文件后,根据待压缩存储空间的对象的大小,更新该待压缩存储空间的对象数据文件的已使用空间大小和有效对象块所占空间大小。
30.如权利要求18至22任一项所述的装置,其特征在于,还包括删除处理模块;所述接口模块还用于,接收删除对象的命令;删除处理模块,用于判断内存中的对象元数据中是否存在待删除对象的对象元数据; 若判断为存在,则根据内存中该对象的对象元数据,逐一定位出对象数据文件中的相应对象块,逐一将所述对象块的数据有效性标识设置为无效,并当将所述所有对象块的有效性标识设置为无效后,删除内存中所述对象的对象元数据。
31.如权利要求30所述的装置,其特征在于,所述删除处理模块还用于,在将对象块的数据有效性标识设置为无效后,根据所述待删除的对象的大小更新所述对象数据文件的有效对象块所占空间大小。
32.如权利要求18至22任一项所述的装置,其特征在于,还包括读处理模块;所述接口模块还用于,接收读取对象的命令;读处理模块,用于在接收到读处理命令后,判断内存中是否存在待读取对象的对象元数据,若存在,则逐一根据该对象元数据中的对象块元数据定位到对象数据文件中的相应对象块,并在该对象块的数据有效性标识为有效的情况下,读出该对象块。
33.如权利要求32所述的装置,其特征在于,所述读处理模块具体用于,若判断内存中存在待读取对象的对象元数据,则首先根据该对象元数据从缓存中读取对应的对象块;若未从缓存中读取到对应的对象块,则再逐一根据该对象元数据中的对象块元数据定位到对象数据文件中的相应对象块,并在该对象块的数据有效性标识为有效的情况下,读出该对象块;以及,从对象数据文件读出对象块后,将读出的对象块存放在缓存中。
全文摘要
本发明公开了一种对象数据处理方法及装置,应用于基于对象的数据存储设备,该方法包括预先在内存中载入对象元数据,所述对象元数据包括对象中各对象块的元数据;当需要写入对象时,判断内存中的对象元数据中是否存在该对象的对象标识对应的对象元数据;若存在,则先删除所述对象标识对应的对象,再写入该对象;若不存在,则写入该对象;其中,在不超过所述对象数据文件的配额空间的情况下,所述对象数据文件能够存储多个对象。采用本发明,可提高对象数据处理性能。
文档编号G06F17/30GK102567427SQ201010623560
公开日2012年7月11日 申请日期2010年12月30日 优先权日2010年12月30日
发明者孙少陵, 王娟, 罗治国, 韩金宇 申请人:中国移动通信集团公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1