MongoDB数据结构

时间:2015-09-23 04:19:32

标签: node.js mongodb

我有点使用MongoDB的菜鸟,所以在获取存储某些数据的最佳解决方案/格式/结构方面会有所帮助。

基本上,将存储的数据将每秒更新一次,其中包含某个抄表的名称,值和时间戳。

例如,一种可能性是水箱中的水位和温度。坦克将有一个名称,然后每秒读取和存储水平和温度。总的来说,将有100个项目(即坦克),每个项目都有数百万个带时间戳的值。

从目前为止我所学到的(如果我错了,请纠正我),有一些选项可以用来构建数据:

  1. 略有RDMS方法:
  2. 这将包含两个集合,项目和值

    Items : { 
        _id : "id", 
        name : "name"
    } 
    
    Values : { 
        _id : "id", 
        item_id : "item_id", 
        name : "name",           // temp or level etc
        value : "value", 
        timestamp : "timestamp"
    }
    
    1. 更多文档db denormalized method:
    2. 此方法涉及一个项目集合,每个项目都带有一个带时间戳值的数组

      Items : { 
          _id : "id", 
          name : "name"
          values : [{ 
              name : "name",           // temp or level etc
              value : "value", 
              timestamp : "timestamp"
          }]
      }
      
      1. 每个项目的集合
      2. 将所有值保存在以该项目命名的集合中。

        ItemName : { 
            _id : "id", 
            name : "name",           // temp or level etc
            value : "value", 
            timestamp : "timestamp"
        }
        

        大多数读取查询将检索项目(即坦克)的指定时间段的时间戳值并显示在图表中。对于这一点,第一个选项对我来说更有意义,因为我不想在查询特定项目时检索数百万个值。 甚至可以查询选项2的特定时间戳之间的值吗?

        我还需要查询项目列表,所以可能是第一个和第三个选项与所有项目的集合的组合,然后是一些集合来存储每个项目的值?

        非常感谢您对此的任何反馈。

1 个答案:

答案 0 :(得分:0)

如果您没有修改ObjectId,请不要使用时间戳。 因为ObjectId本身有时间戳。 因此,你将节省大量的内存。

MongoDB Id Documentation

如果您不需要以前的数据,那么您可以使用MongoDB中的更新查询来每秒更新字段而不是存储。

如果您希望每次都存储更新的数据,而不是更新以平面结构存储它。

{ "_id" : ObjectId("XXXXXX"),
  "name" : "ItemName",
  "value" : "ValueOfItem"
  "created_at" : "timestamp"
}

编辑1:根据评论添加时间戳