我正在开展一个项目,我有很多车辆(大约2000)和我的DB上的几个多边形(使用mongo)。
我有不同种类的多边形(城市,国家,交叉点......),让我们说4种类型。
每分钟我都会获得车辆的新位置,我需要在客户端的桌子上显示当前的国家,城市和交叉路口(或最后的交叉路口)。我真正想知道的是当车辆进入/退出多边形时。
我知道可以查询当前多边形的特定车辆位置,但我需要获得2000辆车的当前4种多边形类型。
这是每分钟8000(!!!)DB的查询。
做我想做的最好的方法是什么? 谢谢:))
答案 0 :(得分:0)
我认为有更好的解决方案,因为车辆在飞行前不能经常改变他们的城市/国家。我正在考虑下面的架构 -
Country={
id: ObjectId or String,
name: String,
cities: [<array of city subdocuments>],
near_country: [<array of IDs of neighbour countries>],
boundary: location boundary for city <city would be polygon or your choice of geoType>
}
国家/地区内的城市子文档可以包含{id, name, boundary, near_city}.
这样的架构我将选择我的Vehicle架构为{id, location_cordinates, curr_city, curr_country}
现在,当您获得车辆位置数据时,只需从存储的车辆文档中获取curr_city并检查位置是否仍在curr_city内。如果它没有问题,否则你只需要检查该位置是否在near_city中。
如果城市/国家因车辆移动而发生变化,则需要使用最新数据更新车辆。
通过这种方式,您可以最大限度地减少对DB的查询。它需要一些代码,因为一切都不会在DB中完成。
我在这里做了一些假设,比如 -
希望我理解您的问题,解决方案对您有所帮助。如果我得到更多信息,我很乐意进一步提供帮助。