将图像作为blob存储在数据库中与在数据库中仅存储文件名相比有哪些优点和缺点。
我正在使用PHP(CodeIgniter)和MySQL。
我知道这个问题是主观的,但客户问我这个问题,我无法给出一个好的答案。
答案 0 :(得分:14)
我通常会说:
这意味着我几乎总是将图像/文件存储在文件系统中,并且只存储文件的名称(可能还有大小和内容类型 - 总是有用的)数据库中。
考虑一下,这个问题可能是重复的......哦,是的,它实际上是;至少看到那些问题+答案:
答案 1 :(得分:1)
我怀疑你的客户有足够的经验来判断答案 客户曾要求我将图像严格存储到数据库中。经过一些调查后我发现它们只是意味着“在服务器端存储图像”,因为它们之前有一个MS Access数据库,它可以选择在数据库中存储图像还是只是链接到图像,而图像本身留在用户的硬盘上,经常无法使用。
至于你的问题,我怀疑这个图像与关系模型有任何关系。您无法根据blob内容对其他行进行排序,过滤,关联。虽然你必须做很多事情来支持数据库中的图像 - 显示专用脚本,模拟条件获取等。 我知道,这个功能存在。但是,更明显的尝试是追随时尚而不是真正的需求,特别是在网页开发中,图像通过单独的请求进行请求。
答案 2 :(得分:0)
我更喜欢在上传时重命名图像文件并将其存储到与其父级(用户,产品)相关的数据库行中...然后将它们上传到3个文件夹中:
/uploads
/img
/products
/small
/medium
/xxl
将它们调整为小(50x50),中(90x90),xxl(原始尺寸),然后再将它们移动到这些目录中。
如果你需要SEO图像,你可以存储它们,例如:
id | product | image
1 book 1-book.png
因此您将在同一图像文件中获取ID和产品名称。
或者您甚至可以存储
id | product | image
1 book 1.png
然后很容易附加src路径:
/*Config file*/
$config['base_static_products_url'] = 'uploads/img/products/';
/*View file*/
<img src="<?php echo base_url().$this->config->config['base_static_products_url'].'/small/'.$row->image ?>" alt=""/>
OR (no SEO)
<img src="<?php echo base_url().$this->config->config['base_static_products_url'].'/small/'.$row->id.'.png' ?>" alt=""/>