2

分析してアプリケーションで使用する必要のある大量の空間データがあります。元のデータはWKT形式で表され、データをアップロードするためにINSERTSQLステートメントにラップしています。

INSERT INTO sp_table ( ID_Info, "shape") VALUES ('California', , ST_GeomFromText('POLYGON((49153 4168, 49154 4168, 49155 4168, 49155 4167, 49153 4168))'));

ただし、このアプローチには時間がかかりすぎ、データが大きくなります(1,000万行)。それで、大量の空間データをアップロードする他の方法はありますか?

スピードアップのハックとトリックは大歓迎です。

4

2 に答える 2

1

ここでは、いくつかの一般的なパフォーマンスのヒントを見つけることができます。おそらく、fsyncプロパティが有効になっていて、すべてのINSERTコマンドが物理的にハードディスクに書き込まれるように強制されているため、非常に時間がかかります。

fsyncをオフにすることはお勧めしません(特に実稼働環境では)。これにより、予期しないOSのクラッシュ後にデータを安全に回復できるようになります。ドキュメントによると:

したがって、外部データからデータベース全体を簡単に再作成できる場合にのみ、fsyncをオフにすることをお勧めします。

于 2011-06-12T02:23:12.360 に答える
1

COPYを使用して、テキストファイルを(適切な列を持つ)テーブルに挿入します

SERIAL PRIMARY KEYがない場合は、このテーブルに追加します

真空

これを行うCPUごとに1つのプロセスを生成します。

INSERT INTO sp_table ( ID_Info, "shape")
SELECT state_name, ST_GeomFromText( geom_as_text )
FROM temp_table
WHERE id % numbre_of_cpus = x

プロセスごとに異なる値「x」を使用して、テーブル全体が処理されるようにします。これにより、各コアを低速のST_GeomFromText関数で実行できるようになります。

挿入後にGISTインデックスを作成します。

于 2011-06-12T09:14:31.953 に答える