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

2022-04-12 11:30:30 +08:00
 jiangwei2222

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

目前问题

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

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

注:

1 、为啥要存到本地

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

2 、为啥要打开文件夹

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

3 、为啥不使用 xxxx

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

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

2 、为啥要打开文件夹

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

3 、为啥不使用 xxxx

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



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

海量小文件优化,还是要做聚合,减少文件检索带来的磁盘操作。
paopjian
2022-04-12 19:21:29 +08:00
非要用文件浏览器打开吗?都要做机器学习了,直接用脚本读取,拆分到小文件夹里不好么
jiangwei2222
2022-04-12 19:41:21 +08:00
@privil 害,折腾了 5 个多小时,没把 seaweeds 搭建起来,看了一下介绍,感觉确实非常适合。可惜运维难度有点高
OysterQAQ
2022-04-12 21:26:38 +08:00
@carmark 我记错了,应该是 seaweed
privil
2022-04-12 23:23:49 +08:00
@jiangwei2222 #14 官方文档偏向开发角度,可以参照一下这两篇文章部署,https://www.trojansun.com/seaweedfs-guidance.html https://bambrow.com/20220107-seaweedfs-installation-guide/
ebingtel
2022-04-13 11:07:41 +08:00
也可以通过 offset ,把小文件存储到大文件里面,比如 64M 一个大文件
jiangwei2222
2022-04-13 19:47:15 +08:00
@privil 多谢

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

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

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

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

© 2021 V2EX