【问题标题】:MongoDB sensors storage strategyMongoDB传感器存储策略
【发布时间】:2021-03-26 20:12:18
【问题描述】:

我知道这是一个广泛的问题,所以我会尝试为这个问题的领域设置一些界限:

  1. 让我们假设数据可以随时从源到达,并且数据采集之间的时间段不固定。
  2. 使用通用索引(基于时间、基于长度或基于索引)表示数据
  3. 数据负载可能会丢失一些“列”(如果我们将数据块想象成一个表)

这种情况的一个例子如下:

              {                     │  {
                "timestamp": t3,    │    "timestamp": t1,  # t1 < t3
                "temperature": 40,  │    "temperature": 40,
┌───────────┐   "pressure": 1220    │    "color": "ffffff"             ┌───────────┐
│           │ }                     │  }                               │           │
│           │                                                          │           │
│ Source 1  ├─────────────────────────────────────────────────────────►│           │
│           │                                                          │           │
│           │                                                          │           │
└───────────┘                                                          │           │
                                    │                                  │           │
              {                     │  {                               │           │
                "length_meters": l1,│    "length_meters": l2,          │           │
┌───────────┐   "resistivity": 40   │    "resistivity": 40             │           │
│           │ }                     │  }                               │           │
│           │                                                          │  MongoDB  │
│ Source 2  ├─────────────────────────────────────────────────────────►│           │
│           │                                                          │           │
│           │                                                          │           │
└───────────┘                                                          │           │
                                                                       │           │
                                                                       │           │
               {                                                       │           │
                 "index": 1,                                           │           │
┌───────────┐    "description: "lorem"                                 │           │
│           │  }                                                       │           │
│           │                                                          │           │
│ Source 3  ├─────────────────────────────────────────────────────────►│           │
│           │                                                          │           │
│           │                                                          └───────────┘
└───────────┘

我已阅读Bucket pattern 上的官方文档,他们在其中描述了这种技术,在我看来,这与现实相去甚远,因为在示例中他们假设存储单个传感器数据(在这种情况下为温度) .此外,我不喜欢该解决方案,因为它为每个传感器样本重复列(温度)。

有没有更好和通用的方法来设计集合来解决使用包含存储大小并可以在数据查询方面实现良好性能的要求? 示例查询可能如下:

  • 在 tx 和 ty 之间返回压力和温度。
  • 返回 tx 和 ty 之间的最高温度。
  • 返回 lx 和 ly 之间的电阻率最小值。

【问题讨论】:

  • 请提供一些示例数据。 Mongodb 是面向文档的,因此每个文档都会包含字段名称。
  • “数据使用通用索引表示”是什么意思?
  • 收到的每个数据点都有一个索引(例如时间戳),它不需要大于收到的前一个(单调递增的索引)

标签: database mongodb database-performance sensors


【解决方案1】:

根据样本数据,桶也可能是这样的:

{
    sensor_id: 12345,
    start_date: ISODate("2019-01-31T10:00:00.000Z"),
    end_date: ISODate("2019-01-31T10:59:59.000Z"),
    timestamp: [
       ISODate("2019-01-31T10:00:00.000Z"),
       ISODate("2019-01-31T10:01:00.000Z"),
       ISODate("2019-01-31T10:42:00.000Z")
    ],
    temperature: [
       40,
       40,
       42,
    ]
} 

您所说的“在数据查询方面表现良好”是什么意思?这在很大程度上取决于您喜欢运行的查询。

【讨论】:

  • 感谢您的回答。因此,在您的示例中,您将拥有一个用于单个传感器 ID 的文档。一个示例查询可能是:给我这两个索引之间的温度、压力和体积(可能每个都来自三个不同的传感器)。或者给我两个索引之间所有传感器的最大值。我正在更新问题以澄清用例!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 2011-09-10
  • 2016-03-04
相关资源
最近更新 更多