V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
andybest
V2EX  ›  问与答

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

  •  
  •   andybest · 2014-05-31 12:13:26 +08:00 · 4488 次点击
    这是一个创建于 3833 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如 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切分发,我也不知道为什么。。。

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

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

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

    看看这两个,应该都可以满足你的需求。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3270 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:25 · PVG 20:25 · LAX 04:25 · JFK 07:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.