Estou tentando gravar muitos arquivos de ponto ASPRS LAS em um geodatabase de arquivo ESRI usando minha compilação do GDAL 1.9.2. O driver FileGDB para GDAL / OGR parece incrivelmente lento ao gravar arquivos grandes, levando até 45 minutos para gravar apenas 8 milhões de registros de pontos. As velocidades de gravação do FileGDB usando GDAL em uma unidade SATA3 são da ordem de 200 kilobytes por segundo, o que é inaceitavelmente lento quando estou tentando converter terrabytes de dados.
Notei na documentação do FileGDB que definir a macro FGDB_BULK_LOAD deve melhorar o desempenho de grandes conjuntos de dados, mas não notei nenhuma alteração no desempenho quando escrevi uma linha no arquivo "nmake.opt" com o texto "FGDB_BULK_LOAD = YES" imediatamente após o FGDB_LIB linha.
É certo que um FileGDB não é a maneira ideal de armazenar bilhões de registros de dados de pontos, mas isso é uma queixa por outro tempo. Eu usei corretamente o recurso FGDB_BULK_LOAD? Isso deveria estar no meu código-fonte, não na versão GDAL?
Obrigado.
ATUALIZAÇÃO: Uso adequado: (Respondido no chat)
A FGDB_BULK_LOAD
configuração é armazenada corretamente como uma variável de ambiente para o processo GDAL / OGR. Isso é definido na linha de comando durante a chamada ogr exe, como mostrado por Ragi. Usando as funções GDAL, pode ser definido programaticamente para todo o processo com
CPLSetConfigOption("FGDB_BULK_LOAD", "YES");
ou apenas para o segmento atual usando
CPLSetThreadLocalConfigOption("FGDB_BULK_LOAD", "YES");
FGDB_BULK_LOAD
deve ser definido antes da chamada FGdbDataSource::CreateLayer()
. Não ficou claro se OGRCleanupAll()
essa variável foi desmarcada, mas é seguro chamar várias vezes para ter certeza.
O uso dessa opção aumentou o desempenho para ser cerca de 5,5x mais rápido para gravar milhões a dezenas de milhões de pontos.