MongoDB性能 - 有多少数据库,集合?

时间:2018-04-03 16:13:40

标签: mongodb

我希望使用MongoDB来存储时间序列数据。为了便于讨论,我想要部署有限数量的传感器(例如10-100-1000个传感器)。每个传感器都有十几个“度量”(例如温度,湿度等),每分钟收集一次,然后存储。 有一个前端,然后显示每个传感器的图表或按选定的时间间隔聚合。

存储此功能的最佳方法是什么?具体做法是:

  • 性能方面,如果我使用单个数据库或更多数据库是否重要?我可以创造1 每个传感器的数据库或只是使用一个巨大的数据库的一切。
  • 性能方面,如果我按每个分区数据,这是否重要 传感器还是指标?
  • 性能方面,我应该为传感器制作一个集合 信息然后收集数据或只是将两者合并在一起 集合?

非常感谢

1 个答案:

答案 0 :(得分:2)

方法1(A): 为所有内容创建单个数据库。 (单一收藏)

优点:

  • 减少维护:备份,创建数据库用户,恢复等

<强>缺点:

  • 您可能会看到database level lock用于在大型数据库上创建索引
  • 要对特定传感器数据执行操作,您需要添加其他索引以仅提取特定于传感器的集合
  • 您在一个集合上绑定create not more than 64 indexes。虽然听起来很糟糕的索引策略。

方法1(B): 为所有内容创建单个数据库。 (每个传感器有1​​个集合)

优点:

  • 减少维护:备份,创建数据库用户,恢复等
  • 最大限度地减少创建索引以识别整个整体集合中的传感器特定数据的需求
  • 每个特定于传感器的查询都只针对特定集合。与单个大型集合相比,不需要将大型工作集拉入内存。
  • 相对较小的集合构建索引比单个数据库中的大集合
  • 更可行

<强>缺点:

  • 您最终可能会创建太多索引。 (所有集合的索引总数之和)。
  • 大量索引需要更多维护。
  • WiredTiger为集合创建1个文件,为内部创建1个索引。如果您的用例随着大量传感器的增长而增长。您最终可能会使用64K打开文件限制。

在性能方面,如果我按每个传感器或指标对数据进行分区是否重要?

  • 这取决于您的分析应用所期望的访问模式。

在性能方面,我应该只为传感器信息创建一个集合,然后为数据集合创建一个集合,还是仅将两者合并到同一个集合中?

  • 可能需要为传感器元数据和传感器数据创建集合。它将最大限度地减少每个收集的传感器数据中的重复传感器元数据。

  • 您可以在此处阅读Williams blog post来设计此模式。

总是更好地设计一个示例模式并在测试环境中测试您的查询。