MongoDB性能 - 多少个数据库和集合最佳?

3
我希望使用MongoDB存储时间序列数据。为了讨论方便,假设我部署了有限数量的传感器(例如10-100-1000个传感器)。每个传感器都有数十个“指标”(例如温度、湿度等),每分钟收集并存储一次。然后有一个前端显示每个传感器或所选时间间隔的聚合图表。
就性能而言,最佳方法是什么?具体来说:
  • 就性能而言,如果使用单个数据库还是多个数据库会有影响?我可以为每个传感器创建一个数据库,也可以使用一个庞大的数据库。
  • 就性能而言,如果按传感器或按指标对数据进行分区,是否会有影响?
  • 就性能而言,是否应该为传感器信息创建一个集合,然后为数据创建集合,还是将两者合并在同一个集合中?
谢谢。

你能添加一些数据模式的示例吗?我认为最终问题会归结为“哪种模式在读取或写入数据时需要最少的操作,从而实现最佳的灵活性”。 - Jankapunkt
1个回答

4

方法1(A): 创建一个包含单个集合的全部内容的数据库。

优点:

  • 维护成本较低:备份、创建数据库用户、还原等操作。

缺点:

  • 在大型数据库上创建索引时,可能会看到数据库级锁定
  • 要对特定的传感器数据执行操作,需要添加额外的索引来获取仅传感器特定集合。
  • 在单个集合上不得创建超过64个索引。虽然听起来是糟糕的索引策略。

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

优点:

  • 维护成本较低:备份、创建数据库用户、还原等操作。
  • 最小化创建索引以从整个单体集合中识别特定传感器数据的需求。
  • 每个特定于传感器的查询仅针对特定的集合。与单个大型集合相比,不需要将大工作集拉入内存。
  • 在相对较小的集合上建立索引比在单个DB的大型集合上更可行

缺点:

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

性能方面,按传感器或指标分区数据是否重要?

  • 这取决于预期的分析应用程序的访问模式。

从性能角度考虑,是应该为传感器信息创建一个集合,然后再为数据创建集合,还是将两者合并到同一个集合中呢?

创建一个传感器元数据和传感器数据的集合可能是必要的。这将减少在每个收集的传感器数据中重复传感器元数据的情况。
您也可以阅读Williams博客文章,了解如何设计此模式。
像往常一样,最好设计一个样本架构,并在测试环境中测试您的查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接