本地百万级别小文件存储有什么优化空间吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AutumnVerse
V2EX    问与答

本地百万级别小文件存储有什么优化空间吗

  •  
  •   AutumnVerse 2022-04-12 11:30:30 +08:00 3321 次点击
    这是一个创建于 1329 天前的主题,其中的信息可能已经有所发展或是发生改变。

    存储的内容全部是图片,每张图片大约 100kb ,目前磁盘使用的 1T 的三星 SSD 硬盘,NTFS 格式。

    目前问题

    1 、Windows 操作系统根本打不开文件夹

    2 、Linux 系统执行不了 ls 命令,使用 Linux 桌面也进不去文件夹

    注:

    1 、为啥要存到本地

    因为都是机器学习的训练集,存在本地才能读取 

    2 、为啥要打开文件夹

    因为要做图片预处理,比如去背景这类似的操作,预处理完要大致浏览一般所有样本 

    3 、为啥不使用 xxxx

    因为不打算改代码,目前代码全部都是直接读磁盘文件,换一下存储方案改动非常多(真的非常非常多,图片预处理脚本就有几十个,然后是各种训练脚本,再加上各种测试脚本) 
    18 条回复    2022-04-13 19:47:15 +08:00
    murmur
        1
    murmur  
       2022-04-12 11:31:39 +08:00
    为啥不分层存储呢 分三级,建子文件夹,到时候遍历进去就可以啊
    OysterQAQ
        2
    OysterQAQ  
       2022-04-12 11:33:15 +08:00 via iPhone
    Minio
    3dwelcome
        3
    3dwelcome  
       2022-04-12 11:36:11 +08:00 via Android   1
    同楼上,用 hash 头分组文件夹就可以了。
    web 后端的附件图片上传文件系统,大多都是这种结构。
    LeslieLeung
        4
    LeslieLeung  
       2022-04-12 11:36:34 +08:00 via iPhone
    满足不了打开文件夹预览的方法我倒是想到一个,用 pickle 存,然后封装读写方法给训练和测试脚本,代码改动不大。(这个方法减小了碎片化读取,能节省读取时间)
    dickie
        5
    dickie  
       2022-04-12 11:37:58 +08:00
    其实百万不算多 问题是你没有分文件夹 分三层 一层十个文件夹能解决
    dickie
        6
    dickie  
       2022-04-12 11:41:42 +08:00
    然后的话其实改存储如果代码变动很大 那是代码的问题 不管从本地还是网络存储读完文件应该统一,面向接口 而不是面向具体
    ClericPy
        7
    ClericPy  
       2022-04-12 11:49:00 +08:00
    1 、为啥要存到本地

    这个问题前面有人提到 minio 搞个对象存储其实改动不大, 不过既然已经选了本地文件还不想动太多代码. 要么像前面说的文件夹分层, 做多层哈希前缀, 遇到文件夹里文件数量不均衡参考下环形哈希? 要么就先不动, 日常不要运行 ls. 很早以前工作存放视频本地缓存文件时候搞过类似的, 反正别轻易遍历(当时才四五十万就崩了)

    2 、为啥要打开文件夹

    预览就不要用系统自带的方式了, 自己搞个脚本取样几个文件可以么. 毕竟去背景时候是有日志的, 把文件名记下来, 逐行消费日志取样你想要的文件名, 然后直接把这些取样复制出来或者渲染到 HTML 里用浏览器看

    3 、为啥不使用 xxxx

    怕麻烦就别改. 反正原型项目确实奥卡姆剃刀没毛病, 以后正式环境再考虑复杂设计



    总结就是, 想不花成本解决问题基本没戏, 绕开问题更换解决思路吧
    0o0O0o0O0o
        8
    0o0O0o0O0o  
       2022-04-12 11:51:49 +08:00 via iPhone
    既然你加了这么多限制条件,那就自己写个简单的 explorer 吧,如果不是频繁新增文件,就定期遍历一次然后把文件数据持久化
    privil
        9
    privil  
       2022-04-12 11:57:31 +08:00   1
    说 minio 的想啥呢,直接上 seaweedfs 不少你这种需求的在用 seaweedfs ,赶紧上,用了你会回来感谢我的
    privil
        10
    privil  
       2022-04-12 11:58:18 +08:00
    seaweedfs 再挂载成文件系统用,就完事了
    fxxkgw
        11
    fxxkgw  
       2022-04-12 18:22:50 +08:00
    linux 下可以用 ls -1 -f > xxx.file 方式快速看文件的
    carmark
        12
    carmark  
       2022-04-12 19:12:46 +08:00
    @OysterQAQ 这个明显不靠谱,minio 并没有优化海量文件的问题。后端存储还是单独按文件存的。

    海量小文件优化,还是要做聚合,减少文件检索带来的磁盘操作。
    paopjian
        13
    paopjian  
       2022-04-12 19:21:29 +08:00
    非要用文件浏览器打开吗?都要做机器学习了,直接用脚本读取,拆分到小文件夹里不好么
    AutumnVerse
        14
    AutumnVerse  
    OP
       2022-04-12 19:41:21 +08:00 via Android
    @privil 害,折腾了 5 个多小时,没把 seaweeds 搭建起来,看了一下介绍,感觉确实非常适合。可惜运维难度有点高
    OysterQAQ
        15
    OysterQAQ  
       2022-04-12 21:26:38 +08:00 via iPhone
    @carmark 我记错了,应该是 seaweed
    privil
        16
    privil  
       2022-04-12 23:23:49 +08:00   1
    @jiangwei2222 #14 官方文档偏向开发角度,可以参照一下这两篇文章部署,https://www.trojansun.com/seaweedfs-guidance.html https://bambrow.com/20220107-seaweedfs-installation-guide/
    ebingtel
        17
    ebingtel  
       2022-04-13 11:07:41 +08:00   1
    也可以通过 offset ,把小文件存储到大文件里面,比如 64M 一个大文件
    AutumnVerse
        18
    AutumnVerse  
    OP
       2022-04-13 19:47:15 +08:00 via Android
    @privil 多谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     918 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:16 PVG 06:16 LAX 14:16 JFK 17:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86