MongoDB中的RAM消耗通过mongoose

时间:2015-07-22 05:45:15

标签: node.js mongodb hadoop mongoose gps

您好我是Mongo DB中的新聚合。我的要求是将发送到服务器的设备GPS数据保存到我的mongoDB集合即GPS数据中。目前我使用Mongoose的GPS数据架构如下

  SerialNo:{
        type:Number,
        required:true,
        index:true
   },

  Loc: {
        type: [Number], // [<longitude>, <latitude>]
        index: '2d',// create the geospatial index
        required:true
  },

  Time:{
         type:Date
 },


  Speed:{
            type:Number,
            default:0.0                
 },      

  Message_length:{
            type:Number 
 },   

  No_Satellites:{
            type:Number
  },

  Course:{
            type:Number
  },  

  Direction:{
            type:String
  },  

  gpsLocked:{
            type:Boolean
  },

  isRealTime:{
             type:Boolean           
  },

  createdAt:{
            type:Date,
            default:Date.now
  }

我发现我的设计可能不太可行,所以在mongoDB网站上搜索了很多,我遇到了这个链接Analyzing Time Series Data Using the Aggregation Framework and Hadoop我发现他们使用的文档结构类似于我的要求,如同如下

data:[
   {speed:NAN,time:NAN},
   {speed:NAN,time:NAN},
   {speed:NAN,time:NAN}
]

我的主要问题是,如果我将我的Loc和时间戳转换为上述格式,当我将500个GPS数据保存到单个文档中时,我是否会节省由于索引而消耗的内存,或者由于索引而导致内存消耗相同将500个不同的文档保存到我的收藏中?

1 个答案:

答案 0 :(得分:0)

如果您要转换为此格式

data:[
   {Loc:NAN,time:NAN},
   {Loc:NAN,time:NAN},
]

如果要使用Loc进行查询,则必须为完整数组编制索引。这将是MultiKey index

整体索引大小可能更高,因为在这种情况下,mongodb必须索引数组中的文档。在前一种情况下,它只需要单独索引Loc

如果您使用SerialNodata构建复合索引,那么您的查询会很有效。

但是,您的更新效率很高,因为您只需要更新数据中的一个条目。

请注意,MongoDB每个文档的限制为16MB。我不确定您希望将多少时间戳放入单个文档中。