Como as funções do PostGIS lidam com buffers e armazenamento externo?

17

Eu vejo uma lista cada vez maior de novas funções no PostGIS, algumas das quais envolvem GEOS(por exemplo ST_ClusterKMeans). Algumas funções (por exemplo, aquelas pgroutingincluídas) dependem de outras bibliotecas (por exemplo BGL).

Minha impressão é que muitas dessas bibliotecas subjacentes (geralmente em C / C ++) não lidam com o gerenciamento de buffers entre a memória e as memórias / armazenamento / discos secundários.

Então, as funções PostGIS em cima delas funcionam em grandes conjuntos de dados que não podem ser armazenados na memória física (ou virtual)?

Em caso afirmativo, de onde vêm esses recursos de gerenciamento de buffer (do ponto de vista da implementação)?

tinlyx
fonte

Respostas:

11

Não, a maioria dessas funções de "análise de ordem superior" não possui nenhum tratamento especial para conjuntos de dados maiores do que cabem na memória. Se você executá-los nesses conjuntos de dados, você apenas fará o OOM do back-end.

Por um tempo, evitamos fazer essas funções, mas como a RAM ficou maior por padrão e as pessoas queriam mais análises e relativamente poucas delas atingiram os limites de memória, a equação de benefícios / desvantagens mudou em favor de "just do it".

A mais antiga dessas funções, ST_Union (), foi originalmente criada para não ficar vinculada à memória, com custos (muito altos) de desempenho. Você ainda pode usar a função original, ST_MemUnion (), que (confusa) realmente usa menos memória, pois "mem" significa "memória segura".

Outras funções, como ST_Buffer (), os vários clusters, serão OOM se você as alimentar com dados suficientes.

Paul Ramsey
fonte
1
"Memória insuficiente (OOM) é um estado indesejável de operação do computador, onde nenhuma memória adicional pode ser alocada para uso pelos programas ou pelo sistema operacional." - wikipedia
Martin F