自建网盘文件存储用 POSIX 文件系统还是 MongoDB 还是 minio 等 OSS?

2022-03-13 23:16:02 +08:00
 pennai

在尝试自己写一个网盘,了解到文件存储大概可以有三种方式
1.直接存在 POSIX 等文件系统里
2.MongoDB 的 GridFS
3.minio 等 OSS
想请问以上三种有什么优劣?在多用户、文件数少时,哪个会比较省心便捷?另外有一个功能需求是需要在目录 /文件变动时自动增量同步,如果是 POSIX 了解到 inotify+rsync 可以实现,另外两种是否有相似的办法呢?
感谢解答

2161 次点击
所在节点    程序员
11 条回复
documentzhangx66
2022-03-13 23:41:19 +08:00
最方便 + 省心的当然是直接存到 MongoDB ,不是 MongoDB GridFS ,而是直接存到 MongoDB 的 Table 里。原因:

1.MongoDB 后期扩容是所有数据库里最无脑最方便的。无论是扩带宽还是扩存储,直接加节点,跑个加节点的脚本就好。

2.把文件存到 MongoDB 里,直接用数据库方法去进行批量管理,很方便。

劣势:性能一般,存储文件需要切片,会浪费一定空间。
mengyx
2022-03-14 10:17:05 +08:00
minio 会好一点吧,能够同时兼容各个云厂商的对象储存服务
libook
2022-03-14 11:51:57 +08:00
看你用户规模多大,规模越大越建议使用大厂踩过坑的方案。

如果只是家庭使用,就用一些 NAS 系统提供的方案就好了,大多是 POSIX 文件系统一把梭,安装配置和维护都比较方便。
pennai
2022-03-14 12:09:11 +08:00
@documentzhangx66 MongoDB 里有像 inotify 这样云端变动之后通知用户(或设钩子)的机制吗?
@mengyx 网上搜了圈好像没看到 minio 有云端文件变动事件通知的机制
pennai
2022-03-14 12:10:21 +08:00
@libook 是打算写一个多用户的,类似百度网盘这种而非私有云,NAS 似乎满足不了?
libook
2022-03-14 12:37:14 +08:00
@pennai #5 主流商业和开源 NAS 系统都是有多用户机制的,不过适合用户数量较少的情况,比如几百个。像群晖这种商业系统甚至把文件共享和公开分享的功能都做出来了。

像 SMB 、FTP 等主流文件传输协议是支持多用户的,SSHFS 、NFS 之类的传输协议是直接复用了 POSIX 文件系统本身的权限机制。

如果你要做安全机制的话,还要看是复用底层系统的安全机制还是自己重新做一套。

所以还是得看你想做什么规模的产品。
pennai
2022-03-14 13:38:42 +08:00
@libook 感谢,我去了解一些开源的 NAS
L1shen
2022-03-14 14:42:35 +08:00
documentzhangx66
2022-03-14 14:51:54 +08:00
@pennai MongoDB 是通用型数据库,与 inotify 不是同一种东西,所以没有这种机制。但你可以自己写代码,添加更多机制。MongoDB 更灵活,开发、管理、维护都更方便,但牺牲性能。
pennai
2022-03-14 20:46:23 +08:00
@L1shen 感谢
jones2000
2022-03-14 23:39:03 +08:00
MongoDB 扩展方便。

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

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

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

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

© 2021 V2EX