【问题标题】:MongoDB performances - how many databases, collections?MongoDB 性能 - 有多少数据库、集合?
【发布时间】:2018-09-13 01:14:00
【问题描述】:

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

从性能方面来说,存储它的最佳方法是什么?具体来说:

  • 性能方面,我使用单个数据库或更多数据库是否重要?我可以创造 1 db 用于每个传感器,或者只对所有内容使用一个巨大的 db。
  • 性能方面,是否按每个分区数据是否重要 传感器或指标?
  • 性能方面,我是否应该为传感器制作一个集合 info 然后收集数据或将两者合并到同一个 收藏?

非常感谢

【问题讨论】:

  • 你能添加一些数据模式的例子吗?我认为最终它将分解为“哪种模式通过需要最少的操作来读取或写入数据来实现最佳灵活性”的问题。

标签: mongodb


【解决方案1】:

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

优点:

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

缺点:

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

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

优点:

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

缺点:

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

就性能而言,按每个传感器或指标对数据进行分区是否重要?

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

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

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

  • 您可能想在此处阅读Williams blog post,了解如何设计此模式。

与往常一样,最好设计一个示例架构并在您的测试环境中测试您的查询。

【讨论】:

    猜你喜欢
    • 2013-05-30
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多