在数据库与文件系统中存储映像(这是一个有效的用例吗?)

时间:2011-08-10 02:49:37

标签: mysql image

我有一个应用程序,每个用户都有自己的数据库,并从同一个文件系统文件夹运行。 (数据库由子域确定)

存储在文件系统中可能会导致冲突。我想象上传的图片会很小。 (我会在存储之前缩小它们)

在这种情况下可以存储在数据库中吗?

(我知道这已被问过很多)

我还想让我的应用程序易于安装,创建可写文件夹对某些人来说很难)

3 个答案:

答案 0 :(得分:1)

好像你已经开始谈论它了,但根据我的经验,最好将文件存储在数据库中,将数据存储在数据库中。如果您担心冲突,请使用GUID作为文件名。

答案 1 :(得分:1)

从Nathanial采取相反的观点 - 我发现使用数据库来存储像图像这样的不透明数据更容易。备份数据库时,会自动获取映像的备份。此外,您可以在集成SQL查询中检索,更新或删除图像以及所有其他数据;单独保存文件意味着编写更复杂的代码,每次发出某些SQL查询时都必须将这些代码发送到文件系统以维护数据完整性。锁定可能是一个大问题,事务处理(尤其是回滚)甚至更大。

答案 2 :(得分:0)

从类似的帖子中回答:我在以前的项目中实现了两种解决方案(文件系统和数据库持久化映像)。在我看来,您应该将图像存储在数据库中。原因如下:

  1. 当您的应用服务器存在时,文件系统存储会更复杂 集群。您必须拥有共享存储空间。即使你当前 环境没有聚集,这使得扩展更加困难
  2. 你应该使用CDN作为你的静态 无论如何内容,并将您的应用程序设置为原点。这意味着 对于给定的图像,您的应用只会被点击一次,然后它就会被点击 缓存在CDN上。 CloudFront非常便宜且易于设置 up ...没有理由不使用它。节省您的带宽 动态内容。
  3. 开发速度更快(也更便宜) 数据库持久化图像
  4. 您获得参照完整性 数据库持久化图像。如果您要将图像存储在文件中 系统,你将不可避免地有没有匹配的孤儿文件 数据库记录,或者您将拥有损坏文件的数据库记录 链接。这将发生......这只是时间问题。你必须这样做 写点东西来清理它们。
  5. 无论如何,我的两分钱。