MongoDB传感器存储策略



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

  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模式的官方文档,他们在文档中描述了这种技术,在我看来,这与现实相去甚远,因为在这个例子中,他们假设存储一个传感器数据(在这种情况下是温度(。此外,我不喜欢这种解决方案,因为它对每个传感器样本都重复列(温度(。

是否有任何更好和通用的方法来设计集合以满足此类要求,即使用包含的存储大小并在数据查询方面实现良好性能?示例查询可能如下:

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

根据样本数据,bucket也可以是这样的:

{
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,
]
} 

你说的";数据查询方面的良好性能";?这在很大程度上取决于您想要运行的查询。

最新更新