分布式存储系统的实现
2009-06-03 12:17:01 来源:WEB开发网五.数据文件
数据文件包括三个文件:字符串文件、目录文件、数据文件。字符串文件主要是考虑到敬惜人工智能系统平台是个提供开放服务的平台,因此数据名中必须有指示用户名的部分,当用户数据量很大的时候,目录文件中这部分开销会比较大,而且用户名的长度是变化的,直接保存很麻烦,所以最后参考MS对.net中字符串的处理方式用一个字符串文件统一保存,其它需要使用到该字符串的地方使用一个固定长度的字符串ID号来代表。
目录文件使用固定大小的32字节的块来保存每个数据的访问信息,所有的数据目录都要保存到内存中,所以目录信息占用的内存会极大,因此使用Hash树来进行管理,由于文件读写操作较慢,为了在重负载情况下在目录访问的安全性和目录访问的高并发性之间达成一个平衡使用了1K个锁对象,利用hash码的后10个bit来分散互斥访问的冲突概率。
为了减少在修改数据时因为空间不足引起的空间回收与再分配,在32字节的目录信息块中使用了若干字节来跟踪数据的写、空间分配等操作,并按一定策略进行空间放大的预分配来尽量减少空间的回收与申请。
六.数据文件的空间管理
数据文件按1KBytes为单位进行分配与回收,只包括数据,所有和数据相关的信息,如位置、大小等信息全部定义在目录信息中。
数据空间的管理被划分为32MBytes的大块,每个大块的空间由一个FSM(FileFreeSpaceManager)对象进行管理。FSM只关心本对象所负责的空间中尚未分配出去的空闲空间,并将其按空间大小分别按本大块内位置为顺序拉链,空闲空间链包括1K、2 K、4 K、8 K、16 K 以及32 K组共6条。16 K以下的空间直接从相应大小的链中取第一个即可,不足则依次向上一大小的链中进行查找,16 K以上的空间则需要先从32 K块组中按32 K大小向上取整后分配,剩余部分再加入到相应的空闲空间链中。
更多精彩
赞助商链接