MongoDB 中的 RAM 消耗(通过 mongoose)

RAM Consumption in MongoDB via mongoose

您好,我是 Mongo 数据库中聚合的新手。我的要求是将发送到服务器的设备 GPS 数据保存到我的 mongoDB collection 即 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 网站上进行了大量搜索后,我发现了这个 link 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 个不同的文档保存到我的 collection?

如果您要转换成这种格式

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

然后你必须索引完整的数组,如果你想用Loc查询。这将是 MultiKey index

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

如果您使用 SerialNodata.

构建复合索引,您的查询会很高效

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

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