【问题标题】:Mongo DB ScalabilityMongodb 可扩展性
【发布时间】:2019-11-11 15:32:16
【问题描述】:

我的带有 Mongoose 和 MongoDB 的 Node JS 应用程序每天收到大约 15,000-45,000 个帖子。

这些帖子中的每一个都是 Mongo DB 中的单独文档。

在数据结构方面,哪个示例更适合应用程序的寿命和可扩展性:

  1. 将所有帖子存储在一个名为“帖子”的集合下,为每个帖子文档提供一个{日期:今天的日期,帖子内容:内容}

  1. 为每天的帖子创建一个新集合。例如:Posts.6-29-2019 并将当天的所有帖子存储在该集合中。

从长远来看,什么会更昂贵:

在一个集合中的所有帖子一年的数据之后搜索基本上数百万个帖子?

或者

每天存储数十万条帖子?

【问题讨论】:

  • "数十万个集合" - 不知道现在如何,但 mongodb 曾经有有限的命名空间大小。意思是你可以用完集合
  • @SergioTulentsev WiredTiger 存储引擎对您可以拥有的集合数量没有设定限制。但是,有一个实际(硬件)限制,因为每个集合和索引都是一个文件。您可能会因打开的文件过多而使硬件不堪重负。示例:SERVER-25025

标签: node.js mongodb mongoose mongodb-query mongoose-schema


【解决方案1】:

在一个集合中的所有帖子一年的数据之后搜索基本上数百万个帖子?

全扫描不好,但好消息是:在大多数情况下,您可以避免它们。只需添加适当的索引来支持您的查询。

【讨论】:

  • 您是在建议将所有数以百万计的帖子放在一个集合中,而不是按日期放在多个集合中?
  • @user10181542:完全正确。
  • 你建议如何索引它们? var blogSchema = new Schema({ date: Date, content: [{ body: String }], });
  • 我还必须指出,我需要能够非常快速地检索一天内发了多少帖子或今天到目前为止发了多少帖子。
  • @user10181542:这完全是一个单独的讨论(在给定情况下什么是适当的索引)。但是为了解决查询性能模式更改和/或索引,通常会使用。不手动对数据进行分区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2016-12-14
  • 2011-11-30
  • 2018-10-16
  • 2011-07-07
  • 2016-11-20
  • 2010-12-03
相关资源
最近更新 更多