我需要在USB驱动器中存储100k文件(大约40GB).每个文件都有一个唯一的int id(例如45000).
root/ root/1.pdf root/2.pdf root/3.pdf ... root/567.pdf root/568.pdf root/569.pdf ... root/10001.pdf root/10002.pdf root/10003.pdf ... root/99998.pdf root/99999.pdf root/100000.pdf
选项二是根据该ID创建[1-9] [0-9] *文件夹层次结构:
root/ root/1/file.pdf root/2/file.pdf root/3/file.pdf ... root/5/6/7/file.pdf root/5/6/8/file.pdf root/5/6/9/file.pdf ... root/1/0/0/0/1/file.pdf root/1/0/0/0/2/file.pdf root/1/0/0/0/3/file.pdf ... root/9/9/9/9/8/file.pdf root/9/9/9/9/9/file.pdf root/1/0/0/0/0/0/file.pdf
哪个选项会更好地扩展?我可以理解第二个选项需要大量的文件夹,但每个文件夹最多包含10个文件夹和1个文件.维护不会成为问题,因为一切都将由应用程序控制.
请注意,这是一个Linux上的USB驱动器,基于上面我也想知道我是否应该使用FAT32或NTFS.
解决方法
我建议将ext3 / 4用于Linux作为我个人的偏好.
对于文件结构,我建议使用选项3(目录深度和每个目录的文件的平衡).这实际上就是选择一个tree data structure.为了实现这个文件,我会对每个文件执行md5sum哈希,并使用每个文件的前x个字符作为目录.字符将始终是hexidecemial字符,因此每个分支将是16个目录宽.您选择的字符数将是树结构的高度.
例如:
kbrandt@alpine:~/scrap$md5sum y.tab.h 03b01228467fbe94f8fedd9fcbb6d470 y.tab.h
会像./0/3/b/y.tab.h这样的东西.
How to pre-create directories on linux for file storage?显示了如何预创建目录.