MongoDB vs PostGIS (PostgreSQL)
Análise comparativa de georreferenciamento NoSQL e SQL
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.
Referências
Relacionadas ao MongoDB:
Relacionadas ao Postgres: