所以我正在使用一个将图像存储在数据库中的应用程序.你对此有何看法?我更像是一种在文件系统中存储位置的类型,而不是直接将它存储在数据库中.
您认为利弊是什么?
在Web应用程序的上下文中,我的老板总是说在数据库中引用了一个图像,而不是图像本身.我倾向于同意在数据库中存储网址与图像本身是一个好主意,但在我现在工作的地方,我们在数据库中存储了大量图像.
我能想到的唯一原因可能是它更安全吗?你不希望有人直接链接到网址吗?但如果是这种情况,您可以随时让网站/服务器处理图像,例如asp.net中的处理程序,以便用户需要进行身份验证才能查看图像.我也在考虑从数据库中提取图像会损害性能.将图像存储在数据库中可能是一个好/不太好的想法的任何其他原因?
完全重复: 用户映像:数据库还是文件系统存储?
完全重复: 在数据库中存储图像:是或不是?
完全重复: 我应该将我的图像存储在数据库还是文件夹中?
确切重复: 您是否将二进制数据存储在数据库或文件夹中?
完全重复:将 图片存储为Web应用程序的文件或数据库?
确切重复: 存储少量图像:blob还是fs?
精确复制: 将图像存储在文件系统或数据库中?
目前,我在InnoDB表中将图像(最大6MB)存储为BLOB.随着数据量的增长,夜间备份越来越慢,阻碍了正常的性能.
因此,二进制数据需要转到文件系统.(指向文件的指针将保存在数据库中.)
数据具有树关系:
- main site
- user_0
- album_0
- album_1
- album_n
- user_1
- user_n
etc...
Run Code Online (Sandbox Code Playgroud)
现在我希望数据通过目录结构均匀分布.我该怎么做到这一点?
我想我可以尝试MD5('userId, albumId, imageId');切片结果字符串以获取我的目录路径:
/var/imageStorage/f/347e/013b/c042/51cf/985f7ad0daa987d.jpeg
这将允许我将第一个字符映射到服务器,并将目录结构均匀分布在多个服务器上.
然而,这不会保持每个用户组织的图像,可能将图像分散在多个服务器上的1个专辑中.
我的问题是:
在保持用户/专辑数据在一起的同时,以平衡的方式将图像数据存储在文件系统中的最佳方法是什么?
我在想正确的方向吗?或者这是完全做事的错误方式?
更新:
我将为md5(user_id)最高级别的拆分进行字符串切片.然后将所有用户数据放在同一个存储桶中.这将确保数据的均匀分布,同时保持用户数据紧密存储在一起.
/var
- imageStorage
- f/347e/013b
- f347e013bc04251cf985f7ad0daa987d
- 0
- album1_10
- picture_1.jpeg
- 1
- album1_1
- picture_2.jpeg
- picture_3.jpeg
- album1_11
- picture_n.jpeg
- n
- album1_n
我想我会使用从后面拆分的albumId(我喜欢这个想法!),以保持每个目录的专辑数量更小(尽管大多数用户不需要).
谢谢!
我在这方面读了一些帖子,但我仍然不明白在我的情况下什么是最好的解决方案.
我开始编写一个新的webApp,后端将提供大约1-10万个图像.(单张图片的平均尺寸为200-500kB)
我的网站将同时向100-1000个用户提供内容和图像.
我还希望尽可能降低提供商的成本(但这是次要要求).我认为与DB大小的成本相比,文件系统空间更便宜.
就个人而言,我喜欢将所有图像都放在数据库中,但任何建议都会非常感激:)
您认为在我的情况下DB方法是正确的选择吗?
我正在实施一个处理大量图像的项目.
在您看来,以下两种方法的缺点是什么?
使用方法1我可以直接访问图像,就是这样
<img src="same_directory/10.jpg" />
Run Code Online (Sandbox Code Playgroud)
使用方法2,我仍然可以使用上面的HTML,但需要将jpg访问重定向到PHP脚本,该脚本将从数据库返回真实图像.
在性能方面哪一个你觉得它更快?
我很想接近1.
完全重复: 用户映像:数据库还是文件系统存储?
完全重复: 在数据库中存储图像:是或不是?
完全重复: 我应该将我的图像存储在数据库还是文件夹中?
确切重复: 您是否将二进制数据存储在数据库或文件夹中?
完全重复:将 图片存储为Web应用程序的文件或数据库?
确切重复: 存储少量图像:blob还是fs?
我必须存储用户的个人资料图片(100px*100px)存储它的最佳方式是什么?数据库或系统文件?哪一个更好,更快,更安全......?
可能重复:
在DB中存储图像 - 是或否?
多年来,我被告知不要将图像存储在数据库中,也不要将任何大型BLOB存储在数据库中.虽然我可以理解为什么数据库没有/没有效率,我从来没有理解为什么他们不能.如果我可以将文件放在某处并引用它,为什么数据库引擎也不能这样做.我很高兴Damien Katz在最近的Stack Overflow播客中提到它,Joel Spolsky和Jeff Atwood,至少默默地同意了.
我一直在阅读Microsoft SQL Server 2008应该能够有效处理BLOB的提示,这是真的吗?如果是这样,有什么阻止我们在那里存储图像并摆脱一个问题?我能想到的一件事是,虽然图像可以很快地由静态Web服务器提供,如果它是某个文件,当它在数据库中时,它必须从数据库传输到Web服务器应用程序(这可能比静态Web服务器)然后它被服务.不应该缓存帮助/解决最后一个问题?
我正在为我的网站添加一些功能,以便用户可以上传他们自己的个人资料图片,所以我想知道是将它们作为BLOB存储在数据库中,还是将它们放在文件系统中.
我在这里找到了一个类似的问题:在DB中存储图像:Yea或Nay,但给出的答案更倾向于人们期待数千甚至数百万的图像,而我更关心的是小图像(JPEG图像直到可能是150x150像素),而且数量很少:可能高达一两千.
对于这种情况,DB BLOB vs Filesystem有什么感受?客户端如何使用来自DB和文件系统的缓存映像?
如果存储在数据库中的BLOB是要走的路-有什么我应该知道哪里来存储它们?由于我想我的大多数用户都不会上传图片,我是否应该在需要时创建一个user_pics表(外部)连接到常规users表?
编辑:我正在重新打开这个问题,因为它与你链接的那两个不重复.这个问题具体是关于使用DB或FS来处理少量图像的优缺点.正如我上面所说,另一个问题是针对需要存储数千个大图像的人.
我正在制作视频分享网站.所以我在想什么是存储大量视频文件的最佳方式.这样,访问它们时速度和性能都会很快.
我问我的同事,他们说将文件存储在硬盘文件夹上效率不高,因为在许多读/写操作中它会非常慢.
有人建议存储在mysql blob中.
我在这里很困惑!
让我知道你们的想法?
我正在使用asp.net mvc,并有一个用户可以上传图像的部分.我想知道我应该在哪里存储它们.
我正在学习本教程,他似乎将它存储在app_data中.然而我读了另一个人说它应该只保存你的数据库.
所以不确定使用app_data有什么好处.我在共享主机上,所以我不知道这是否有所作为.
编辑
我打算在数据库中存储图像的路径.然后,我将在图像标记中使用它们,并在用户访问我的网站时将其呈现给用户.我有一个文件上传器只会期望图像(检查将是客户端和服务器)
database ×7
blob ×6
image ×5
mysql ×2
storage ×2
.net ×1
asp.net-mvc ×1
c# ×1
filesystems ×1
performance ×1
sql ×1
theory ×1