我正在构建一个类似优步的应用程序,用于跟踪车辆。由于更新频率非常高(占几个用户),我想知道为mongodb集合更快地写入所涉及的一般做法。
我正在维护一个数据库来存储所有车辆的历史位置信息,但是一旦我们投入生产,它必然会快速增长。我需要得到最接近某一点的车辆清单。为此,我应该实现一个单独的表(每个车辆有一行),每次更新后都会更新,或者使用现有表更好/更快地执行此操作?
答案 0 :(得分:2)
这里可能是两个单独的收藏品。
包含当前位置的vehicles
集合。它甚至可以包括50个最近的位置条目,加上$ push和$ slice以不具有无限的阵列增长。 http://docs.mongodb.org/manual/reference/operator/update/slice/#up._S_slice
包含所有先前车辆动作的locationHistory
集合。您可以按车辆ID和/或日期对此进行索引。
您确定要避免的一件事是在文档中包含一个UNBOUNDED数组。
{_ id:ObjectID,VIN:String, pastLocations:[{... unbounded array ...}] }
当mongodb为新车辆入口分配空间时,它将使用现有车辆大小的平均值来确定要分配的磁盘空间量。车辆入口大小差异很大(有些车辆比其他车型更多,或者更新等)会对性能产生负面影响,并导致更多页面故障。
这里的关键是你试图避免页面错误。保留50个车辆历史记录(如果它们只是GPS坐标)作为子文档阵列并不是非常庞大。保持一年的历史可能超过1MB将是一个大问题(heh)并且在访问不同的车辆时总是导致页面错误。
答案 1 :(得分:1)
我在几个月内在MongoDB中进行了20 GB +的大量数据存储加载(2014年8月部署了最新的稳定版本)。我注意到数据库在Windows操作系统上已损坏(使用高性能存储 - 通过光纤通道的iSCI),因此MongoDB服务刚刚停止,无法启动。我仍然可以通过达到高数据负载来重现这个问题。我不建议MongoDB进行任何生产部署,我希望你能找到更好的DBMS。
答案 2 :(得分:1)
由于最新版本的有线网络集成,mongodb的性能应该会提高。 (还不稳定:http://blog.mongodb.org/post/102461818738/announcing-mongodb-2-8-0-rc0-release-candidate-and)