GeoDjango + PostGISを使用して空間ランキングアプリケーションを開発しています。基本的には、クエリバウンディングボックス内のすべてのジオメトリを取得し、作成したカスタム関数を使用して類似度スコアを計算し、一番上のスコアを持つシェイプを返します。GeoDjango:GEOSのジオメトリ操作の高速化
現在、各クエリの往復時間は非常に遅いです。ランニングプロファイラは、ボトルネックがであり、これは私の類似関数内で操作(すなわち、交差、結合、包含など)によって呼び出されることを示しています。 1つのクエリからの例profiler resultがあります。 GEOSGeometry
というスレッドセーフな性質が、ここでパフォーマンスの問題を引き起こしているようです。個々には、40msを要する操作は大したことではないように見えるが、クエリと比較する形状の数が通常は〜1000の形状であるため、40msの操作で最大40秒が加算される。
したがって、私の質問は、どのようにターンアラウンドタイムを最小限に抑えるために関数を最適化できるかです。私の最初のアイデアのいくつかは以下のとおりです。これらのオブジェクトは一時的なものと、他のスレッドに共有されていないよう
-
は、
- 。できるだけ多くの時間が費やされているので、これは理想的なケースです。
threadsafe.py
- トレッドセーフではない別のジオメトリAPIを使用します。
-
オブジェクトレベルではなく、PostGISレベルで空間操作を実行します。これによりコードは醜いものになります。(アップデート:。は、このオプションが機能しないだけではSQLクエリのオーバーヘッドがさらに遅く操作を行います。)
GEOSGeometry
のtheadsafetyチェックを避ける/オフに
あなたの考えは何ですか?
をして長いように、緯度、経度緯度ではなく使用しています。 'GDALGeometry'はthreadsafe.pyに依存することが判明し、結果としてさらに悪化しています。 – ejel