V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coldwinds
V2EX  ›  PHP

一个文件夹下放多少文件比较适合呢

  •  
  •   coldwinds · 2017-06-03 20:25:01 +08:00 · 4043 次点击
    这是一个创建于 2728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前有很多小文件,100w 个以上,打算分到多级目录下,那么一个目录存多少文件比较适合不影响效率呢?

    有没有相关的参考,google 了下没有具体的答案

    有类似经验的 v 友吗
    11 条回复    2017-06-05 10:06:52 +08:00
    springmarker
        1
    springmarker  
       2017-06-03 21:46:58 +08:00
    根据文件名的哈希值来行吗
    yidinghe
        2
    yidinghe  
       2017-06-03 22:26:42 +08:00 via Android
    我遇到过单个目录文件超过 65535 个之后无法创建新文件。
    Huuluo
        3
    Huuluo  
       2017-06-03 22:44:46 +08:00
    目前做法放 1W
    alex321
        4
    alex321  
       2017-06-03 23:28:56 +08:00 via Android
    我们的系统上设计每层放 999 个。
    coldwinds
        5
    coldwinds  
    OP
       2017-06-04 02:22:31 +08:00 via Android
    @springmarker 因为有连续 ID 所以就按 ID 来分了,就看 ID 怎么分段了
    springmarker
        6
    springmarker  
       2017-06-04 09:00:05 +08:00
    哈希是 16 进制,假设文件“你好.txt ”的 md5 是 1F 88 90 7F 50 67 04 A3,按照哈希值分段分配目录,因为是 16 进制,一个目录下最少可以只有 16 个目录。2 个字节算一个目录的话就是一个目录下最多有 256 个目录,目录的深度是 8,当然最后 4 个字节可以不做目录,这样深度就是 6。当然有很多其他分法。
    (应该是这样的,哈哈哈)
    sagaxu
        7
    sagaxu  
       2017-06-04 10:07:09 +08:00   ❤️ 1
    只是 open+read/write,100 万个即使不分级,也不会影响太大。但是有些 SB 语言的 SB 库,会读整个目录的文件列表,100 万个就悲剧了,1000 个比较合理。
    coldwinds
        8
    coldwinds  
    OP
       2017-06-04 11:23:40 +08:00
    @sagaxu 恩,主要是列表可能有问题,假如要遍历导出文件的话
    iyaozhen
        9
    iyaozhen  
       2017-06-04 11:58:26 +08:00 via Android
    一个文件夹下面不要放太多,会造成系统 inode 不够用。最好多搞几级(深度)文件夹。
    huobazi
        10
    huobazi  
       2017-06-05 10:00:51 +08:00
    建议不要超过 65535 早期文件系统不支持超过 65535 的
    huobazi
        11
    huobazi  
       2017-06-05 10:06:52 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:43 · PVG 04:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.