【问题标题】:Mongo db - storing media in documents and performanceMongodb - 将媒体存储在文档和性能中
【发布时间】:2014-11-16 15:28:48
【问题描述】:

我打算像这样将用户图像存储到 mongodb 集合文档中:

{
 username:String
 email: String,
 avatar: binary/base64/img
}

现在在检索用户配置文件时,我必须从查询中检索所有这些对象,所以我想知道(将媒体或二进制数据存储到文档中)会在某处或以某种方式减慢查询或性能吗?

【问题讨论】:

    标签: mongodb image mongoose nosql


    【解决方案1】:

    您不必检索所有信息。您可以使用projection 来获取用户名和电子邮件

    > db.collection.find(<query condition>, { "username" : 1, "email" : 1, "_id" : 0 })
    

    这会减少从服务器向客户端发送的信息,但您仍然必须将整个文档加载到服务器的内存中,这对您来说可能重要也可能不重要。如果二进制信息很大,比如高分辨率图像,请记住 MongoDB 中的文档有 16mb 的严格限制。在这种情况下,您应该考虑使用GridFS 来存储图像。

    【讨论】:

      【解决方案2】:

      在我们不包括处理和更改媒体内容的现实世界场景中,此决定主要是出于对可扩展性和可维护性的需求,这会间接影响性能 - 将图像或文档存储在 mongodb 中会产生大量开销支持数据保真度(数据的多种格式和大小变化,取决于请求者)和数据归档(失效帐户、过期数据等)。以下是促使我们决定在这些场景中选择文件系统而不是 mongodb 的关键原因的简短列表:

      • 更好地支持数据保真度
      • 易于维护和归档
      • 更便宜的文件存储
      • 更好的数据库缓存利用率
      • 更好的查找数据库查询性能
      • 提高数据库实例的内存利用率
      • 能够在我们的应用程序中加入查询记忆
      • 由于查询复杂性而导致的编程错误减少

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        相关资源
        最近更新 更多