Hiệu suất FileGDB chậm trong GDAL


8

Tôi đang cố gắng ghi nhiều tệp ASPRS LAS vào Cơ sở dữ liệu địa lý tệp ESRI bằng cách biên dịch GDAL 1.9.2. Trình điều khiển FileGDB cho GDAL / OGR dường như cực kỳ chậm khi viết các tệp lớn, mất tới 45 phút để viết chỉ 8 triệu bản ghi. Tốc độ ghi của FileGDB bằng GDAL trên ổ đĩa SATA3 nằm ở mức 200 kilobyte mỗi giây, tốc độ chậm không thể chấp nhận được khi tôi đang cố gắng chuyển đổi dữ liệu terrabyte.

Tôi nhận thấy trong tài liệu FileGDB xác định macro FGDB_BULK_LOAD sẽ cải thiện hiệu suất cho các bộ dữ liệu lớn, nhưng tôi nhận thấy không có thay đổi nào về hiệu suất khi tôi viết một dòng vào tệp "nmake.opt" với văn bản "FGDB_BULK_LOAD = YES" ngay sau FGDB_LIB hàng.

Phải thừa nhận rằng, FileGDB không phải là cách lý tưởng để lưu trữ hàng tỷ bản ghi dữ liệu điểm, nhưng đó là một sự kìm kẹp trong một thời điểm khác. Tôi đã sử dụng đúng tính năng FGDB_BULK_LOAD chưa? Có phải đó là trong mã nguồn của tôi , không phải là bản dựng GDAL?

Cảm ơn.

CẬP NHẬT: Sử dụng đúng cách: (Đã trả lời trong trò chuyện)

Các FGDB_BULK_LOADthiết lập được lưu trữ đúng cách như là một biến môi trường cho quá trình GDAL / OGR. Điều này được đặt trên dòng lệnh trong cuộc gọi ogr exe như được hiển thị bởi Ragi. Sử dụng các hàm GDAL, nó có thể được thiết lập theo chương trình cho toàn bộ quá trình với

 CPLSetConfigOption("FGDB_BULK_LOAD", "YES");

hoặc chỉ cho chủ đề hiện tại bằng cách sử dụng

 CPLSetThreadLocalConfigOption("FGDB_BULK_LOAD", "YES");

FGDB_BULK_LOADphải được đặt trước khi gọi FGdbDataSource::CreateLayer(). Không rõ liệu có OGRCleanupAll()đặt biến này hay không, nhưng có thể gọi nhiều lần để đảm bảo an toàn.

Sử dụng tùy chọn đó đã tăng hiệu suất nhanh hơn khoảng 5,5 lần để viết hàng triệu đến hàng chục triệu điểm.

Câu trả lời:


9

FGDB_BULK_LOAD không phải là một thiết lập biên dịch, nó là một tùy chọn cấu hình cho các công cụ dòng lệnh (cũng có thể được thực hiện theo chương trình).

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

Sẽ tạo một filegdb và tải dữ liệu vectơ KML vào nó. Hãy cho tôi biết nếu hiệu suất của bạn vẫn còn hút. Nhân tiện, bạn đang ở trên nền tảng nào?

Cập nhật:

Chỉ để tóm tắt những gì đã được thảo luận trong trò chuyện và IRC:

Để truy cập theo chương trình:

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

nên tương đương


Cảm ơn bạn đã phản hồi của bạn. Tôi đang dùng Windows 7x64, mã hóa bằng C ++ trên Qt Creator và biên dịch với MSVC2010. Tôi đã không nhận ra rằng đó là một tùy chọn dòng lệnh. Có thể khai thác để cải thiện hiệu suất khi mã hóa từ thư viện?
Phlucious

Tổng hợp GDAL / OGR: hầu hết các hướng dẫn sử dụng và cấu hình trên các trang trình điều khiển chỉ được nhắm mục tiêu sử dụng dòng lệnh, trong khi trường hợp sử dụng của tôi yêu cầu tích hợp thư viện GDAL / OGR vào mã của tôi. Có tài nguyên tài liệu dành cho nhà phát triển mà tôi không biết?
Phlucious

@Phlucious Có phần Tài nguyên ở đây: gdal.org/ogr có nhiều tài liệu dành cho nhà phát triển. Cuối cùng, tài liệu tốt nhất là chính mã nguồn. Toàn bộ mã nguồn cho trình điều khiển FileGDB chỉ có 7 tệp và nó có sẵn ở đây github.com/OSGeo/gdal/tree/trunk/gdal/ogr/ogrsf_frmts/filegdb . Trên thực tế, nếu bạn muốn xem cách sử dụng cờ như thế nào, bạn có thể xem tại đây: github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrsf_frmts/filegdb/
tựa

Cách thiết lập được truyền xung quanh chỉ đơn giản là một chuỗi các chuỗi. Bạn có thể tìm thấy điều đó bằng cách nhìn vào đây Nó được thông qua dưới dạng một chuỗi các chuỗi github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrsf_frmts/filegdb/ Hãy
Ragi Yaser Burhum

1
Những gì bạn nói có ý nghĩa. Trong ứng dụng của tôi, với các lớp tính năng theo thứ tự từ hàng triệu đến hàng chục triệu điểm, tôi đã thấy hiệu suất tăng từ 5,5 đến 6,0 lần. Khá ấn tượng! Tôi cũng đã học được rằng bạn có thể có nhiều luồng ghi vào cùng một FileGDB miễn là chúng ghi vào các mục khác nhau, giúp tăng hiệu năng hơn nữa.
Phlucious
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.