我正在尝试获取一些有关如何正确构建 MongoDB 数据库的建议。我在 Mongo Atlas M10 上,我的数据结构如下所示:
{
sensorId: "12345",
epoch: Date,
datum_1: "string",
datum_2: "string",
...
}
假设我有 50,000 多个传感器,而且数量还在不断增加,但更新率仅为每天两次。我看过很多关注物联网的帖子,但它们主要关注相对少量的传感器和高速率的数据输入。 (或其他例子,如金融/股票;高利率、低数量的公司)
最后,我想在 GUI 中显示特定传感器的历史数据。
需要补充的一件事是,我真的不想在
sensorId
和 epoch
中出现重叠的重复条目。
任何建议将不胜感激!对我来说,由于传感器的数量和“缓慢”的更新节奏,几乎似乎我不应该将它们放在一起,而只是有一个扁平的结构......我什至不知道此时真正要搜索什么。
这是我目前所知道的:
Timeseries MongoDB 数据库是不可能的,因为我只能通过元数据来
$match
条目,而不是时间戳本身(例如,查找具有相同 ID + 时间戳的条目是否存在;如果不存在,则添加);无论如何,这似乎是一个没有实际意义的问题,因为我无法使用 Timeseries DB 来查找现有条目并插入它们(更新插入)。
我不应该有一个基于“传感器”的文档在数组中附加新的数据点,因为“文档”在 MongoDB 上有 16MB 的限制;我相信也有数组长度限制。我应该将每个数据点存储/存储为文档。
一些可能有帮助的见解。 与 MongoDB 中的常规集合相比,使用时间序列集合的优点之一是可以实现更好的数据压缩,从而降低磁盘使用率。为了实现这一目标,您希望将尽可能多的测量数据装入一个桶中。
hours
,将是最好的。也许甚至可以通过一些服务器参数定制。metaField
(docs),而不是单独的集合,将传感器切片到单独的桶中。至于
$match
不允许出现在时间序列上......你有例子或引文吗?从文档here和here(包含示例)来看,我没有看到您在该领域提到的局限性的证据。
这些文档页面应该有所帮助: