# TinyFiles **Repository Path**: Yellow-rob/tiny-files ## Basic Information - **Project Name**: TinyFiles - **Description**: 解决web开发中海量小文件的存储以及访问问题 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-13 - **Last Updated**: 2021-05-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 文件说明 > 提交日期:2021.2.25 姓名:黄雨农 ### macaw-core-staticfiles(Maven项目) - > 为解决海量静态小文件的存储及访问修改等问题而尝试进行编写的项目 1. **已实现的功能** - 存:可将本地某一目录下的所有[^ 小文件]合并为多个固定尺寸的[^ 大文件]并存储至某一指定路径 - 查:根据小文件的原路径,可从已经合并的大文件中提取原本的小文件数据并输出到本地某一路径查看 2. **未实现功能** - 改 :经过合并后的小文件若是出现更改,需要将大文件对应对的小文件部分数据该问更改后的数据 - 删:删除一个小文件后,需要将合并后大文件中对应的小文件信息进行删除 - 增:有新的小文件生成时需要将其及时进行处理合并到大文件中 *note*:改操作直接进行会影响到全局的索引问题,因此打算以增操作作为底层实现,每次该操作都会新增小文件到系统,原本已经合并的文件不动,添加相关信息作为老版本标识,然后定期进行一次大规模的删除操作,将最新版本之前的小文件删除,整理全局的索引 3. **已解决的问题** - iNode不够用:大量小文件合并为一个大文件可以将原本需要使用大量iNode的情况变为只使用一个iNode即可 - 磁盘碎片:大量小文件会产生很多小的内部碎片,合并为固定大小的大文件后既可以尽可能的避免外部碎片并且每个大文件只产生一个很小的内部碎片 - 查操作的速度:二级索引采用哈希索引可以最快获取小文件在大文件中的位置等相关信息,最大程度使查操作速度变快 4. **现存的问题及预想方案** | 问题描述 | 预想方案 | | ------------------------------------ | ------------------------------------------------------------ | | 一级索引B+树实现的有问题 | 在查找一项数据时,只将必要的结点读出,而不是将整棵树放到内存中,进行尽可能少次数的磁盘IO | | 合并操作的实现方式问题 | 将现在的将某一目录下的全部文件合并,改为每有一个新的小文件生成就将其进行合并,动态地处理小文件的合并操作,而不是一次合并写死 | | 小文件数量巨大时,存放索引栈溢出问题 | 暂无 | | 访问不存在的文件时如何处理 | 添加一个布隆过滤器(Bloom Ffilter) | 5. **代码阅读逻辑** 从src/test/java中的StaticFileTest.java往深层debug即可了解编写逻辑 *note*:AtomFileGenerator.java可用于生成大量小文件用于测试 --- ### article > 相关文献 存放项目进行过程中阅读的相关文献,caj格式,使用知网官方提供的CAJviewer即可查看 --- [^ 小文件]: 项目中类似AtomFile命名均指小文件 [^ 大文件]: 项目中类似BlockFile命名均指大文件