0

我正在开发一个使用 MongoDB 以文档格式存储用户记录的 Android 应用程序。我将有几条记录,其中包含有关 GPS 轨迹的信息,例如开始经度和纬度、结束经度和纬度、总时间、最高速度和总距离。

我的问题是关于平均速度。我应该让我的应用程序计算平均速度并将其作为一个字段存储在文档中,还是应该只通过获取时间和距离来计算?

我将有数千条记录,应该根据平均速度进行排序,最合理的似乎也将平均速度存储在文档中。然而,这打破了传统的 SQL Acid 思维,即在数据库之外计算速度。

记录集合的当前文档结构是这样的:

DocumentID (record)
DocumentID (user)
Start lnlt
Finish lnlt
Start time/date/gmt
End time/date/gmt
Total distance
Total time
Top speed
KMZ File
4

2 回答 2

1

我的问题是关于平均速度。我应该让我的应用程序计算平均速度并将其作为一个字段存储在文档中,还是应该只通过获取时间和距离来计算?

正如@Panegea 所说,MongoDB 不依赖于 ACID 属性。它依赖于您的应用程序能够控制其自身的分布式特性,但是据说计算数据库外部的平均速度并没有那么糟糕,并且$set在不使用完整的 ACID 查询时,使用类似的原子运算符将停止奇怪。

您和@Panegea 谈论的是一种将您需要的值预聚合到文档上预定义字段的形式。到目前为止,这不仅是 MongoDB 中的推荐方法,而且在 SQL(如 facebook 墙上帖子上的总份额)中都是推荐的方法,在这种方法中,查询计算字段的聚合对于服务器来说会很烦人并且非常困难,或者只是不明智。

编辑

您可以使用聚合框架来实现这一点:http://docs.mongodb.org/manual/applications/aggregation/也可能想看看那里,但预聚合是迄今为止最快的方法。

于 2012-11-02T11:17:08.153 回答
1

一旦您选择使用面向文档的数据库(例如 Mongo),就不应谈论 ACID 属性。现在,您已经自己回答了这个问题:

“最合理的似乎也将平均速度存储在文档中。”

我们程序员倾向于忽略合理或简单的方法。每当我们找到的解决方案看起来很明显或常识时,我们总是试图质疑自己;-)。

无论如何,我的建议是将其存储为您希望由 DB 而不是应用程序执行的排序。这意味着,如果任何影响平均速度的变量在初始存储后发生变化,那么您也应该记住更新结果字段。

于 2012-11-02T10:29:52.723 回答