设计思路:
1、以block文件的形式存放数据文件(一般64M一个block),以下简称为“块”,每个块都有唯一的一个整数编号,块在使用之前所用到的存储空间都会预先分配和初始化(避免产生磁盘碎片)。
2、每一个块由一个索引文件、一个主块文件和若干个扩展块组成,“小文件”主要存放在主块中,扩展块主要用来存放溢出的数据。
3、每个索引文件存放对应的块信息和“小文件”索引信息,索引文件会在服务启动是内存映射(mmap)到内存,以便极大的提高文件检索速度。“小文件”索引信息采用在索引文件中的数据结构哈希链表来实现。
4、每个文件有对应的文件编号,文件编号从1开始编号,依次递增,同时作为哈希查找算法的Key来定位“小文件”在主块和扩展块中的偏移量。文件编号+块编号按某种算法可得到“小文件”对应的文件名。
其中 块信息的结构定义如下:从上到下分别为:
块编号(每个块都有一个整数编号)
块当前版本
当前已保存的文件总数
当前已保存的文件总大小
已删除的文件总数
已删除的文件总大小
下一个可分配的文件编号(文件号在每个块中是唯一的)
其中 记录已删除的文件总数和大小是因为 删除文件一开始只是在对应的主块区域做标记,不立刻删除(这样做是为了节约资源),当累计到一定删除总数时,在特定时间段服务器空闲,再去处理需删除的文件
“小文件”索引信息的数据结构