您好我是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个不同的文档保存到我的收藏中?
答案 0 :(得分:0)
如果您要转换为此格式
data:[
{Loc:NAN,time:NAN},
{Loc:NAN,time:NAN},
]
如果要使用Loc
进行查询,则必须为完整数组编制索引。这将是MultiKey index
整体索引大小可能更高,因为在这种情况下,mongodb必须索引数组中的文档。在前一种情况下,它只需要单独索引Loc
。
如果您使用SerialNo
和data
构建复合索引,那么您的查询会很有效。
但是,您的更新效率很高,因为您只需要更新数据中的一个条目。
请注意,MongoDB每个文档的限制为16MB。我不确定您希望将多少时间戳放入单个文档中。