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
方法。
我有一个博客 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
方法。