我正在构建一个类似于 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/