che*_*vim 3 linux filesystems directory usb archive
我需要在 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
Run Code Online (Sandbox Code Playgroud)
选项二是[1-9][0-9]*根据该 id创建文件夹层次结构:
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
Run Code Online (Sandbox Code Playgroud)
哪个选项会更好地扩展?我可以理解第二个选项将需要大量文件夹,但每个文件夹最多包含 10 个文件夹和 1 个文件。维护不会成为问题,因为一切都将由应用程序控制。
请注意,这是 linux 上的 USB 驱动器,基于上述内容,我还想知道我应该使用 FAT32 还是 NTFS。
作为我个人的偏好,我会推荐 ext3/4 与 Linux 一起使用。
对于文件结构,我会推荐选项 3(目录深度和每个目录文件的平衡)。这实际上只是关于选择树数据结构。为了对文件实现这一点,我会对每个文件进行 md5sum 哈希,并使用每个文件的前 x 个字符作为目录。字符将始终是十六进制字符,因此每个分支将是 16 个目录宽。您选择的字符数将作为树结构的高度。
例如:
kbrandt@alpine:~/scrap$ md5sum y.tab.h
03b01228467fbe94f8fedd9fcbb6d470 y.tab.h
Run Code Online (Sandbox Code Playgroud)
会进入类似的东西./0/3/b/y.tab.h。
如何在linux上预先创建目录用于文件存储?向您展示如何预先创建目录。
这是一个通用解决方案,适用于许多用例,并且应该创建一个非常好的文件分布。
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |