mongodb.find()搜索一百万个文档的有效方法?
我有一个博客帖子服务器,将包含数百万篇文章,我需要能够得到用户a写的所有文章 最好的模式设计是什么 1) 分离用户和文章文档,并让用户在所有百万记录中搜索用户id的文章mongodb.find()搜索一百万个文档的有效方法?,mongodb,performance,mongoose,database-design,mongoose-schema,Mongodb,Performance,Mongoose,Database Design,Mongoose Schema,我有一个博客帖子服务器,将包含数百万篇文章,我需要能够得到用户a写的所有文章 最好的模式设计是什么 1) 分离用户和文章文档,并让用户在所有百万记录中搜索用户id的文章 articles.find({Writer\u id:User\u A.id}) 2) 在用户架构中放置项目id引用。例: userSchema = { name: "name", age: "age", articles: [ {type:mongoose.Article_id}, {type:mon
articles.find({Writer\u id:User\u A.id})
2) 在用户架构中放置项目id引用。例:
userSchema = {
name: "name",
age: "age",
articles: [ {type:mongoose.Article_id}, {type:mongoose.Article_id} ]
}
然后搜索用户A并加入以取回文章。最好保留
Writer\u id
方法并在该属性上创建索引。如果存储引用数组,则需要对find()
调用执行$in
操作。这将导致您的查询从一个匹配的Article\u id
跳到另一个。如果您有一个Writer\u id
和为该属性构建的索引,则所有用户的文章都将存在于索引中相同的顺序“块”中,无需任何跳跃。结果是读效率大大提高了find()
操作
此外,文章数组方法需要频繁更新用户文档,而Writer\u id
方法只需要插入。插入的效率令人难以置信,而频繁更新的效率相对较低。最后,一个Article\u id
s数组可能(如果不太可能)导致达到16 MB文档大小限制。Writer\u id
方法没有这样的限制
对于一个较小的项目,这种差异应该相对可以忽略不计,但是如果您希望实现可伸缩性,那么最好使用
Writer\u id
方法。最好保留Writer\u id
方法并在该属性上创建索引。如果存储引用数组,则需要对find()
调用执行$in
操作。这将导致您的查询从一个匹配的Article\u id
跳到另一个。如果您有一个Writer\u id
和为该属性构建的索引,则所有用户的文章都将存在于索引中相同的顺序“块”中,无需任何跳跃。结果是读效率大大提高了find()
操作
此外,文章数组方法需要频繁更新用户文档,而Writer\u id
方法只需要插入。插入的效率令人难以置信,而频繁更新的效率相对较低。最后,一个Article\u id
s数组可能(如果不太可能)导致达到16 MB文档大小限制。Writer\u id
方法没有这样的限制
对于一个较小的项目来说,这种差异应该相对可以忽略不计,但是如果您希望获得可伸缩性,那么最好使用Writer\u id
方法