Performance 许多文件-平面文件还是树文件?

Performance 许多文件-平面文件还是树文件?,performance,filesystems,Performance,Filesystems,我的应用程序需要保留大量相当小的文件(10-100k),这些文件通常通过文件名字符串表达式中的某些“位置”进行访问 例如,如果访问了file_5_5,那么像file_4_5或file_5_6这样的文件也可以在短时间内访问 我已经看到web浏览器文件缓存通常以类似于文件名词法顺序的树状方式排序,这是一种散列。例如,sadisadji将位于s/a/d/i/ssadisadji。我想这是为快速随机访问这些文件而优化的 这样的树结构对我的案例也有用吗?或者,将所有文件保存在一个位置的扁平文件夹是否也同样

我的应用程序需要保留大量相当小的文件(10-100k),这些文件通常通过文件名字符串表达式中的某些“位置”进行访问

例如,如果访问了
file_5_5
,那么像
file_4_5
file_5_6
这样的文件也可以在短时间内访问

我已经看到web浏览器文件缓存通常以类似于文件名词法顺序的树状方式排序,这是一种散列。例如,
sadisadji
将位于
s/a/d/i/ssadisadji
。我想这是为快速随机访问这些文件而优化的


这样的树结构对我的案例也有用吗?或者,将所有文件保存在一个位置的扁平文件夹是否也同样有效

树结构会更好,因为许多文件系统在列出一个包含100000个或更多文件的目录时遇到困难

.mbtiles文件格式存储了大量用于地图的图像文件,它采用的一种方法是将所有文件存储在SQLite数据库中,从而避免了目录中有数千个文件所导致的问题。其推理和实现如下所述:


我不知道性能如何,但我知道树层次结构对于简化存档/备份脚本,以及减少以后添加更多光盘并只想将部分文件移动到光盘上时所需的工作量有很大的好处,因为你所要做的就是添加一个挂载点。一些文件系统在目录中进行线性搜索,因此在一个目录中有数千个文件可能会非常慢。使用ext3和ext4,访问我的大目录中的文件实际上相当快。然而,
ls
可能需要一些时间……然而,我很少“列出”目录。通常会访问其中的一些文件,但这并不意味着必须列出这些文件。我还想知道,如果频繁更新“tiles”,sqlite DB的性能如何。对于我的申请,他们有时会。sqlite开发人员必须像文件系统开发人员一样(至少对于现代系统而言)解决碎片问题等。sqlite存储最适合于变化不大的大型数据集,增加的复杂性可能对您的帮助甚于伤害。您最好的选择可能是使用目录树结构。