Melhor sistema GIS para aplicativos da web de alto desempenho - PostGIS vs MongoDB

36

Estou trabalhando em um aplicativo Web / móvel com base em dados de localização. Como eu já estou familiarizado com o MongoDB, achei a indexação geoespacial do mongo adequada para minhas necessidades. Como estou lidando principalmente com pontos de localização simples / curtos, a indexação do Mongo 2d é boa para mim.

Ao longo do caminho, escolhi o PostGIS, devido à sua maneira estável / madura. E seu incrível conjunto de recursos. Mas minha principal preocupação é o desempenho, pois meus dados dependem muito do local (principalmente 70 a 80% das chamadas de banco de dados lidam com o local).

Eu gosto do mongo porque já é usado por aplicativos da web de alto desempenho como o quadrangular. Mas vi que o PostGIS é usado principalmente em projetos governamentais / empresariais (principalmente aplicativos não web / móveis). Então, agora estou um pouco confuso ao escolher o banco de dados GIS correto para meu aplicativo web / móvel? Tem alguma sugestão?

RameshVel
fonte
2
crie um índice espacial com o postgres / postgis e você verá um bom desempenho. Mas se você está mais feliz com o MongoDB, continue com isso.
Mapperz

Respostas:

36

Se a sua carga de gravação (fluxo de dados de entrada) puder aumentar potencialmente sem limite (se o sucesso do seu projeto da Web fizer com que a quantidade de gravações cresça, cresça, cresça), vá com o Mongo, porque será muito difícil arquitetar seu caminho em torno do escreva um gargalo no PostGIS / PostgreSQL depois de crescer além das capacidades de um único servidor high-end (que, deve-se notar, é enorme).

É possível arquitetar boas soluções PostGIS / PostgreSQL para carga pesada de leitura (replicação mestre / escravo) e para grandes tamanhos de dados (particionamento de tabela), mas a carga de gravação é difícil. Você já apresentou o caso contra o Mongo e o PostGIS, que é o conjunto de recursos e a maturidade de código muito maior do PostGIS, portanto, equilibre-o com as outras preocupações.

Paul Ramsey
fonte
3
Ah, e lembre-se: "MongoDB é escala na web". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey
sim eu sei que .. era muito engraçado (e acertou bem na cabeça se você só queria fantasia se com a mais recente tecnologia) :)
RameshVel
1
Bem, você pode sempre "webscale" girando fsync = off;)
Ragi Yaser Burhum
1
O PostgresXC agora pode fornecer um sistema paralelo de gravação com garantias transacionais completas e execução de consultas em vários nós. Cinto e suspensórios, OLAP e OLTP, vale a pena olhar. E suporta PostGIS.
Paul Ramsey
Mas se você escolher o PostgresXC / XL, precisará manter o pacote por conta própria. Oficialmente disponível apenas para o Fedora / Redhat, os amantes do Ubuntu precisam gastar tempo compilando as coisas manualmente.
Ravi Kumar
21

Uso o PostGIS há alguns anos e só recentemente comecei a investigar como eu poderia usar o MongoDB para lidar com certos casos de uso. Eu estava lidando com dados pontuais que tinham campos esparsos - como dados OSM com um número variável de tags por registro e, como o MongoDB não tem esquema, ele se presta bem a isso. Carreguei uma amostra desses dados em uma instância de cada banco de dados e foi isso que encontrei.

Parece-me que, para armazenamento e recuperação simples de dados pontuais, o Mongo funciona perfeitamente. As consultas geoespaciais da caixa delimitadora parecem funcionar bem, e acho que o desempenho geral é muito bom. Também é muito fácil de configurar e seguir em frente, embora eu tenha descoberto que a ferramenta mongoimport não me permite definir um campo de coordenação 2D composto em um arquivo TSV ou CSV. Como é muito fácil escrever um script que gera JSON, isso não tem sido um grande problema. Sua principal desvantagem no momento é que quase nada mais no domínio geoespacial pode ler dados nativamente a partir dele. Parece haver um plug-in experimental de fonte de dados do Mapnik em https://github.com/springmeyer/mapnik-mongo , mas foi tudo o que pude encontrar.

O PostGIS, por outro lado, demora um pouco mais para ser configurado (pelo menos para mim), mas, como mencionado acima, ele oferece muito mais recursos prontos para uso. Além de fornecer recursos analíticos espaciais muito mais sofisticados, também é suportado nativamente por vários outros aplicativos e bibliotecas; Mapserver, Mapnik, QGis, GDAL, etc, etc. Para mim, o PostGIS é muito mais um verdadeiro sistema GIS, em vez de um simples sistema de armazenamento e recuperação.

Quanto ao desempenho, descobri que era possível recuperar dados muito rapidamente de ambos os sistemas. No entanto, parecia que o PostGIS se beneficiava mais da presença de índices. O MongoDB foi um pouco mais rápido ao retornar todo o conjunto de dados para mim (2 milhões de registros) de uma só vez, e um pouco mais lento ao retornar uma consulta que usava um índice - pela primeira vez. Não tenho exatamente certeza do mecanismo que ele usa para armazenar em cache, mas posso ver que, se eu repetir uma consulta no MongoDB, os resultados retornam muito mais rapidamente na segunda vez. Vejo algo semelhante no PostGIS, mas não no mesmo grau. Também observei que o uso de memória na minha máquina parece ser muito maior com o MongoDB em execução do que com o PostGIS.

Portanto, minha conclusão é que não vou me livrar do PostGIS como meu sistema de armazenamento e análise geoespacial padrão, mas para certos tipos de projetos (nomeadamente mapas da web que exibem blocos de imagens e / ou dados de pontos), posso considerar usar o MongoDB como meu armazenamento de dados.

Roger

lagerratrobe
fonte
1
concordo plenamente com você .. o mongo é uma opção muito boa para lidar com dados geográficos básicos. Atualmente, estou fazendo consultas esféricas e de caixa delimitadora mais simples, e está indo bem. Mais uma coisa que quero acrescentar é o Solr lucene, que também fornece as funções geográficas básicas como mongo, e também é muito rápido quando usado com consultas facetadas. currenlty am usando a combinação de ambos mongo & Solr ..
RameshVel
@RameshVel você poderia dizer algo mais sobre solr lucene?
precisa
@rashad, você pode instalar o elasticsearch (basta baixar, extrair e pronto) e jogar com as consultas Geo DSL. É bastante básico, mas se você deseja pesquisar / facetas e geográficas, pode usá-lo.
Ravi Kumar
3

Em relação ao uso de memória com o Mongo, vale ressaltar que o Mongo depende inteiramente do cache de arquivos do SO para obter seus índices e dados na memória - não há conceito de um 'buffer de memória mongo / cache de índice', então você o verá tentar (ou em vez disso, o sistema operacional usará) toda a RAM disponível até o ponto em que todos os seus arquivos de dados foram armazenados em cache.

Patrick Vale
fonte