我应该将图像存储在数据库还是文件夹中? [复制]
Posted
技术标签:
【中文标题】我应该将图像存储在数据库还是文件夹中? [复制]【英文标题】:Should I store my images in the database or folders? [duplicate] 【发布时间】:2010-10-17 07:52:27 【问题描述】:可能重复:Storing Images in DB - Yea or Nay?
嗨
目前,我网站上的每家公司都有 1 张图片可以添加到他们的个人资料中。 我将该图像保存到数据库中……它是他们的公司徽标。
现在我想让他们添加更多图片。现在我不知道是否必须将其全部保存在数据库中或保存在文件夹中????
我认为文件夹会更好的原因是因为有很多不错的文章,我可以使用带有精美银光的功能,但它们都只适合保存在文件夹中的图像。
而且由于我不是那么好,所以我很难更改代码以查看数据库而不是使用文件夹进行图像检索的示例。
我想在我的网站上添加类似的内容(浏览图片)。 当图像保存在数据库中时,我有什么代码示例说明如何执行此操作?我将 ASP.NET 与 VB.net 一起使用。 Click here to view what i am talking about
各位有什么想法吗?
问候 艾蒂安
【问题讨论】:
【参考方案1】:我会选择文件夹。如果存储空间不足(只需将它们移动到另一个磁盘并重新指向),则更灵活,其他应用程序(例如 Silverlight)的灵活性更高。我只会将 DB 用于必须安全的文件。
【讨论】:
关于将它们存储在数据库中的“安全”是什么意思? 假设您的数据库得到有效保护,它提供了一个额外的层。攻击者需要识别存储在 SQL 中的图像、识别服务器、用户名/密码、表。简单地扫描受感染机器上的文件系统不会产生结果,并且编写糟糕的网站不会通过 HTTP 请求技术暴露文件(例如,让文件可下载)。如果 SQL Server 位于单独的机器/网络上,效果会更好。【参考方案2】:我通常使用的方法是将图像复制到文件夹并将相对 URL 保存在数据库中。这种方法的缺点是,如果有人删除了图像,您最终会在您的网页中显示“找不到图像”,除非您每次渲染页面时都进行检查。
【讨论】:
【参考方案3】:我的网站也有同样的问题。我决定使用文件夹实现,因为如果您使用数据库,当您只想备份图片时,您应该备份整个数据库......另一方面,您可以保持目录结构,并轻松备份.
我的朋友,把事情分开,最好的问候!
【讨论】:
【参考方案4】:对于任何普通网站,您绝对希望它作为网站应用程序本身的一部分,而不是存储在数据库中。一个网站应该尽可能地自包含以保持它的可移植性,并且不添加到数据库的往返行程(即使在缓存的地方)只能是一件好事。 Web 服务器非常擅长提供图像文件。
但是,我个人正在开发一个应用程序,其中图像是动态创建的,并通过第二个管理应用程序提供给站点。显然,这些必须以某种形式得到数据库支持,以保持图像的可维护性和安全性。
长话短说,如果图像具有商业价值(即它们是内容、它们需要安全性或它们是动态的),您将不得不将它们存储在数据库中。如果它们是静态的和微不足道的,就让网站成为一个网站。
【讨论】:
如果它们是动态创建的,为什么还要存储它们? 用于重复使用 - 使用现有图像比每次都创建相同的图像要便宜得多【参考方案5】:使用文件夹的优点是您不需要自定义处理程序来从数据库中提取这些 BLOB 并将它们转换为常规流。从不同位置托管它们也更简单,您将避免数据库服务器的负担。
您必须小心存储路径名。相对路径名更适合用作 URL,并且可以让您在存储它们的位置、提供它们的方式等方面具有一定的灵活性和扩展性。
【讨论】:
【参考方案6】:两个我都会去。
首先,将每个图像存储为数据库中的 BLOB 列。通过这样做,您可以放心,该图像始终包含在您的数据库备份中(假设您这样做了)。
其次,将文件复制到文件夹中。通过这样做,您可以避免每次都查询数据库(对于图像文件)。单独存储在文件夹中可能会产生一些影响,例如
由于磁盘损坏导致文件丢失 文件不包含在备份操作中到目前为止,我们所有的客户项目都采用相同的方法,我们遇到了各种问题,但没有丢失上传的文件。 (我们说的是超过 100GB 的上传文件)。
请注意,您可能需要查看以下内容:
-
确保无论何时更新/替换文件,都在数据库和文件夹上执行。否则会不一致。
您可能需要一个单独的表来存储文件的信息。通常,您可能希望存储以下内容:(1) 文件名 (2) 文件类型 (3) 文件大小/mime 类型
您可能希望拆分存储数据的表。我们的做法是,一旦表达到 2GB,我们就创建另一个表。设计得当,找到合适的桌子应该没有任何问题。
希望这会有所帮助。
【讨论】:
【参考方案7】:对此有两个想法:
使用文件系统。但是请确保您的方案设计得足够好,以至于任何一个文件夹都不会被图像超载,并且它成为管理的噩梦。例如,您可以使用标识符的第一个或最后一个字母或随后的位置表示法将其树出。您的里程会有所不同,因此请确保该方案适合您的数据集(图像)大小。如果您只管理 20 张图片,则无需详细说明。
使用 SQL Server 2008。它有一个名为 filestream 的新数据类型,同时会将图像保存到文件系统,但允许您通过标准数据库查询检索它。请参阅http://msdn.microsoft.com/en-us/library/cc949109.aspx 了解更多信息。
这些不是唯一的选择,但至少,我推荐选项 #1,因为使用基于文件系统的方案而不是存储和读取 blob 可以获得更好的性能。一个数据库。
【讨论】:
【参考方案8】:我最近和个人都这样做了;我更喜欢使用目录方法来存储图像,同时将它们的属性保存在数据库中。
主要原因:我为客户创建了网站。在网站上;有一个照片库部分允许用户上传新照片(可以从公共站点浏览)。 由于我的客户在上传之前没有考虑过优化图像; *.jpg 超过 1mb。 我确实实现了更新图像的能力(一旦将其保存到数据库中),但必须一次完成一条记录。
如果在将图像存储在目录中时发生这种情况,则可以将文件保存在本地、优化并放回服务器上。
Here is an example
【讨论】:
【参考方案9】:我认为将图像保存在系统文件夹中是最好的方法。 使用您知道的数据库和查询会导致一些过载,并且数据库事务通常很繁重,并且会给您的服务器带来更多压力。 通过您将图像保存在文件夹中并将 URL 放入数据库中的方式,它更适合您的应用程序加载。 但 DB 的优势在于您可以备份您的图像。
我的建议:将您的图像保存在文件夹中。唯一需要的是了解系统 I/O 操作。
【讨论】:
【参考方案10】:AFAIK,flickr.com 与文件夹/文件服务器以及存储在 db 中的参考、元数据等一起使用。见flickr architecture
【讨论】:
以上是关于我应该将图像存储在数据库还是文件夹中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
我应该将图像存储在MongoDB或本地文件系统中(通过Node.js)