数据库存用户头像只存文件名和存完整 URL 哪个好?

48 天前
 fgt1t5y

哪种好?

5840 次点击
所在节点    MySQL
59 条回复
panlatent
47 天前
二选一的话,选 1 。概念上区分 “存” 的“原始数据”是文件名而不是 URL ,而“取”(对象方法/属性)的是 URL ,会更好一点。
ramirezyolis808
47 天前
存 1 ,占用存储的空间少。
shuxhan
47 天前
我们后端选择 2 的做法
daimaosix
47 天前
@shuxhan 给自己找事做是吧
daimaosix
47 天前
@shuxhan 看错了,我以为你是运维😂
ETiV
47 天前
Web 上一般会有独立的 CDN 域名,这样可以减少请求时携带 Cookies 这些在 CDN 场合没用的东西

再就是把头像 URL 分成 a)通用的 prefix 部分 & b)不能通用的文件名部份

prefix 当作程序的常量写在 config 里,文件名部份存数据库里
mrytsr
47 天前
1
sleepybear1113
47 天前
列 avatar_url (存 xxx.jps ), 列 store_type (如果有不同储存桶)
zed1018
47 天前
@ShinichiYao #32 难道图片 base64 就不膨胀了吗
asasjajsajsd
47 天前
为啥大家和我的都不一样,linux 和 oss 不是有最大文件数限制的么,虽然很大,但不怕这个值直接爆了么,所以很大一部分图片、文件,我都是按日期分文件夹存的,存 2
panlatent
47 天前
@asasjajsajsd 并不耽误分子目录
forty
47 天前
好不好,看你的痛点在哪。OP 说的这两种,我都不喜欢,我更喜欢直接把图片字节数据存入数据库。
直接存数据库更灵活,一切都可以动态计算或缓存,也方便防篡改、备份和同步。
存文件理论上可以减少数据库 IO ,但如果你有 CDN 缓存之类的手段,一样可以实现目的。
dwu8555
47 天前
username 就是头像文件名
quqivo
47 天前
@forty 如果图片太大 存数据库不会影响速度吗
lisxour
46 天前
从我见过的这么多网站中,80%-90%都是 2 的做法。
mangojiji
46 天前
@forty 为什么存文件反而会减少数据库 IO ?
s4d
46 天前
这个肯定是存 Id 了,因为你在不同的地方,要显示同一个图片的不同状态、尺寸之类的。
forty
46 天前
@mangojiji 因为文件内容不用从数据库读取了,是读文件系统了。
forty
46 天前
> @quqivo "如果图片太大 存数据库不会影响速度吗"

1. 头像不会太大,上传时就可以给它处理到合适的大小。文件太大,不管存数据库还是文件系统,都影响速度。
2. 如果图片占流量可观,就得上 CDN 缓解,此时从 OSS 到 CDN 或者从 DB 到 CDN 也基本是一次性的。

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

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

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

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

© 2021 V2EX