node.js - 通过mongoose在MongoDB中使用RAM

标签 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个不同而编制索引所导致的内存消耗是否相同?文件放入我的收藏夹?

最佳答案

如果您要转换成这种格式

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

然后,如果要使用Loc进行查询,则必须索引完整的数组。这将是一个MultiKey index

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

如果您使用SerialNodata构建复合索引,则查询将非常有效。

但是,您的更新将非常有效,因为您只需要更新数据中的一项即可。

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

关于node.js - 通过mongoose在MongoDB中使用RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31554767/

相关文章:

node.js - 如何 $match MongoDB Mongoose 查询的多个值

mongodb - 如何使用mongoengine在EmbeddedDocument中定义objectid?

oracle - 如何将大表从 oracle db 到 hdfs?

javascript - 带有 $near $ 或其他字段的 Mongoose 查询

javascript - 使用搜索索引过滤

node.js - Redis - 在具有 promise 的事务中插入数组中的值( Bluebird )

javascript - 允许任何具有 sails 策略的人访问 API

ruby-on-rails - 如何规范公司名称

hadoop - 如何通过从 sqlserver 捕获表来迭代 sqoop 作业?

maven - 为 hadoop 安装 snappy 失败