在尝试自己写一个网盘,了解到文件存储大概可以有三种方式
1.直接存在 POSIX 等文件系统里
2.MongoDB 的 GridFS
3.minio 等 OSS
想请问以上三种有什么优劣?在多用户、文件数少时,哪个会比较省心便捷?另外有一个功能需求是需要在目录 /文件变动时自动增量同步,如果是 POSIX 了解到 inotify+rsync 可以实现,另外两种是否有相似的办法呢?
感谢解答
1
documentzhangx66 2022-03-13 23:41:19 +08:00
最方便 + 省心的当然是直接存到 MongoDB ,不是 MongoDB GridFS ,而是直接存到 MongoDB 的 Table 里。原因:
1.MongoDB 后期扩容是所有数据库里最无脑最方便的。无论是扩带宽还是扩存储,直接加节点,跑个加节点的脚本就好。 2.把文件存到 MongoDB 里,直接用数据库方法去进行批量管理,很方便。 劣势:性能一般,存储文件需要切片,会浪费一定空间。 |
2
mengyx 2022-03-14 10:17:05 +08:00 via Android
minio 会好一点吧,能够同时兼容各个云厂商的对象储存服务
|
3
libook 2022-03-14 11:51:57 +08:00
看你用户规模多大,规模越大越建议使用大厂踩过坑的方案。
如果只是家庭使用,就用一些 NAS 系统提供的方案就好了,大多是 POSIX 文件系统一把梭,安装配置和维护都比较方便。 |
4
pennai OP @documentzhangx66 MongoDB 里有像 inotify 这样云端变动之后通知用户(或设钩子)的机制吗?
@mengyx 网上搜了圈好像没看到 minio 有云端文件变动事件通知的机制 |
6
libook 2022-03-14 12:37:14 +08:00
@pennai #5 主流商业和开源 NAS 系统都是有多用户机制的,不过适合用户数量较少的情况,比如几百个。像群晖这种商业系统甚至把文件共享和公开分享的功能都做出来了。
像 SMB 、FTP 等主流文件传输协议是支持多用户的,SSHFS 、NFS 之类的传输协议是直接复用了 POSIX 文件系统本身的权限机制。 如果你要做安全机制的话,还要看是复用底层系统的安全机制还是自己重新做一套。 所以还是得看你想做什么规模的产品。 |
8
L1shen 2022-03-14 14:42:35 +08:00
minio 可以看这个 https://docs.min.io/docs/minio-bucket-notification-guide.html hooks
|
9
documentzhangx66 2022-03-14 14:51:54 +08:00
@pennai MongoDB 是通用型数据库,与 inotify 不是同一种东西,所以没有这种机制。但你可以自己写代码,添加更多机制。MongoDB 更灵活,开发、管理、维护都更方便,但牺牲性能。
|
11
jones2000 2022-03-14 23:39:03 +08:00
MongoDB 扩展方便。
|