Kinerja FileGDB Lambat dalam GDAL

8

Saya mencoba untuk menulis banyak file titik ASPRS LAS ke dalam File ESRI Geodatabase menggunakan kompilasi GDAL 1.9.2 saya. Driver FileGDB untuk GDAL / OGR tampaknya sangat lambat saat menulis file besar, membutuhkan waktu 45 menit untuk menulis hanya 8 juta catatan titik. Kecepatan tulis FileGDB menggunakan GDAL pada drive SATA3 berada pada urutan 200 kilobyte per detik, yang sangat lambat ketika saya mencoba mengonversi data terrabyte.

Saya perhatikan dalam dokumentasi FileGDB bahwa mendefinisikan makro FGDB_BULK_LOAD akan meningkatkan kinerja untuk dataset besar, tapi saya tidak melihat perubahan kinerja ketika saya menulis baris ke file "nmake.opt" dengan teks "FGDB_BULK_LOAD = YA" segera setelah FGDB_LIB baris.

Memang, FileGDB bukan cara yang ideal untuk menyimpan miliaran catatan data titik, tapi itu keluhan untuk waktu lain. Sudahkah saya menggunakan fitur FGDB_BULK_LOAD dengan benar? Apakah itu seharusnya dalam kode sumber saya , bukan build GDAL?

Terima kasih.

UPDATE: Penggunaan Yang Tepat: (Dijawab dalam obrolan)

The FGDB_BULK_LOADPengaturan benar disimpan sebagai variabel lingkungan untuk proses GDAL / OGR. Ini diatur pada baris perintah selama panggilan ogr exe seperti yang ditunjukkan oleh Ragi. Menggunakan fungsi GDAL, dapat diatur pemrograman untuk seluruh proses dengan

 CPLSetConfigOption("FGDB_BULK_LOAD", "YES");

atau hanya untuk utas saat ini menggunakan

 CPLSetThreadLocalConfigOption("FGDB_BULK_LOAD", "YES");

FGDB_BULK_LOADharus diatur sebelum panggilan FGdbDataSource::CreateLayer(). Tidak jelas apakah OGRCleanupAll()tidak disetel variabel ini, tetapi aman untuk memanggil beberapa kali untuk memastikan.

Menggunakan opsi itu meningkatkan kinerja sekitar 5,5x lebih cepat untuk menulis jutaan hingga puluhan juta poin.

Berbisa
sumber

Jawaban:

9

FGDB_BULK_LOAD bukan pengaturan kompilasi, ini adalah opsi konfigurasi untuk alat-alat baris perintah (juga dapat dilakukan secara terprogram).

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

Akan membuat filegdb dan memuat data vektor KML ke sana. Beri tahu saya jika kinerja Anda masih buruk. Ngomong-ngomong, kamu di platform apa?

Memperbarui:

Hanya untuk meringkas apa yang dibahas dalam obrolan dan IRC:

Untuk akses terprogram:

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

harus setara.

Ragi Yaser Burhum
sumber
Terima kasih atas tanggapan Anda. Saya menggunakan Windows 7x64, mengkode dalam C ++ pada Qt Creator dan mengkompilasi dengan MSVC2010. Saya tidak menyadari bahwa itu adalah opsi baris perintah. Apakah mungkin untuk memanfaatkan peningkatan kinerja saat pengkodean dari perpustakaan?
Phlucious
General GDAL / OGR gripe: sebagian besar konfigurasi dan instruksi penggunaan pada halaman driver ditargetkan hanya untuk penggunaan commandline, sedangkan case use saya memerlukan integrasi pustaka GDAL / OGR ke dalam kode saya. Apakah ada sumber daya dokumen yang dikembangkan oleh pengembang yang tidak saya ketahui?
Phlucious
@Phlucious Ada bagian Sumberdaya di sini: gdal.org/ogr yang memiliki banyak dokumentasi pengembang. Pada akhirnya, dokumentasi terbaik adalah kode sumber itu sendiri. Seluruh kode sumber untuk driver FileGDB hanya 7 file, dan tersedia di sini github.com/OSGeo/gdal/tree/trunk/gdal/ogr/ogrsf_frmts/filegdb . Bahkan, jika Anda ingin melihat bagaimana bendera digunakan, Anda dapat melihat di sini: github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrsf_frmts/filegdb/…
Ragi Yaser Burhum
Cara pengaturan dilewatkan hanyalah serangkaian string. Anda dapat mengetahuinya dengan melihat di sini. Ini dapat dilewatkan sebagai rangkaian string github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrsf_frmts/filegdb/…
Ragi Yaser Burhum
1
Apa yang Anda katakan masuk akal. Dalam aplikasi saya, dengan kelas fitur pada urutan jutaan hingga puluhan juta poin, saya melihat peningkatan kinerja 5,5 hingga 6,0 kali. Cukup mengesankan! Saya juga belajar bahwa Anda dapat membuat beberapa utas menulis ke FileGDB yang sama selama mereka menulis ke item yang berbeda, yang meningkatkan kinerja lebih.
Phlucious