我正在构建一个类似于 Uber 的应用程序来跟踪车辆。由于更新频率如此之高(占几个用户),我想知道使写入更快到mongodb集合所涉及的一般做法。
我正在维护一个数据库来存储所有车辆的历史位置信息,但是一旦我们投入生产,它肯定会增长得非常快。我需要获取最接近某个点的车辆列表。为此,我应该实现一个单独的表(每辆车一行),每次更新后都会更新,还是有更好/更快的方法使用现有表来做到这一点?
最佳答案
两个单独的集合可能是这里的最佳选择。
包含当前位置的 vehicles
集合。它甚至可以包括 50 个最近的位置条目,添加 $push 和 $slice 以防止数组无限增长。 http://docs.mongodb.org/manual/reference/operator/update/slice/#up._S_slicelocationHistory
集合,其中包括所有以前的车辆运动。您可以通过车辆 ID 和/或日期对其进行索引。
您肯定要避免的一件事是在文档中有一个 UNBOUNDED 数组。
{_id:ObjectID,VIN:字符串,
过去位置:[{...无界数组...}]
}
当 mongodb 为新的车辆条目分配空间时,它将使用现有车辆大小的平均值来确定要分配多少磁盘空间。车辆条目的大小差异很大(有些比其他的移动得更多,或者更新等等)会对性能产生负面影响,并导致更多的页面错误。
这里的关键是您正在尝试避免页面错误。将 50 条车辆历史记录(如果它们只是 GPS 坐标)作为子文档数组保存并不是很大。保持一整年的历史值(value)可能超过 1MB 将是一件大事(呵呵),并且在访问不同的车辆时总是会导致页面错误。
关于node.js - MongoDB 存储车辆跟踪信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26892913/