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

Efficient way for mongodb.find() to search through 1 million document?

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

什么是最好的架构设计。

1) 将User和Articles文档分开,为了得到用户A Articles在所有万条记录中搜索User的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 操作。这将导致您的查询 "jumping" 从一个匹配 Article_id 到另一个匹配。相反,如果您有一个 Writer_id 和为该 属性 构建的索引,则所有用户的文章都将存在于索引中相同的顺序 "block" 中,不需要任何跳跃。结果是读取效率更高的 find() 操作。

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

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