【问题标题】:Efficient way for mongodb.find() to search through 1 million document?mongodb.find() 搜索 100 万个文档的有效方法?
【发布时间】:2019-12-28 04:11:08
【问题描述】:

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

什么是最好的架构设计。

1) 将User和Articles文档分开,让用户A Articles在所有百万条记录中搜索用户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 并加入以获取文章。

【问题讨论】:

    标签: mongodb performance mongoose database-design mongoose-schema


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2013-07-06
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 2013-08-07
      • 2015-04-02
      • 1970-01-01
      • 2013-09-30
      相关资源
      最近更新 更多