node.js - MongoDB 存储车辆跟踪信息

标签 node.js mongodb gis postgis

我正在构建一个类似于 Uber 的应用程序来跟踪车辆。由于更新频率如此之高(占多个用户),我想知道加快写入 mongodb 集合所涉及的一般做法。

我正在维护一个数据库来存储所有车辆的历史位置信息,但一旦我们投入生产,它的增长势必会非常快。我需要获取最接近某个点的车辆列表。为此,我应该实现一个单独的表(每辆车一行),该表在每次更新后都会更新,还是有更好/更快的方法使用现有表来做到这一点?

最佳答案

两个单独的集合可能是这里的最佳选择。

一个包含当前位置的vehicles 集合。它甚至可以包括 50 个最近的位置条目,添加 $push 和 $slice 以避免数组无限增长。 http://docs.mongodb.org/manual/reference/operator/update/slice/#up._S_slice

locationHistory 集合,其中包括所有以前的车辆移动。您可以通过车辆 ID 和/或日期对其进行索引。

您肯定要避免的一件事是在文档中使用 UNBOUNDED 数组。

{_id: ObjectID, VIN: 字符串, pastLocations: [{...无限数组...}]

当 mongodb 为新的车辆条目分配空间时,它将使用现有车辆大小的平均值来确定要分配多少磁盘空间。车辆条目的大小差异很大(有些比其他的移动得更多,或者更新等)会对性能产生负面影响,并导致更多的页面错误。

这里的关键是您要尽量避免页面错误。将 50 个车辆历史条目(如果它们只是 GPS 坐标)保存为子文档数组并不是很大。保留可能超过 1MB 的一整年的历史值(value)将是一件大事(呵呵),并且在访问不同车辆时始终会导致页面错误。

关于node.js - MongoDB 存储车辆跟踪信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892913/

相关文章:

gis - SHX 文件如何工作?

node.js - 强大的 Express 500 TypeError : Cannot call method 'complete' of undefined

mysql - 在 Heroku 上部署 MySQL 数据库的 Node.js 应用程序不断崩溃

node.js - Mongoose 查找 array.length 大于 0 的所有文档并对数据进行排序

mongodb - 当排序值相同时,Mongo 在 $skip 之后不会维持 $sort 顺序

javascript - 使用 shapefile 作为网络 map ?

javascript - expressjs 中简单函数中的未处理 promise 拒绝警告

javascript - 在 Node.js 中将数据传递到子路由时出现问题

javascript - 从另一台服务器连接到 aws 服务器上的 MongoDB

javascript - 我可以使用相同的样式函数为不同的 GeoJSON 层设置样式吗?