用 PostgreSQL 存图片等 binary 有什么坑吗

4 天前
 liyafe1997

如题,大概每个主条目下面关联有几张到一两百张不等的图片/文档之类的附件,每张图最大 500KB (入库时超大会自动压缩),文档也是不超过 500KB 。

目前测试数据(几十/百来个主条目)跑起来感觉挺香的,也没见什么性能问题。特别是设置好外键和 cascade delete 之后,主条目删除会自动把存 binary 的表中关联的附件一并干掉,比放文件系统好维护。文件系统还要自己处理数据关联和清理逻辑。

就是不知道以后数据量大了会有什么坑,预计之后主条目有数万个这样的量级。

5476 次点击
所在节点    PostgreSQL
90 条回复
moen
4 天前
pg 有个内置扩展叫 lo ,用来存大对象
iyaozhen
4 天前
可以这样吧,没啥问题。

而且你又不是经常 select * ,比如帖子附件,你可以只展示名称。下载再查出内容字段

当然 OSS 确实是标准做法
laminux29
4 天前
全存数据库,最大的优势是开发与调试都极其方便,节约了程序员大量时间。就算后期性能不足,直接堆硬件也能解决。

大部分中小项目,这么跑一点问题都没有,而且数据库天生做负载均衡与 HA 都更方便。

当然,非常特殊的追求性能的项目,以及用户或数据量众多的大厂项目,可能没办法这么玩。
KagurazakaNyaa
4 天前
要存这种数据其实可以考虑用 mongo 这种文档数据库了,有 gridfs
xjzshttps
4 天前
玩没问题,
但是数据库库扩展成本比文件系统大太多了。
whoosy
4 天前
@sagnitude #35 你这个有很大的参考价值
delacey
4 天前
到时候给你塞两张 1G 的图片,你的并发数不就炸了
yplam
4 天前
存文件系统的话通过 io copy 或者 zero copy (譬如 NGINX 的 sendfile )基本上可以忽略静态文件的内存开销,存数据库你是不是要整个文件内容都加载到内存然后再返回?或者你又要在前面加个 proxy cache ?
liyafe1997
4 天前
@sagnitude 我也觉得,左想右想都觉得没什么不妥,IO 问题就是在 HTTP Server 上加缓存的事。
liyafe1997
4 天前
@delacey 看题,不超过 500K
liyafe1997
4 天前
@laminux29
@xiangyuecn
是的,我的心态也是这样,前期不想操什么高并发这些心。如果我这个项目以后真的有高并发那一天,那这些问题都不是问题了。
RYAN0UP
3 天前
xiaohupro
3 天前
还是建议最好使用单独的文件系统,而且现在很多开源的都很不错,也有对应的 API 提供,很方便,就像我自己用的就是 Zipline: https://zipline.diced.sh/docs/get-started
wenning
3 天前
没什么问题, 但是你参考一下云服务数据库磁盘的价格, 如果合适倒是可以的; 参考一下阿里云 rds 存储包,5t1 个月 6k 人民币
Huelse
3 天前
关系数据库还是老老实实存数值字符串吧,其他类型的都有对应存储方案
DesmondCobb
3 天前
@sagnitude #35 狠狠赞同了,之前搞医学数据库,数据集、影像、就诊记录等等文件又多又碎,用 SQLite 来存效率比文件显著提高,进行检索、关联也更容易
kirory
3 天前
没什么问题,CDN 基本能全命中
最大问题就是数据库需要手动扩容
FS ,OSS 实际上也是 KV 数据库,这里对性能没有要求到要单独开服务器的程度,我不觉得为了*可能*的性能优势放弃单数据库的事务和一致性有好处
kirory
3 天前
@irrigate2554 BLOB 是支持 stream 和 seek 的,肯定能实现流式播放,总不会直接直接把上 G 的文件直接全读内存里吧
thealert
3 天前
@sagnitude #35 网络地图,2 进制存数据库根本不合理,你是查出数据库 2 进制返回给客户端,多个地图区块一次性查询数据库,并发用户量请求数据量一大接口直接爆掉了,每个区块需要做异步请求 cdn 才合适
thealert
3 天前
@thealert 而且数据库主从同步会造成巨大的系统开销和延迟

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

https://ex.noerr.eu.org/t/1161291

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

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

© 2021 V2EX