GDALでFileGDBのパフォーマンスが遅い


8

GDAL 1.9.2のコンパイルを使用して、ESRIファイルジオデータベースに多くのASPRS LASポイントファイルを書き込もうとしています。GDAL / OGRのFileGDBドライバーは、大きなファイルを書き込むときに信じられないほど遅く、800万ポイントのレコードを書き込むのに45分もかかります。SATA3ドライブでGDALを使用するFileGDBの書き込み速度は、毎秒200キロバイト程度であり、テラバイトのデータを変換しようとすると許容できないほど低速になります。

FileGDBのドキュメントで、FGDB_BULK_LOADマクロを定義すると大規模なデータセットのパフォーマンスが向上することに気付きましたが、FGDB_LIBの直後に「FGDB_BULK_LOAD = YES」というテキストを含む行を「nmake.opt」ファイルに書き込んだとき、パフォーマンスに変化はありませんでした。ライン。

確かに、FileGDBは何十億ものポイントデータレコードを格納するための理想的な方法ではありませんが、それは別の時代には不便です。FGDB_BULK_LOAD機能を正しく使用しましたか?これは、GDALビルドではなく、私のソースコードにあるはずですか?

ありがとう。

更新:適切な使用法:(チャットで回答)

FGDB_BULK_LOAD設定が正しくGDAL / OGR・プロセスの環境変数として格納されます。これは、Ragiが示すように、ogr exe呼び出し中にコマンドラインで設定されます。GDAL機能を使用すると、プログラムで設定することができ、全体のプロセスのため

 CPLSetConfigOption("FGDB_BULK_LOAD", "YES");

または現在のスレッドだけ使用して

 CPLSetThreadLocalConfigOption("FGDB_BULK_LOAD", "YES");

FGDB_BULK_LOADを呼び出す前に設定する必要がありますFGdbDataSource::CreateLayer()OGRCleanupAll()この変数の設定を解除するかどうかは明確ではありませんでしたが、念のため複数回呼び出しても安全です。

このオプションを使用すると、数百万から数千万のポイントを書き込む場合のパフォーマンスが約5.5倍速くなりました。

回答:


9

FGDB_BULK_LOADはコンパイル設定ではなく、コマンドラインツールの構成オプションです(プログラムで実行することもできます)。

ogr2ogr --config FGDB_BULK_LOAD YES -f "FileGDB" MyFileGDB.gdb myKML.kml

filegdbを作成し、それにKMLベクトルデータをロードします。それでもパフォーマンスが悪い場合はお知らせください。ところで、あなたはどんなプラットフォームを使っていますか?

更新:

チャットとIRCで議論されたことを要約すると、

プログラムによるアクセスの場合:

 OGRDataSource* datasource = driver->Open("c:/myfilegdb.gdb", TRUE); 
 char* options[] = { "FGDB_BULK_LOAD=YES" , NULL }; 
 OGRLayer newlayer = datasource->CreateLayer("tiny", NULL, wkbPoint25D, options);

同等である必要があります。


ご回答ありがとうございます。私はWindows 7x64で、Qt CreatorをC ++でコーディングし、MSVC2010でコンパイルしています。それがコマンドラインオプションであることを理解していませんでした。ライブラリからコーディングするときに、そのパフォーマンスの向上を利用することは可能ですか?
Phlucious

一般的なGDAL / OGRの不満:ドライバーページの構成と使用方法の説明のほとんどは、コマンドラインの使用のみを対象としていますが、私の使用例では、GDAL / OGRライブラリをコードに統合する必要があります。私が知らない開発者向けのドキュメントリソースはありますか?
Phlucious

@Phlucious 開発者向けのドキュメントが豊富にあるgdal.org/ogrのリソースセクションがあります。最後に、最良のドキュメントはソースコード自体です。FileGDBドライバーのソースコード全体は7ファイルのみで、github.com / OSGeo / gdal / tree / trunk / gdal / ogr / ogrsf_frmts / filegdbから入手できます。実際、フラグの使用方法を確認したい場合は、github.com
Ragi Yaser Burhum

設定が渡される方法は、単に文字列の配列です。あなたはそれが文字列の配列として渡される、ここで見ることによって、それを見つけることができますgithub.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrsf_frmts/filegdb/...
Ragi Yaser Burhum

1
あなたの言うことは理にかなっています。私のアプリケーションでは、数百万から数千万ポイントのフィーチャクラスがあるため、パフォーマンスが5.5倍から6.0倍に向上しました。かなり印象的!また、異なるアイテムに書き込む限り、複数のスレッドが同じFileGDBに書き込むことができることも学びました。これにより、パフォーマンスがさらに向上します。
フルーシャス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.