0

MongoDB を使用してユーザー レコードをドキュメント形式で保存する Android アプリを開発しています。開始の経度と緯度、終了の経度と緯度、合計時間、最高速度、合計距離など、GPS トラックに関する情報を含むいくつかのレコードがあります。

私の質問は、平均速度に関するものです。アプリに平均速度を計算させ、それをドキュメントのフィールドとして保存する必要がありますか?それとも、時間と距離を取得するだけでこれを計算する必要がありますか?

平均速度に基づいてソートする必要がある何千ものレコードがあり、最も合理的なのはドキュメントにも平均速度を保存するようです。ただし、これは、速度が DB の外部で計算される従来の 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 プロパティに依存しません。アプリ自体が分散型の性質を制御できるかどうかに依存しますが、DB の外部で平均速度を計算することはそれほど悪いことではなく、$set完全な ACID クエリを使用しない場合のようなアトミック オペレーターを使用すると、奇妙さが停止すると言われています。

あなたと@Panegeaが話しているのは、必要な値をドキュメントの事前定義されたフィールドに事前に集約する形式です。これは、MongoDB だけでなく、計算されたフィールドの集計のクエリが面倒で、サーバーにとって非常に困難であるか、賢明ではない SQL (Facebook ウォール投稿の合計共有数など) でも推奨される方法です。

編集

集計フレームワークでこれを実現できます: http://docs.mongodb.org/manual/applications/aggregation/同様に、そこを見てみたいかもしれませんが、事前集計は断然最速の方法です。

于 2012-11-02T11:17:08.153 に答える
1

Mongo などのドキュメント指向 DB を使用することを選択した場合は、ACID プロパティについて話す必要はありません。さて、あなたは自分で質問に答えました:

「最も合理的な方法は、ドキュメントにも平均速度を保存することです。」

私たちプログラマーは、合理的または単純なアプローチを無視する傾向があります。見つけた解決策が明白または常識に見えるときはいつでも、私たちは常に自分自身に疑問を投げかけようとします;-)。

とにかく、アプリケーションではなくDBでソートを実行したいので、それを保存することをお勧めします。これは、平均速度に影響を与える変数のいずれかが初期保存後に変更された場合、結果フィールドも更新することを忘れないでください。

于 2012-11-02T10:29:52.723 に答える