Estoy intentando escribir muchos archivos de puntos ASPRS LAS en una geodatabase de archivos ESRI usando mi compilación de GDAL 1.9.2. El controlador FileGDB para GDAL / OGR parece ser increíblemente lento cuando se escriben archivos grandes, y tarda hasta 45 minutos en escribir solo 8 millones de registros de puntos. Las velocidades de escritura de FileGDB usando GDAL en un disco SATA3 son del orden de 200 kilobytes por segundo, lo que es inaceptablemente lento cuando estoy tratando de convertir terrabytes de datos.
Noté en la documentación de FileGDB que definir la macro FGDB_BULK_LOAD debería mejorar el rendimiento para grandes conjuntos de datos, pero no noté ningún cambio en el rendimiento cuando escribí una línea en el archivo "nmake.opt" con el texto "FGDB_BULK_LOAD = YES" inmediatamente después de FGDB_LIB línea.
Es cierto que un FileGDB no es la forma ideal de almacenar miles de millones de registros de datos de puntos, pero eso es una queja para otro momento. ¿He utilizado correctamente la función FGDB_BULK_LOAD? ¿Se supone que está en mi código fuente, no en la compilación GDAL?
Gracias.
ACTUALIZACIÓN: Uso adecuado: (Respondido en el chat)
La FGDB_BULK_LOAD
configuración se almacena correctamente como una variable de entorno para el proceso GDAL / OGR. Esto se establece en la línea de comando durante la llamada ogr exe como se muestra por Ragi. Usando las funciones GDAL, se puede configurar mediante programación para todo el proceso con
CPLSetConfigOption("FGDB_BULK_LOAD", "YES");
o solo para el hilo actual usando
CPLSetThreadLocalConfigOption("FGDB_BULK_LOAD", "YES");
FGDB_BULK_LOAD
debe establecerse antes de llamar FGdbDataSource::CreateLayer()
. No estaba claro si OGRCleanupAll()
desarmar esta variable, pero es seguro llamar varias veces para estar seguro.
El uso de esa opción aumentó el rendimiento para ser alrededor de 5.5 veces más rápido para escribir millones a decenas de millones de puntos.