2012-03-05 1 views
1

小さなWebアプリケーションで作業していますが、ユーザーの詳細が現在の場所の緯度と経度と共に格納されているユーザーテーブルがあります。距離を計算する - オンザフライで、またはデータがデータベースに入力されるとすぐに?

新しいユーザーが登録すると、彼は現在の場所からすべてのユーザーの距離が表示されます。

私はhaversineの式を使用しています。

私の問題は、これをどのように進めるのですか? どうやってこれを行うことができますか?または、ユーザーが登録して保存するときに、ユーザーの距離をすべて計算する必要がありますか?

並べ替えに対応する必要があります。つまり、最短距離です。

答えて

1

ユーザーの数が非常に多い(または制限されない)場合、問題が発生する可能性があります。

これを計算するには、かなりの記憶容量が必要になることがあります。しかし、オンデマンドで計算すると、大量のサーバーCPU時間が必要になることがあります。

いくつかの注意事項:

  1. 地理ソートを行うためにMySQLを使用してください。 http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

  2. 他のユーザーの小さなサブセットの距離を計算することを検討してください。

  3. javascriptを使用してクライアントマシン上で動的に距離を計算する利点を考慮してください。

+0

私はいくつかのチュートリアルや私が作業できることを教えてくれますか? – Parvesh

+0

他の人はそれに反するかもしれませんが、jQueryはおそらくjavascriptを簡単にするための基本的な標準です。 http://docs.jquery.com/チュートリアルjQueryを使用して、ページを非同期呼び出しして他のユーザーのコーポレートを取得し、結果からの距離を計算して表示します。すべての処理はブラウザで行われます。 – Synesso

0

他の回答と同様に、ジオデータベースを使用する必要があります。

あなたはそれを自分で実装する場合、これは、これらのデータベースは内部的に行う方法です。

デバイド大rectanglarグリッド(たとえば、10キロのx 10キログリッド)にマップを。ユーザーごとに、グリッドを表示する列を追加します。すべてのユーザーを検索するのではなく、特定のグリッドとそれに隣接する8つのグリッドを検索することができます。

1

すべてのユーザー登録時のユーザーは、大量のデータを非常に迅速に保存することができます.100人のユーザーには5,000個のデータが格納されます。 1000人のユーザーの場合、〜500,000(それぞれに関連する計算が必要) - ユーザーが場所を変更した場合、そのデータはすぐに冗長になり、すべてのユーザーの再計算が必要になります。繰り返しますが、多くのユーザーにとって大きな問題です。

おそらく、オンザフライでこれをやったほうが良いでしょう - MySQLは、ロケーションベースの検索を最適化するために利用することができ、空間の拡張機能を提供しています(http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.htmlを参照)

非常に簡単な例これらの拡張機能を使用することができますhttp://maisonbisson.com/blog/post/12147/working-with-spatial-data-in-mysql/にあります。より複雑な例では、半径r内のすべての点を返すことができます。

他の人がJavascriptを使用してクライアント側でこれを計算すると述べました。確かに可能性はありますが、10,000人という多数のユーザーがいる場合は、最初にすべてのデータをクライアントに転送する必要があります(HTTPフェッチの遅延が発生します)。計算を実行するCPU(誰かが古いスマートフォンであなたのサイトを見ている場合はどうなりますか?)プロセスが実行されている間、ブラウザが数秒間フリーズする可能性があります。

関連する問題