【发布时间】:2014-11-16 15:28:48
【问题描述】:
我打算像这样将用户图像存储到 mongodb 集合文档中:
{
username:String
email: String,
avatar: binary/base64/img
}
现在在检索用户配置文件时,我必须从查询中检索所有这些对象,所以我想知道(将媒体或二进制数据存储到文档中)会在某处或以某种方式减慢查询或性能吗?
【问题讨论】:
标签: mongodb image mongoose nosql
我打算像这样将用户图像存储到 mongodb 集合文档中:
{
username:String
email: String,
avatar: binary/base64/img
}
现在在检索用户配置文件时,我必须从查询中检索所有这些对象,所以我想知道(将媒体或二进制数据存储到文档中)会在某处或以某种方式减慢查询或性能吗?
【问题讨论】:
标签: mongodb image mongoose nosql
您不必检索所有信息。您可以使用projection 来获取用户名和电子邮件
> db.collection.find(<query condition>, { "username" : 1, "email" : 1, "_id" : 0 })
这会减少从服务器向客户端发送的信息,但您仍然必须将整个文档加载到服务器的内存中,这对您来说可能重要也可能不重要。如果二进制信息很大,比如高分辨率图像,请记住 MongoDB 中的文档有 16mb 的严格限制。在这种情况下,您应该考虑使用GridFS 来存储图像。
【讨论】:
在我们不包括处理和更改媒体内容的现实世界场景中,此决定主要是出于对可扩展性和可维护性的需求,这会间接影响性能 - 将图像或文档存储在 mongodb 中会产生大量开销支持数据保真度(数据的多种格式和大小变化,取决于请求者)和数据归档(失效帐户、过期数据等)。以下是促使我们决定在这些场景中选择文件系统而不是 mongodb 的关键原因的简短列表:
【讨论】: