将大量图像存储在数据库中是愚蠢的吗?

时间:2011-12-01 00:14:24

标签: database storage

我在允许用户将图像上传到我的应用程序时遇到了困境。我的主机允许无限的存储空间,但只允许250k个人文件。我是125k,我打算发布一个允许用户上传图像的功能。如果我开始上传大量图片,我可以快速填写该配额。我想过将它们存储在MySQL等数据库中。这是一个可行的解决方案,还是只是简单的愚蠢?如果它只是愚蠢的,那么一些免费/廉价的替代品会是什么?

5 个答案:

答案 0 :(得分:1)

使用数据库显然比使用文件系统慢。如果你已经拥有125k,那么使用VPS而不是托管将是一个好主意。这大约是5-10美元/周一。

答案 1 :(得分:1)

是的,将图像数据放在数据库中会有点傻 我会考虑使用像Amazon S3这样的东西进行存储。

这是多年前杰夫讨论过的CodingHorror帖子。

答案 2 :(得分:1)

将图像(或任何庞大的媒体文件)存储在数据库之外有很多充分的理由。

在数据库中存储图像的原因是,您需要使用图像数据来处理SQL ACID语义。

例如,如果在数据库中插入行但回滚,则还希望丢弃图像数据。如果将图像数据存储在数据库外部,则必须清除孤立的图像。 同样,如果从数据库中删除行,则还必须记住从磁盘或S3或其他任何内容中删除它们。 同样,如果您更新行,则会丢失事务隔离,因此您有竞争条件。

如果将图像存储在数据库之外,则创建数据库备份也会更复杂。不仅因为现在您的备份是一个多步骤过程(备份数据库,然后是备份映像集合),而且您还无法创建热备份。在备份从数据库复制数据时,您的图像集可能会在几分钟内发生变化。

答案 3 :(得分:0)

我个人不会这样做。最终会导致更多问题。 为什么不注册http://www.000webhost.com/(或类似)并创建脚本来上传图像而不是服务器?这就是我要做的事。

或者,您可以开始设置图像保留时间的限制吗?并在x天后删除它们?

答案 4 :(得分:0)

您可以选择将图像存储在CDN或类似s3的位置吗?从您的服务器获取图像并获得快速基础架构的好处。更多信息:http://aws.amazon.com/cloudfront/

如果您需要保护图像但是所有图像都可行,则会变得更复杂。