【问题标题】:Is is stupid to store large amounts of images in a database?在数据库中存储大量图像是愚蠢的吗?
【发布时间】:2011-12-01 08:38:23
【问题描述】:

我在允许用户将图像上传到我的应用程序时遇到了两难境地。我的主机允许无限的存储空间,但只允许 250k 个单独的文件。我是 125k,我计划发布一个允许用户上传图像的功能。如果我开始上传大量图片,我可以很快填满这个配额。我考虑将它们存储在 MySQL 等数据库中。这是一个可行的解决方案,还是只是愚蠢的?如果只是愚蠢的话,还有什么免费/便宜的替代品?

【问题讨论】:

    标签: database storage


    【解决方案1】:

    是的,将图像数据放入数据库有点愚蠢。
    我会考虑使用Amazon S3 之类的东西进行存储。

    这是几年前 Jeff 讨论过的 CodingHorror 帖子。

    【讨论】:

    • 这看起来是我最好的选择。而且超级便宜。我认为带宽成本不会像我的存储那样成为问题。 :P。非常感谢!
    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

    • +1 获取一些非常有用的信息。由于这不是一个主要的企业项目,我认为我不必担心需要将图像存储在数据库中。感谢分享!
    【解决方案4】:

    我个人不会那样做。它最终会在以后给您带来更多问题。 你为什么不注册http://www.000webhost.com/(或类似的)并创建一个脚本来上传图像而不是你的服务器?这就是我会做的。

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 2011-06-09
        • 2010-12-10
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 2016-05-15
        • 2010-11-26
        相关资源
        最近更新 更多