MongoDB vs PostGIS (PostgreSQL)

Análise comparativa de georreferenciamento NoSQL e SQL

Álvaro Ferreira Pires de Paiva
4 min readDec 2, 2019

Em vários sistemas das mais diversas finalidades é comum o processamento de dados georreferenciáveis, isso significa que seus dados/objetos são referenciados a uma localização geográfica.

A dificuldade em processar esses dados/objetos se dar pela natureza do georreferenciamento: valores geográficos, como latitude e longitude, não são ordinais, isso significa que um valor menor a outro não corresponde diretamente a um valor menor de maneira significativa.

Por causa dessa dificuldade, várias soluções foram desenvolvidas com a finalidade de ajudar nesse processamento. Nesse artigo iremos abordar duas dessas soluções e realizar um comparativo entre elas: MongoDB, que implementa nativamente ferramentas para processar esses dados, e o PostGIS, extensão do banco de dados PostgreSQL.

Esse artigo seguirá da seguinte forma:

  • Apresentação dos bancos de dados utilizados;
  • Apresentação da base de dados utilizada;
  • Testes realizados;
  • Resultados obtidos;
  • Conclusão.

MongoDB

Trata-se de um banco de dados NoSQL, orientado a documentos, de propósito geral. Além de ser multiplataforma, ter alta performance e fácil de programar em várias linguagens, algumas das suas principais vantagens são:

  • Schema flexível: seus dados são armazenados em JavaScript Object Notation (JSON), o que permite haver atributos aninhados, evitando assim normalizações que poderiam gerar várias tabelas;
  • Escalabilidade: possui vários mecanismos que facilitam a escalabilidade da sua base de dados para arquiteturas mais grandes e complexas.

PostGIS (PostgreSQL)

O PostgreSQL é um sistema gerenciador de banco de dados de objeto relacional, de código aberto, atualmente sendo um dos mais avançados do mercado. Já o PostGIS é uma extensão geoespacial para o PostgreSQL, que serve para facilitar no processamento de dados georreferenciáveis, possuindo um alto desempenho em suas consultas.

Base de dados

A base de dados foi retirada do site do Open Street Map, pegando a área de:

  • Latitude mínima: -6.0197000;
  • Latitude máxima: -5.6003000;
  • Longitude mínima: -35.5394000;
  • Longitude máxima: -34.8418000.

Do arquivo gerado pelo Open Street Map, usou-se Python para retirar apenas as latitudes e longitudes dos nós, ao final georreferenciando um total de 242384 nós.

Latitude e Longitude

Latitude é o ângulo entre o plano do equador à superfície de referência. A latitude mede-se para norte e para sul do equador.

Longitude é medida ao longo do Equador, e representa a distância entre um ponto e o Meridiano de Greenwich.

Testes

Os testes foram realizados tomando como centro as seguintes coordenadas: -5.8117310, -35.2084091. A partir desse centro, as buscas deveriam retornar a quantidade de nós existentes ao redor, aumentando a dimensão do espaço de busca. Foi realizado um total de 1000 buscas para cada dimensão, após isso calculou-se o tempo médio. Os testes foram:

  • 1km: 4019 nós;
  • 1.5km: 8820 nós;
  • 2km: 13598 nós;
  • 2.5km: 19308 nós;
  • 3km: 27223 nós.

Para o MongoDB foi usado a biblioteca PyMongo, para o PostGRIS foi usado a biblioteca psycopg2. Ambas na linguagem Python.

Resultados

O tempo médio das buscas no MongoDB foram:

  • 1km: 0.13389412569999695 segundos;
  • 1.5km: 0.14867158889770507 segundos;
  • 2km: 0.16140337800979615 segundos;
  • 2.5km: 0.1800974507331848 segundos;
  • 3km: 0.20603042006492614 segundos.

O tempo médio das buscas no PostGIS foram:

  • 1km: 0.2345798456668854 segundos;
  • 1.5km: 0.24573891210556031 segundos;
  • 2km: 0.2557765872478485 segundos;
  • 2.5km: 0.2687856147289276 segundos;
  • 3km: 0.288063449382782 segundos.

Pode-se observar que no MongoDB teve um aumento de ~11,4% de tempo entre uma busca e a seguinte, já no PostGIS esse aumento foi de ~5,3% de tempo.

Conclusão

O MongoDB realmente mostrou-se ser mais eficiente nas buscas realizadas, sendo que a medida que o espaço das buscas foram aumentando, o PostGIS obteve um aumento de tempo bem melhor (pouco menor que a metade do tempo de busca do MongoDB). Muito provavelmente, aumentando gradativamente o espaço das buscas, haveria uma intersecção no desempenho das duas ferramentas e, posteriormente, o PostGIS poderia chegar a ultrapassar o MongoDB.

Trabalhos futuros

Em trabalhos futuros, pode-se adicionar complexidade as buscas, como retornar não apenas a quantidade de nós, como também agrupar eles a partir de alguma outra variável que poderia ser colocada na base de dados. Também seria interessante analisar em espaços maiores, a fim de verificar se realmente chega a um ponto de intersecção entre as ferramentas e como elas se comportam após esse ponto.

Esse artigo foi escrito para a disciplina de Banco de Dados NoSQL, no curso de Bacharelado em Tecnologia da Informação (BTI) da Universidade Federal do Rio Grande do Norte (UFRN), possuindo Gustavo Leitão como professor. Grupo:

Os códigos podem ser encontrados no repositório alvarofpp/imd1130-nosql.

--

--