如题~
1
sunziren 2020-12-25 09:15:42 +08:00
mysql 可以存图片吗
|
2
jevonszmx 2020-12-25 09:15:45 +08:00
图片\CSS\JS 等静态资源,一般不存数据库,所以和 sqlite 和 mysql 没关系,可以考虑七牛云,CDN 免费有 10 个 G 的流量,超低访问量应该够的
|
4
laminux29 2020-12-25 09:19:02 +08:00
单机 sqlite 性能比 mysql 高的多,但日后你们要考虑扩容的话,前期选 sqlite 就是饮鸩止渴,这种情况建议选 mysql 走 isam 引擎。
|
5
lqw3030 2020-12-25 09:20:51 +08:00
文件存服务器磁盘,存储地址索引在数据库,程序内做热点文件缓存
|
6
young1lin 2020-12-25 09:21:17 +08:00
七牛云有非常多的限制
|
8
supuwoerc 2020-12-25 09:34:09 +08:00
图片入库那就得 blob 这种的吧,还是 mysql 吧,踩坑了也能找到抢救方案
|
9
nekoneko 2020-12-25 09:36:06 +08:00
图片找个对象存储,数据库可以用 H2
|
10
love 2020-12-25 09:36:08 +08:00 via Android 1
存数据库方便备份文件😂,你是怎么产生这种错觉的。 而且另外一大堆小文件存一个数据库,要备份就只能一起备份了吧,rsync 都不行。web 访问的效率也更低。
|
11
cp19890714 2020-12-25 09:36:31 +08:00
什么图片, 为何要存数据库?
如果是为了方便备份, 那么云存储更方便. |
12
0bit 2020-12-25 09:40:58 +08:00
图片别存数据库
超小站用 SQLite 其实也可以,后期大了再迁移 |
15
spacebound 2020-12-25 09:45:25 +08:00
mysql 后期也方便扩展
图片找个对象存储或者直接静态资源,不建议存数据库 |
17
NotFoundEgg 2020-12-25 09:48:38 +08:00 1
文件入库一时爽 后期维护火葬场
|
18
youla OP @NotFoundEgg 你太高估我的数据量了~我又不是做图床
|
22
lawler 2020-12-25 10:02:57 +08:00
sqlite 单库不要超 2G
|
23
zliea 2020-12-25 10:03:06 +08:00
minio?
|
24
liningit 2020-12-25 10:07:21 +08:00
图片还是直接存磁盘吧,数据库就放个文件地址就可以了
|
25
wjhjd163 2020-12-25 10:11:26 +08:00 via Android
头铁就文件入库...
看你之前帖子中有谈到虚拟主机问题? 如果是准备用虚拟主机中的共享数据库,那个文件入库更是火葬场... 虽然虚拟主机的数据库空间可能比分配的文件空间大点儿,但文件入库还是不太明智 还是建议用对象存储 |
26
Juszoe 2020-12-25 10:13:37 +08:00 via Android 3
对于图片,文件系统就是最好的数据库,没必要再加一层 sqlite
|
27
Macv1994 2020-12-25 10:13:57 +08:00
个人建议图片最好别入库,之前在上一家公司做的项目也是图片入库,那维护真的想死,果断跑路了..
|
28
chendy 2020-12-25 10:17:54 +08:00
图片入过 mysql 也入过 mongodb 的表示
老老实实弄个 oss,再入库我就是** |
29
securityCoding 2020-12-25 10:19:00 +08:00
方向错了吧? 文件用对象存储 ,数据库可以存在 key 索引
|
30
boluo 2020-12-25 10:19:35 +08:00
图片为啥要进数据库啊。。。给自己以后挖坑么
|
31
USAA 2020-12-25 10:22:09 +08:00 1
数据库就存个图片路径不就行了
图片放服务器里啊 |
32
opengps 2020-12-25 10:23:20 +08:00
你这个需求,需要动态吗?
不需要的话, 阿里云 oss,七牛云 oss,腾讯云 cos,华为云 oss,百度云 obs,都是适合你的产品,流量小基本可以计费等于 0 。以防万一,你可以套一层 cdn 避免 被刷流量 |
33
keepeye 2020-12-25 10:28:39 +08:00 1
/
-- /files -- db.sqlite3 -- server.exe 这样不行嘛?备份的时候整个文件夹打包就行了,非要把文件塞数据库做什么... |
34
tabris17 2020-12-25 10:31:32 +08:00
SQLite 数据库文件大小的上限是 140TB 。几十 GB,如果有索引的话性能也还是可以的,问题应该不大
|
35
xchaoinfo 2020-12-25 10:32:55 +08:00
https://www.v2ex.com/t/678233 这个是不是对你场景有帮助, 我之前也有类似的需求, 需要存储海量的图片
|
37
hd2ex 2020-12-25 10:36:08 +08:00
既然是小站,所以可以忽略性能差异,那就选择扩展性更强的 mysql 吧,万一不小心变成大站呢。
|
38
icyalala 2020-12-25 10:44:14 +08:00
都不嫌麻烦了,那还不存文件,非要存数据库。。
问题是数据库损坏的可能性远比文件系统要大得多,一旦损坏你就要哭了。 |
42
imgbed 2020-12-25 10:53:19 +08:00 via Android
图片可以存硬盘,路径在数据库里对应。写少读多的,可以 sqlite,后续大了再转 mysql 不迟
|
43
keepeye 2020-12-25 10:53:42 +08:00
存 sqlite 吧 反正量也不大 能满足
|
46
Keyes 2020-12-25 10:55:10 +08:00
非要 mysql vs sqlite 二选一,还是 mysql 吧
|
47
podel 2020-12-25 11:04:04 +08:00
数据库的作用是快速所有索引,外键关联等。 不是专门用来存储大容量的二进制数据的。 你那个设计,最好是把文件名放在数据库里面。file 单独放在文件系统里面。
|
48
youla OP 直接存文件系统和 sqlite 应该差不多吧?其实我是想把 sqlite 当压缩包用~~会被打吗
|
49
debuggerx 2020-12-25 11:11:59 +08:00 3
看了楼主最近几个帖子,明显是被视野限制了思维,虽然是在提问但是又不接受别人给出超出自己认知的建议,no medicine to save……
|
50
wtks1 2020-12-25 11:13:12 +08:00 via Android
sqlite 无法并发写入....
|
51
jevonszmx 2020-12-25 11:16:02 +08:00
@debuggerx 我后悔自己的回复了,楼主就是那种别人给很好的建议,就是不听,不是来刷流量的,就是,哎,多说浪费自己生命。
|
54
guanhui07 2020-12-25 11:28:57 +08:00
放云存储好
|
55
youla OP @debuggerx 顺便再补充一下,虽然我可能被视野限制了思维,但这么多人明显就是被技术限制了思维啊,而且我一开始提问就明确了,我是要存数据库的,自己玩的项目而已。
|
56
westoy 2020-12-25 11:33:29 +08:00
同样存在一个文件里...
可以存 kv 库, 比如 leveldb 、tokyo tyrant, 甚至以后可以上各种基于这些 k-v 库的 replication 系统 也可以 dd 一个块文件, 格成 fs 系统, 要备份就 dd 出来 gzip 一下 为啥想不开要存 sql db 里......而且 mysql 要备份很明显不止一个文件..... |
57
xyshmily 2020-12-25 11:33:44 +08:00
minio
|
58
icyalala 2020-12-25 11:36:28 +08:00 3
既然只想自己玩,又不愿意听别人的建议,那发帖子的意义是什么。。
|
61
0bit 2020-12-25 11:37:33 +08:00
真想吃,谁也拦不住不是🤷♂️
|
63
XiLingHost 2020-12-25 11:38:56 +08:00
非要存文件到数据库,建议用 mongo 的 gridfs
|
65
youla OP @XiLingHost 这个新知识,学习了,可以!!
|
66
takemeaway 2020-12-25 11:45:35 +08:00
mysql base64 存。 没问题的
|
67
zjttfs 2020-12-25 11:55:12 +08:00
mysql 吧, 量小也要考虑出问题下可恢复
如果你不想文件以图片的形式保存在服务器, 你可以代码加密(可逆)的方式存储成任意文件,需要读取的时候在解密就好了. 数据库存路径,原始信息 |
68
oott123 2020-12-25 11:56:26 +08:00 4
是这样的,你想做事情 X,然后你觉得 Y 是做事情 X 的最好方法,所以你发帖来问如何更好地做 Y 。这个现象通常被称为“XY Problem”(参考: https://coolshell.cn/articles/10804.html )
换到你的需求来说,我猜就是(可能猜的不准): 我要在只有 FTP 作为文件管理手段的虚拟主机上,使用 PHP 建设一个网站,用于存储少量的图片。我不希望把每张图片分别存储,因为这样如果需要备份,通过 FTP 下载会很慢。由于我的存储空间有限,所以希望选择空间占用小的方法。 在这个问题下,你觉得使用 sqlite 或者 MySQL 是最理想的选择,但又拿不准哪个占用小,所以来发帖询问这个问题。但显然,无论是 sqlite 还是 MySQL 都不是为这个场景优化的,所以大家对你要做什么表示了疑惑。 --- 回答你一开始的问题,无论是 sqlite 还是 MySQL 在这种场景下的硬盘资源占用区别不会太大。 不过如果我对你的需求理解没有错的话,我大概会选择存储文件,并且在我的 PHP 后台添加一个功能,点击之后把所有的图片文件打包成一个 zip,再通过 FTP 下载这个 zip 从而规避 FTP 下载大量文件缓慢的问题,同时又避免了把文件存到 sqlite 的风险(数据库错误导致所有图片同时丢失)。 |
69
westoy 2020-12-25 11:56:45 +08:00
|
71
youla OP @takemeaway 目前是 base64->gz 入库,所以用 blob 字段,测试了是可以有效压缩文件大小的,虽然有点呆。
@zjttfs 主要是不想一堆文件,如果可以直接代码往压缩包里追加的话(还没试过),我还是愿意存到文件系统的,我现在存数据库也不是为了查询,就是保留,可能过了几个月、几年后再去看,那样... |
74
youla OP @oott123 这种回复看着就很舒服,有理有据,我之前也想过,不过不是存储完成后打包 zip,是直接 php 往 zip 里面追加,因为我其实并不需要“查询”功能,别问我为什么不用云盘,我也在用~~
|
75
qiayue 2020-12-25 12:10:14 +08:00
php 可以直接往一个 zip 文件里写入新文件
|
76
kidlj 2020-12-25 12:13:19 +08:00 via iPhone 9
有两种人问的问题不值得浪费时间:
一种是回答了看不到反馈的;一种是回答了完全不听的。 |
78
suotm 2020-12-25 12:29:27 +08:00
好多 append 啊
|
79
947211232 2020-12-25 12:39:21 +08:00
超低访问量的小站 建议改为 自用的小站,如果自用的话 sqlite 确实够了
|
80
eason1874 2020-12-25 12:42:05 +08:00
看到前面楼主坚持要二进制入库,我就猜是为了保密,后来果然看到了这个需求。
考虑下 OneDrive 的个人保管库吧,安全和易用性共存,这地方放裸照都能安心的。 |
81
JerryCha 2020-12-25 12:46:55 +08:00
当然 mysql 啊,不然出去吹逼都没人听
|
82
ashine 2020-12-25 12:50:09 +08:00
sqlite 不支持并发,建议考虑做个 redis 缓存索引
|
83
cs8425 2020-12-25 13:19:17 +08:00
很久以前做过一个自用的小档案保存平台, 全部直接入库 mysql, 不过那些档案最大不超过 100kB
后果嘛... 除了后来要翻资料比较麻烦外, 其实也没啥后果, 吃灰还能怎样... 如果需求是: 1. 减少空间占用 2. 不依靠外部服务 3. 存放档案数量少, 方便备份 那我会选择 index+单一大档 一个档案(sql 啥的都好)存放偏移,长度,(UUID/档名) 另一个大档案直接 append 要存的内容(要不要加密处理随你高兴) 取出要取出某个档案就去 index 找出偏移跟长度 再从那个大档里面拉出来就好 备份就更简单了 index 档+单一大档 没了... @debuggerx #49, @0bit #59: 赞同你们的说法, 就是视野限制又铁头, 当作回给其他路过得人参考搂... |
84
charlie21 2020-12-25 13:41:37 +08:00
单文件嘛 sqlite 反正想导出也可以导出
|
85
caoyouming 2020-12-25 14:13:00 +08:00
LZ 这种应该就是图片直接存储在服务器上文件夹里面的吧,那数据库就是个记录文件名的,随便啥都行。主流 mysql 。占用的话,全存在服务器上文件多了肯定会慢了。
|
86
namelosw 2020-12-25 14:39:18 +08:00
Sqlite 其实挺适合文件的. MySQL 没道理用, 放 MySQL 里会很影响性能
想要特别简单的方案: 磁盘 想要正常点的方案: S3 之类的 想要折衷省事的方案: SQLite |
87
w950888 2020-12-25 14:41:16 +08:00
Sqlite 挺好的,支持楼主,干就完了
|
88
litchinn 2020-12-25 14:51:41 +08:00
图片量少用 FTP 或者直接 local,量大用 Minio 吧,然后 nginx 搞个代理,sqlite 存 metadata,mysql 最好咯
|
89
ming7435 2020-12-25 14:59:30 +08:00
不超过 1K 也值得发个贴?
|
90
lscexpress 2020-12-25 15:27:38 +08:00
@sunziren mysql 可以存图片,兄 der 上课的时候是不是操作系统翘课了啊
|
91
YvanGu 2020-12-25 15:39:34 +08:00
当初干过这种事,php+sqlite 写的笔记本程序,附件图片啥的都存 sqlite 里,感觉还是蛮快的,对了,当时还搞了个加密,所有数据写入前加密,感觉一点都不慢呢(丢免费虚拟主机里)
|
92
hanxiV2EX 2020-12-25 17:02:07 +08:00 via Android
为什么可以附言这么多,我的帖子只能 3 条
|
96
dark3212 2020-12-25 17:26:00 +08:00
数据量不大写入 mysql 问题也不大。
唯一要考虑的就是定时备份,因为文件存磁盘时出现磁盘坏道损坏的只是几张图片,存数据库坏道有可能导致整个数据库挂了。 |
99
byzf 2020-12-25 18:10:59 +08:00
mysql 放本地,资源字段里存个 url,文件放本地 nginx 提供,不香吗。
扩展的话,mysql 扔外部服务,文件扔 cdn,扩展到百万访问都无所谓,无缝衔接,甚至不用改代码。 访问量不大的话感受不到 mysql 和 sqlite 的性能差距,而且反正 cpu 跑不满,mysql 多开销 100mb 内存,也是微乎其微。 |
100
jimmyismagic 2020-12-25 18:19:56 +08:00
我大三的时候写了个管理系统,头像就是存数据库的,哈哈,当时比较傻,但也不算傻,毕竟能在数据库存图像还是有点难度的
|