我有点使用MongoDB的菜鸟,所以在获取存储某些数据的最佳解决方案/格式/结构方面会有所帮助。
基本上,将存储的数据将每秒更新一次,其中包含某个抄表的名称,值和时间戳。
例如,一种可能性是水箱中的水位和温度。坦克将有一个名称,然后每秒读取和存储水平和温度。总的来说,将有100个项目(即坦克),每个项目都有数百万个带时间戳的值。
从目前为止我所学到的(如果我错了,请纠正我),有一些选项可以用来构建数据:
这将包含两个集合,项目和值
Items : {
_id : "id",
name : "name"
}
Values : {
_id : "id",
item_id : "item_id",
name : "name", // temp or level etc
value : "value",
timestamp : "timestamp"
}
此方法涉及一个项目集合,每个项目都带有一个带时间戳值的数组
Items : {
_id : "id",
name : "name"
values : [{
name : "name", // temp or level etc
value : "value",
timestamp : "timestamp"
}]
}
将所有值保存在以该项目命名的集合中。
ItemName : {
_id : "id",
name : "name", // temp or level etc
value : "value",
timestamp : "timestamp"
}
大多数读取查询将检索项目(即坦克)的指定时间段的时间戳值并显示在图表中。对于这一点,第一个选项对我来说更有意义,因为我不想在查询特定项目时检索数百万个值。 甚至可以查询选项2的特定时间戳之间的值吗?
我还需要查询项目列表,所以可能是第一个和第三个选项与所有项目的集合的组合,然后是一些集合来存储每个项目的值?
非常感谢您对此的任何反馈。
答案 0 :(得分:0)
如果您没有修改ObjectId,请不要使用时间戳。 因为ObjectId本身有时间戳。 因此,你将节省大量的内存。
如果您不需要以前的数据,那么您可以使用MongoDB中的更新查询来每秒更新字段而不是存储。
如果您希望每次都存储更新的数据,而不是更新以平面结构存储它。
{ "_id" : ObjectId("XXXXXX"),
"name" : "ItemName",
"value" : "ValueOfItem"
"created_at" : "timestamp"
}
编辑1:根据评论添加时间戳