文件储存方案,将上亿 MD5 文件存入磁盘,怎么划分目录合理?

2014-05-31 12:13:26 +08:00
 andybest
例如 MD5 值:4c7a8207e67421e328dd25cf9df9671b

储存方案选项:

/4c/7a/82/07/e6/74/21/e3/28/dd/25/cf/9d/f9/67/1b
双字母一切,好处:单目录 676 个文件,但目录层级太深,是否会影响磁盘性能?并且目录过多,会大量占用磁盘node

/4c7/a82/07e/674/21e/328/dd2/5cf/9df/967/1b
三字母一切,单目录 17576 个文件,Linux目录中文件上千后列出就会影响性能了,是否过多了?

/4c/7a8/207e/67421/e328dd/25cf9df/9671b
2,3,4,5,6,7切分发,我也不知道为什么。。。

应该怎么储存比较合理呢?谢谢各位!
4503 次点击
所在节点    问与答
9 条回复
virushuo
2014-05-31 12:28:54 +08:00
你要处理的不是怎么分目录的问题,是你存进去之后能不能读出来的问题。之前有过讨论,你需要先选个合适的fs。 看这里 http://www.v2ex.com/t/35253
kslr
2014-05-31 12:30:26 +08:00
目录数量也受限制,上亿同时考虑增长我觉得可以用文件系统解决了
andybest
2014-05-31 12:31:24 +08:00
@virushuo 我是想知道例如 GIT 设计,每次Commit(用SHA1做的Hash)他是以什么目录形式储存的该 Commit 信息?
andybest
2014-05-31 12:32:40 +08:00
@kslr @virushuo 没有上亿。。我夸大了,500万个好了。
zungmou
2014-05-31 12:39:54 +08:00
500万个文件... 文件名直接 hash 字符串不行吗?文件系统选择一个支持大量文件快速随机访问的就好了么。
andybest
2014-05-31 12:41:35 +08:00
@zungmou 行啊,怎么把这个文件存入磁盘?

难道直接:/file/md5....
这样, /file/目录下有500万个文件?
virushuo
2014-05-31 14:24:14 +08:00
@andybest 哦。你去看.git/objects 这个和你提的问题有一点区别,还是我说的读的问题,git不会批量/随机读取大量hash,每次读只有少量文件,所以压力不大。
9hills
2014-05-31 15:52:16 +08:00
搜 ext4 small files ,前几个结果看下。否则支持不了上亿的inode

另外目录不要太多层。按照fibnacii数列切割112358...就可以 ext4单目录文件数还是很大的。
lovesky
2014-05-31 16:26:06 +08:00
https://code.google.com/p/weed-fs/
https://code.google.com/p/fastdfs/

看看这两个,应该都可以满足你的需求。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/115169

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX