【问题标题】:Storing images in NoSQL stores在 NoSQL 存储中存储图像
【发布时间】:2010-02-17 03:49:05
【问题描述】:

我们的应用程序将通过 HTTP 提供大量缩略图大小的小图像(大小约为 6-12KB)。我被要求调查使用 NoSQL 数据存储是否是一种可行的数据存储解决方案。理想情况下,我们希望我们的数据存储是可容错的和分布式的。

将 blob 存储在 NoSQL 存储中是个好主意吗?哪一个更适合呢?此外,NoSQL 是解决我们问题的好方法吗,还是我们最好将图像存储在文件系统中并直接从 Web 服务器提供它们(顺便说一句,CDN 目前不适合我们)?

【问题讨论】:

    标签: image nosql


    【解决方案1】:

    是否将图像存储在数据库或文件系统中有时是那些“圣战”类型的辩论之一;每一方都觉得他们的做事方式是正确的。一般来说:

    存储在数据库中:

    • 更容易在一个地方一次性管理备份/复制所有内容。
    • 有助于您的数据一致性和完整性。您可以将 BLOB 字段设置为不允许 NULL,但您将无法阻止删除外部文件。 (虽然这不适用于 NoSQL,因为没有传统的约束)。

    存储在文件系统上:

    • 文件系统旨在为文件提供服务。让它发挥作用。
    • DB 通常是应用程序的瓶颈。无论您能减轻多少负担,都更好。
    • 更容易在 CDN 上提供服务(您提到的不适用于您的情况)。

    我倾向于支持文件系统,因为它的扩展性要好得多。但根据您项目的规模,任何一种选择都可以正常工作。使用 NoSQL,差异就更不明显了。

    【讨论】:

    • 问题是关于在分布式键值存储中存储 blob。文件系统不是容错或分布式的,因此没有可比性。
    • 根据文件系统的不同,它既可以是容错的,也可以是分布式的——参见 MogileFS、Hadoop DFS、GlusterFS 之类的东西。
    • 这些不是完整的文件系统。
    【解决方案2】:

    Mongo DB 应该适合你。我还没有将它用于 blob,但这里有一个很好的 FLOSS Weekly podcast interview with Michael Dirolf 来自 Mongo DB 团队,他在其中解决了这个用例。

    【讨论】:

    • 您可以跳过该播客的前 13 分钟 :)
    【解决方案3】:

    CDN 将是显而易见的选择。既然已经出局了,我会说你最好的容错和负载平衡选择是你自己的私有数据中心(不管这对你意味着什么)在 2 个或更多负载平衡器(如 F5)后面。这将是您最简单的管理系统,并且您可以在硬件预算允许的情况下获得尽可能多的容错能力。您不需要任何新的软件专业知识,只需 XCOPY。

    要获得真正的容错能力,您将需要地理上的分散,否则您会受到任何有反铲的人的影响。

    (头像?)

    【讨论】:

    • CDN 加上 NoSQL 数据库作为源是一个很好的组合。我已经用 MongoDB(及其 GridFS 模块)成功地完成了几次。
    【解决方案4】:

    我正在为个人项目寻找类似的解决方案,并遇到了Riak,在我看来,这似乎是解决这个问题的绝佳解决方案。基本上,它将每个文件的指定数量的副本分发到网络中的服务器。它的设计使得服务器进出没什么大不了的。离开的服务器上的所有副本都分布在其他副本中。

    通过正确的配置,Riak 可以处理整个数据中心的崩溃问题。

    哦,它有商业支持。

    【讨论】:

      【解决方案5】:

      如果您在 Python 环境中,请考虑 y_serial 模块:http://yserial.sourceforge.net/

      在 10 分钟内,您将能够以压缩形式存储和访问您的图像(事实上,任何 Python 对象,包括网页); NoSQL。

      【讨论】:

        猜你喜欢
        • 2012-02-18
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 1970-01-01
        • 2020-04-16
        • 2021-03-26
        • 1970-01-01
        相关资源
        最近更新 更多