【发布时间】:2011-12-01 08:38:23
【问题描述】:
我在允许用户将图像上传到我的应用程序时遇到了两难境地。我的主机允许无限的存储空间,但只允许 250k 个单独的文件。我是 125k,我计划发布一个允许用户上传图像的功能。如果我开始上传大量图片,我可以很快填满这个配额。我考虑将它们存储在 MySQL 等数据库中。这是一个可行的解决方案,还是只是愚蠢的?如果只是愚蠢的话,还有什么免费/便宜的替代品?
【问题讨论】:
我在允许用户将图像上传到我的应用程序时遇到了两难境地。我的主机允许无限的存储空间,但只允许 250k 个单独的文件。我是 125k,我计划发布一个允许用户上传图像的功能。如果我开始上传大量图片,我可以很快填满这个配额。我考虑将它们存储在 MySQL 等数据库中。这是一个可行的解决方案,还是只是愚蠢的?如果只是愚蠢的话,还有什么免费/便宜的替代品?
【问题讨论】:
是的,将图像数据放入数据库有点愚蠢。
我会考虑使用Amazon S3 之类的东西进行存储。
这是几年前 Jeff 讨论过的 CodingHorror 帖子。
【讨论】:
使用数据库显然比使用文件系统慢。如果您已经有 125k,那么使用 VPS 而不是托管可能是个好主意。大约 5-10 美元/月。
【讨论】:
有很多充分的理由将图像(或任何大容量媒体文件)存储在数据库之外。
您将将图像存储在数据库中的原因是如果您需要图像数据来处理 SQL ACID 语义。
例如,如果您在数据库中插入一行,但要回滚,您可能希望图像数据也被丢弃。如果将图像数据存储在数据库外部,则必须清理孤立的图像。 同样,如果您从数据库中删除行,您还必须记住从磁盘或 S3 或其他任何地方删除它们。 同样,如果您更新行,您将失去事务隔离,因此您有竞争条件。
如果您将图像存储在数据库之外,那么创建数据库备份也会更加复杂。不仅因为现在你的备份是一个多步骤的过程(备份数据库,然后备份图像收集),而且你不能创建热备份。在备份从数据库复制数据的几分钟内,您的图像集可能会发生变化。
【讨论】:
我个人不会那样做。它最终会在以后给您带来更多问题。 你为什么不注册http://www.000webhost.com/(或类似的)并创建一个脚本来上传图像而不是你的服务器?这就是我会做的。
或者,您可以开始设置图像保留时间的限制?并在 x 天后删除它们?
【讨论】:
您可以选择将图像存储在 CDN 或 s3 之类的东西上吗?从您的服务器上获取图像并获得快速基础架构的好处。更多内容:http://aws.amazon.com/cloudfront/
如果您需要保护图像,会变得更加复杂,但都是可行的。
【讨论】: