我知道这是一个广泛的问题,所以我会尝试为这个问题的领域设置一些边界:
- 让我们假设数据可以在任何时间从源到达,并且数据采集之间的周期不是固定的
- 数据使用通用索引(基于时间、基于长度或基于索引(表示
- 数据有效载荷可能会错过一些"有效载荷";列";(如果我们把数据块想象成一个表(
这种情况的示例如下:
{ │ {
"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,
]
}
你说的";数据查询方面的良好性能";?这在很大程度上取决于您想要运行的查询。