我正在构建一个类似于Uber的应用程序,用于跟踪车辆。由于更新频率如此之高(占了多个用户),我想知道加快对mongodb集合的写入所涉及的一般实践。
我正在维护一个数据库来存储所有车辆的历史位置信息,但一旦投入生产,它肯定会增长非常快。我需要得到离某个点最近的车辆清单。为此,我应该实现一个单独的表(每辆车一行),该表在每次更新后更新,还是有更好/更快的方法使用现有的表来实现这一点?
发布于 2014-11-13 02:25:51
两个单独的集合可能是这里的最佳选择。
包含当前位置的vehicles集合。它甚至可以包括50个最新的位置条目,加上$push和$slice就不会有无限的数组增长。http://docs.mongodb.org/manual/reference/operator/update/slice/#up._S_slice
一个locationHistory集合,包括所有以前的车辆运动。您可以通过车辆ID和/或日期对其进行索引。
有一件事你一定要避免,那就是在文档中有一个无界数组。
{_id: ObjectID,VIN: String,pastLocations:{...unbounded数组...}}
当mongodb为新的车辆条目分配空间时,它将使用现有车辆大小的平均值来确定要分配多少磁盘空间。车辆条目的大小差异很大(有些比其他条目移动得更多,或者更新,等等)将对性能产生负面影响,并导致更多的页面错误。
这里的关键是你要尽量避免页面错误。将50条车辆历史记录(如果它们仅仅是GPS坐标)保存为一个子文档数组并不是很大。保留一整年可能超过1MB的历史记录将是一件很大的事情(嘿),并且在访问不同的车辆时总是会导致页面错误。
发布于 2014-11-15 23:59:24
在几个月的时间里,我在MongoDB中加载了20 GB+的大量数据(2014年8月部署了最新的稳定版本)。我注意到Windows上的数据库损坏了(使用高性能存储-光纤通道上的iSCI ),所以MongoDB服务只是停止了,无法启动。我仍然可以通过达到高数据负载来重现这个问题。我不推荐将MongoDB用于任何生产部署,我希望您能找到更好的DBMS。
发布于 2015-01-02 18:50:45
由于最新版本的wiredtiger集成,mongodb的性能应该会变得更好。(还不稳定:http://blog.mongodb.org/post/102461818738/announcing-mongodb-2-8-0-rc0-release-candidate-and)
https://stackoverflow.com/questions/26892913
复制相似问题