1

私は、データストアデータに対して効率的なジオスペースクエリを実行する必要のあるpythonでappEngineアプリケーションを作成しています。ユースケースの例は、現在のユーザーの半径10マイル以内の最初の20の投稿を見つける必要があります。私のオプションにいくつかの研究を行ったので、私は現在、どのようなこの種の機能を実現するための2つの最善のアプローチのように思えることだろうことを見出した:geohashingとデータストアを使用したジオスペースクエリのSearchAPI

  • インデックスは、文書を削除/作成
  • PythonのGeoModelライブラリを使用してgeopointデータをgeoHashed Googleの新しいSearchAPI

を使用して構造化データのインデックスgeohashesと直接にクエリを実行するが、しかし、低コストおよびすべての地理空間クエリのドキュメントを作成および削除することよりもはるかに高速になるとハイレベルの視点かららしいです私はまた、そのgeohashing cを読んだ赤道に沿ってまたはハッシュアルゴリズムによって生成された「フォールトライン」に沿って非常に不正確である。次のように私は詳細に最高の方法を対比非常にいくつかの記事を見てきた、と私はスタックがこの会話を持っているには良い場所だと思いますので、私の質問は以下のとおりです。

  • は誰でも似たような機能を実装し、との肯定的な経験を持っていましたどちらの方法?
  • 安価な代替方法はどれですか?
  • どちらが早い選択肢ですか?
  • もう1つ重要な方法はありますか?

ありがとうございます。

答えて

1

Geohashingは完全に不正確である必要はありません。実装の詳細はすべてです。私が意味することは、境界ケースを処理するために近隣のジオセルをチェックし、赤道の反対側の隣人が含まれていることを確認することです。

あなたが提案した半径内の他のエンティティをユースケースで見つけている場合は、Search APIを使用することをおすすめします。彼らは、その使用に合わせて調整された距離関数を持っています。

検索APIクエリはDatastoreクエリよりも高価ですが、計算時間内に体重を計ってインスタンス内でこれらの計算を行う場合は、実際に距離が実際よりも小さいかどうかを確認するために各ジオハッシュのすべてのエンティティを繰り返しますradiusを指定すると、Search APIが勝者となります。そして、実装時間を忘れないでください。

+0

標準のGoogleアプリケーションエンジン環境にある場合、Search APIでインスタンスを使用しないと言っていますか? – Micro

+1

検索APIは、Googleプラットフォームが提供するサービスです。インスタンス内では実行されません。コールを送信し、サービスからの応答を待機します。 Search APIにアクセスするにはインスタンスが実行されている必要がありますが、検索自体はインスタンスでは実行されません。ただし、応答を待っている間にインスタンス内のスレッドを使い切ります。インスタンスで計算を行う場合は、インスタンスに複数のスレッドおよび/またはより高価なCPUを使用することができます。データを渡すだけの場合は、代わりにはるかに安価な500MHzのインスタンスを使用できます。 – marcus

-1

あなたはこのpostを見ることができます、それは別の偉大な選択肢かもしれません。

私はこれを私のアプリ内で使っています。私のアプリのユーザーは、指定された半径で見つけることができます。

関連する問題