mongodb.find() 搜索 100 万个文档的有效方法?



我有一个博客文章服务器,它将包含数百万篇文章,我需要能够获取用户A撰写的所有文章。

什么是最好的模式设计。

1( 将用户和文章文档分开,并让用户 A 文章在所有百万条记录中搜索用户 ID

articles.find({Writer_id: User_A.id})

2( 在用户架构中放置文章 ID 引用。前任:

userSchema = {
name: "name",
age: "age",
articles: [ {type:mongoose.Article_id}, {type:mongoose.Article_id} ]
}

并搜索用户 A 并进行联接以取回文章。

最好保持Writer_id方法并在该属性上创建索引。如果存储引用数组,则需要对find()调用执行$in操作。这将导致您的查询从一个匹配Article_id"跳"到另一个匹配。相反,如果您有一个Writer_id和一个为该属性构建的索引,则用户的所有文章都将存在于索引中的同一顺序"块"中,不需要跳转。结果是读取效率更高的find()操作。

此外,文章数组方法需要频繁更新用户文档,而Writer_id方法只需要插入。插入非常高效,而频繁更新的效率相对较低。最后,Article_id数组可能会(如果不太可能(导致达到 16 MB 的文档大小限制。Writer_id方法没有这种限制。

对于较小的项目来说,差异应该相对可以忽略不计,但是如果您正在寻找可扩展性,那么最好采用Writer_id方法。

相关内容

最新更新