オープンソースのPython / PostGISプロトタイプに最適な設計


9

Apacheを介して配信されるデータ集約型のWebアプリケーションを作成しています。私の質問は、複数のオプションがある場合に、処理を最適に配置する方法についてです。

私は自由にOpenLayers / JQuery / Javascript、PostGIS / Postgresql(pgsql付き)、python / psycopg2、phpを持っています。

データベースには約300万行が含まれており、プロトタイプは現在次のように実行されます。

  • ユーザーがOpenLayersウィンドウのポイントをクリックした

  • 座標はAJAXリクエストとしてサーバー上のPython関数に送信されます

  • 現在、私のアプリケーションはステートレスです

  • Pythonのpsycopg2を使用してpgsqlストアドプロシージャを呼び出し、大量のWKT値(およびデータフィールド)がpythonモジュールに返されます。

  • データフィールドは、PythonでWKTレコードを次のように分類するために使用されます。すべてのWKT値は、5つのグループのいずれかに分類されます。WKT値の約1%が実際に変更されます。

  • WKTの5つのセット/グループは、5つの異なるポリゴンを作成するためにバッファリングされます。現在、データベース内のストアドプロシージャを呼び出してこれを行っています。これは今度はST_BUFFERを使用するだけです。(私はShapelyの使用を検討しましたが、どちらの場合にもGEOSライブラリが使用されるため、パフォーマンス上の利点があるかどうかはわかりません...)

  • 最後に、5つのWKTテキスト値がJSON文字列にラップされ、OpenLayersに返されて5つのレイヤーとしてレンダリングされます。

ボトルネックは、最初の空間検索と最後のバッファリング段階であることがわかりました。

質問は次のとおりだと思います:

物事を整理するより良い方法はありますか?たとえば、すべてのデータ処理をPostgreSQLで(たとえばカーソルを使用して)実行する必要がありますが、これはメンテナンスとパフォーマンスの点で優れているでしょうか?長いWKT文字列をWebクライアントに渡さないようにするには、タイルサーバーを使用する方がよいでしょうか。どのように対処しますか?


バッファーは常に同じ距離ですか、それともユーザー入力に基づいていますか?バッファストアドプロシージャは、Pythonまたは元のテーブルから送信されたデータに対して動作しますか?また、何を達成しようとしているのかを理解しておくと役立ちます。
マシュースネイプ

マシュー-ドライブタイムポリゴンを作成しようとしています。凹型ポリゴンについては知っていますが、主に精度を高めるために、この方法で試してみました。ポリゴンは、MultiLinestrings(つまり、道路)の200mのバッファーです。私は現在、データベース内のすべての道路を事前にバッファリングするという考えを試していますが、それらをマージする必要があります。\ n#
ジョンスティードマン

より一般的には、非常に集中的なジオプロセシングと応答性の高いWebユーザーインターフェイスのバランスをとるアーキテクチャで解決したいと考えています。これは、いくつかのパワーユーザー向けです。
ジョンスティードマン、2012年

回答:


3

バッファリングのボトルネック

ST_Bufferを使用する場合は、num_seg_quarter_circleオプションを小さくして、結果の形状の複雑さを軽減できます。これにより、バッファリング時および後続の操作での処理量が削減されます。

PostGISドキュメントから:

ここに画像の説明を入力してください

一般にPostGISでは、既存の適切にインデックスが作成されたテーブルに対してクエリを実行すると、パフォーマンスが向上します。これにより、複数の最適化(クラスタリングなど)に簡単にアクセスできます。個別に変化する1%を処理し、最後に2つをマージすることを検討してください。


2

アーキテクチャについてまったく考えずに、すべてのWebマッピングアプリケーションについて、事前にできるだけ多くの処理を実行する必要があります。これは、可能であれば、バッファーを事前に計算し、すべてのデータを出力SRSに含める必要があることなどを意味します。明らかに、一部のデータと計算は動的である必要があります。

Pythonを超えて、MapServerとGeoserverを見て計算を行い、出力を生成することをお勧めします。どちらも画像タイルまたはGeoJSON出力を生成できます。どちらのアプリケーションもPostGISをバックエンドとして使用できます。


ありがとう、デイビッド。それは私が自分に向かって漂流してきた良い政策のように思えます。画像タイルについては、GeoServerを調べます。私は過去にこれにpython / mapnikを使用しました。
ジョンスティードマン、

私が見つけたもう1つのことは、ストアドプロシージャを介して行を返すのが非常に(非常に)非常に遅いことです。
ジョンスティードマン、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.