如何解决MongoDB 传感器存储策略
我知道这是一个广泛的问题,所以我会尝试为这个问题的领域设置一些界限:
- 假设数据可以随时从源到达,并且数据获取之间的时间段不固定。
- 使用通用索引(基于时间、基于长度或基于索引)表示数据
- 数据负载可能会遗漏一些“列”(如果我们将数据块想象成一个表)
此场景的示例如下:
{ │ {
"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 之间电阻率的最小值。
解决方法
根据样本数据,桶也可能是这样的:
{
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,]
}
“在数据查询方面的良好性能”是什么意思?这在很大程度上取决于您喜欢运行的查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。