
哪种好?
1 xupefei 2024 年 5 月 12 日 via iPhone 1 |
2 lianyue 2024 年 5 月 12 日 尽少我选择 xxx |
3 imdong 2024 年 5 月 12 日 via iPhone 文件名以用户相关唯一信息储存,数据库就不用存了,缺点是不会有记录。 |
4 akira 2024 年 5 月 12 日 都行,反正不要存文件就行 |
6 aru 2024 年 5 月 13 日 2 因为 1 扩展起来挺麻烦的,如果确认只有几万个头像那倒是无所谓 |
7 Casbin PRO @fgt1t5y 存完整 URL ,不差这点存储空间。只存相对路径,一旦需要支持多 URL 基地址(多个 OSS )就 gg 了,具体可以参考 Casdoor: https://github.com/casdoor/casdoor |
8 hallDrawnel 2024 年 5 月 13 日 存完整的 URL 。1 限制了前缀只能有一个。 |
9 dcsuibian 2024 年 5 月 13 日 看标题我还以为你说的完整 url 是 https://example.com/assets/xxx.jpg 这样呢 |
10 busier 2024 年 5 月 13 日 这问题很蛋疼,即使你选了 1 ,以后想改 2 ,只要在 2 变更 path 前,sql 一下批量更新一下就行了。又或者在增加一个字段存放 path 都可以。犯得着这么纠结么,还是不自信? |
11 facebook47 2024 年 5 月 13 日 via Android 你这其实都是相对路径,感觉没太大区别,用 2 可能维护容易点,一看就知道在哪里了 |
12 ShinichiYao 2024 年 5 月 13 日 直接 base64 存数据库,最讨厌大量零碎的小文件 |
13 Glkcv 2024 年 5 月 13 日 这俩没区别吧,2 如果有变动也就是再加一层文件夹的事,既然没区别那就选占用少的 |
14 Dragonphy 2024 年 5 月 13 日 为啥不用 OSS 存储图片 |
15 RedBeanIce 2024 年 5 月 13 日 存文件 id 。 |
16 yinft 2024 年 5 月 13 日 基本成熟点的系统都会直接存 oss 的绝对地址吧 |
17 macaodoll 2024 年 5 月 13 日 via iPhone 只要不把二进制直接存进去就都 OK |
18 wusheng0 2024 年 5 月 13 日 via Android 1 吧,路径写在配置文件里面 |
19 Felldeadbird 2024 年 5 月 13 日 我选第二种,因为我懒。我不想代码在组装一次。 |
20 Dragonish3600 2024 年 5 月 13 日 第一种,只需要保存文件名,文件 URL 可以通过代码拼接 将来如果要移动到其他目录,代码里修改一下拼接就好了。 如果用第二种,将来修改路径会很麻烦 |
21 helone 2024 年 5 月 13 日 肯定 1 咯,楼上说的多个 OSS 的情况再新增一个 bucket 字段呗,国内这种网络环境,无论是批量更换 CDN 地址或者域名被封都能很快解决 |
22 guanzhangzhang 2024 年 5 月 13 日 |
23 QlanQ 2024 年 5 月 13 日 存完整的 URL |
24 c0mmand 2024 年 5 月 13 日 @ShinichiYao #12 +1 |
25 Tink PRO 我觉得还是对象存储吧,存 1 |
26 iyiluo 2024 年 5 月 13 日 肯定第一种好,数据冗余低,信息密度高,迁移也方便 |
27 kenvix 2024 年 5 月 13 日 我的做法是写两个字段,filename 和 storage_provider ,这样的做法的好处是只存我文件名就行,并且如果后续需要新的基础路径或者存到 OSS/S3 上,那开个新的 storage_provider id 就行了 |
28 opengps 2024 年 5 月 13 日 存路径,毕竟很有可能将来改成对接对象存储来存储头像,到时候的路径就要改成个网址了 |
29 wuhao1 2024 年 5 月 13 日 选 1,选 2 这不是我正经历的么? 老系统:直接 uid.jpg 图片路径都不需要存 如果要调图片(直接饮用传参过来的 id 直接可以得到路径,少查一次数据库,又节省 了数据库的空间 新系统:有存路径,( oss 的路径,优点:不需要拼装直接从数据库读取地址(也就是上面的 缺点 我以为第一种更优秀 但是团队协作需要包容更多 |
31 julyclyde 2024 年 5 月 13 日 @ShinichiYao 为啥要把数据膨胀三分之一存进去呢? |
32 hhhzccc 2024 年 5 月 13 日 MySQL 存 id 号。OSS 存内容。用的时候作下关联。 |
33 JackLiang 2024 年 5 月 13 日 via Android 文件放 oss 省心 |
34 saranz 2024 年 5 月 13 日 这个应该是结合自己的业务需求,如果量级小,那全路径也无所谓。 但如果业务量大,多一个字符都是浪费。所以连后缀都可以由代码生成。 |
35 ShinichiYao 2024 年 5 月 13 日 @julyclyde 不是把字符串 base64 ,是把图像文件二进制 base64 存进去 |
36 julyclyde 2024 年 5 月 13 日 @ShinichiYao 对啊,你为啥要把图像额外 base64 一步?数据库 blob 字段直接用不就得了? |
37 RainyH2O 2024 年 5 月 13 日 存储的本质就是选择用什么数据结构当容器存数据罢了,1 就是当作集合,2 就是当作树。实际上不分路径按一定的规范取文件名、给文件分类到不同文件夹、给文件加标签,这些都是当作树存储。选择外部存储也无非是把树结构的信息存到外部罢了。想清楚树结构的信息放到哪最能接受就可以。 |
38 Building 2024 年 5 月 13 日 头像不是和 id 或者其他字段关联的吗?不用额外记 |
39 adoal 2024 年 5 月 13 日 头像上传之后按用户 id 编制文件名保存到对象存储。 |
40 mangojiji 2024 年 5 月 13 日 这取决于图片是怎样被读取的吧? 如果图片路径是前端上写死的,那只存名字可以啊。 如果图片路径是后端下发的,那存完整 URL 或者相对路径都可以。 |
41 panlatent 2024 年 5 月 13 日 二选一的话,选 1 。概念上区分 “存” 的“原始数据”是文件名而不是 URL ,而“取”(对象方法/属性)的是 URL ,会更好一点。 |
42 ZeekChatCom 2024 年 5 月 13 日 存 1 ,占用存储的空间少。 |
43 QUC062IzY3M1Y6dg 2024 年 5 月 13 日 我们后端选择 2 的做法 |
46 ETiV 2024 年 5 月 13 日 via iPhone Web 上一般会有独立的 CDN 域名,这样可以减少请求时携带 Cookies 这些在 CDN 场合没用的东西 再就是把头像 URL 分成 a)通用的 prefix 部分 & b)不能通用的文件名部份 prefix 当作程序的常量写在 config 里,文件名部份存数据库里 |
47 mrytsr 2024 年 5 月 13 日 via Android 1 |
48 sleepyfevniv 2024 年 5 月 13 日 列 avatar_url (存 xxx.jps ), 列 store_type (如果有不同储存桶) |
49 zed1018 2024 年 5 月 13 日 @ShinichiYao #32 难道图片 base64 就不膨胀了吗 |
50 asasjajsajsd 2024 年 5 月 13 日 为啥大家和我的都不一样,linux 和 oss 不是有最大文件数限制的么,虽然很大,但不怕这个值直接爆了么,所以很大一部分图片、文件,我都是按日期分文件夹存的,存 2 |
51 panlatent 2024 年 5 月 13 日 via Android @asasjajsajsd 并不耽误分子目录 |
52 forty 2024 年 5 月 13 日 好不好,看你的痛点在哪。OP 说的这两种,我都不喜欢,我更喜欢直接把图片字节数据存入数据库。 直接存数据库更灵活,一切都可以动态计算或缓存,也方便防篡改、备份和同步。 存文件理论上可以减少数据库 IO ,但如果你有 CDN 缓存之类的手段,一样可以实现目的。 |
53 dwu8555 2024 年 5 月 13 日 username 就是头像文件名 |
55 lisxour 2024 年 5 月 14 日 从我见过的这么多网站中,80%-90%都是 2 的做法。 |
57 s4d 2024 年 5 月 14 日 这个肯定是存 Id 了,因为你在不同的地方,要显示同一个图片的不同状态、尺寸之类的。 |