1. Visão geral
Muitas vezes, achamos difícil decidir sobre um banco de dados não relacional como um armazenamento de dados primário para nossos aplicativos.
Neste artigo, exploraremos dois bancos de dados não relacionais populares, Redis e MongoDB.
Primeiro, vamos dar uma olhada rápida nos recursos oferecidos pelo Redis e MongoDB. Em seguida, discutiremos quando usar Redis ou MongoDB comparando-os entre si.
2. Redis
Redis é um armazenamento de estrutura de dados na memória que oferece um rico conjunto de recursos. É útil como cache, agente de mensagens e fila .
2.1. Recursos
- Uma interface de linha de comando dedicada – redis-cli
- Armazena pares de valores-chave e suporta estruturas de dados como lista, conjunto e hash
- Pode armazenar valores de até 512 MB de tamanho
- Permite publicar e assinar mensagens usando filas de mensagens pub/sub
- Suporte geoespacial fornecendo comandos especiais para gerenciar dados geoespaciais em tempo real
- Permite a execução de scripts LUA
- Oferece vários clientes para tecnologias populares
- Suporta IoT e dispositivos incorporados
- Suporte a Spring Data
- Suporte ao Spring Cache usando clientes Java como Redisson
2.2. Instalação
Podemos baixar o servidor Redis mais recente do site oficial e instalá-lo:
$ wget http://download.redis.io/releases/redis-6.0.9.tar.gz
$ tar xzf redis-6.0.9.tar.gz
$ cd redis-6.0.9
$ make
3. MongoDB
MongoDB é um banco de dados de documentos NoSQL que armazena informações em uma estrutura de documento semelhante a JSON. É útil como um armazenamento de dados sem esquema para aplicativos, prototipagem e startups que mudam rapidamente em uma fase de design e implementação .
3.1. Recursos
- Oferece uma interface de linha de comando interativa MongoDB Shell (mongosh ) para realizar operações administrativas e consultar/atualizar dados
- Estrutura de consulta baseada em JSON com suporte de junções
- Suporta vários tipos de pesquisa, como pesquisa com base geográfica, pesquisa de gráfico e pesquisa de texto
- Suporta transações ACID de vários documentos
- Suporte a Spring Data
- Disponível nas edições Community, Enterprise e Cloud (MongoDB Atlas)
- Vários drivers para as principais tecnologias, como C++, Java, Go, Python, Rust e Scala
- Fornece GUI para explorar e manipular dados por meio do MongoDB Compass
- Oferece uma representação visual de dados usando gráficos MongoDB
- MongoDB BI Connector fornece conexões para plataformas de BI e análise
3.2. Instalação
Podemos baixar o servidor MongoDB mais recente ou, se estiver usando o macOS, podemos instalar a edição da comunidade diretamente usando o Homebrew:
brew tap mongodb/brew
brew install [email protected]
4. Quando usar o Redis?
4.1. Cache
O Redis oferece o melhor desempenho de armazenamento em cache da categoria, fornecendo tempo de resposta de menos de um milissegundo em itens solicitados com frequência .
Além disso, permite definir o tempo de expiração das chaves usando comandos como EXPIRE , EXPIRAR , e PEXPIRE .
Ao mesmo tempo, podemos usar o PERSIST comando para remover o tempo limite e persistir o par chave-valor, tornando-o ideal para armazenamento em cache.
4.2. Armazenamento de dados flexível
O Redis fornece várias estruturas de dados como string, list, set e hash para decidir como armazenar e organizar nossos dados. Portanto, o Redis nos dá total liberdade sobre a implementação das estruturas de banco de dados.
No entanto, também pode levar muito tempo para pensar no design do banco de dados. Da mesma forma, pode ser desafiador criar e manter a estrutura interna do esquema usando o Redis.
4.3. Armazenamento de dados complexos
Da mesma forma, com a combinação de lista, conjunto e hash, podemos implementar estruturas de dados complexas como filas, matrizes, conjuntos ordenados e gráficos para o nosso armazenamento.
4.4. Chat, Fila e Agente de Mensagens
O Redis pode publicar e assinar mensagens usando filas de mensagens pub/sub com correspondência de padrões . Assim, o Redis pode oferecer suporte a aplicativos de bate-papo em tempo real e feed de mídia social.
Da mesma forma, podemos implementar uma fila leve usando a estrutura de dados de lista . Além disso, a lista do Redis suporta operações atômicas e oferece recursos de bloqueio, tornando-o adequado para implementar um agente de mensagens.
4.5. Loja de sessões
O Redis fornece um armazenamento de dados na memória com recursos de persistência, tornando-o um bom candidato para armazenar e gerenciar sessões para aplicativos da Web/móveis.
4.6. IoT e Sistemas Embarcados
De acordo com a documentação oficial do Redis, versões mais recentes a partir de 4 e 5 suportam o processador ARM e o Raspberry Pi .
Além disso, ele é executado no Andriod e há esforços para incluir o Android como uma plataforma com suporte oficial.
Assim, o Redis parece ideal para IoT e sistemas incorporados, beneficiados por sua pequena pegada de memória e baixos requisitos de CPU.
4.7. Processamento em tempo real
Sendo uma estrutura de dados em memória extremamente rápida, podemos usá-la para aplicações de processamento em tempo real.
Por exemplo, o Redis pode atender com eficiência a aplicativos que oferecem recursos como alertas de preços de ações, tabelas de classificação e análises em tempo real.
4.8. Aplicativos geoespaciais
O Redis oferece uma estrutura de dados na memória Geo Set – construída em conjunto classificado – para gerenciar índices geoespaciais. Além disso, ele fornece comandos geográficos específicos, como GEOADD , GEOPOS , e GEORADIUS para adicionar, ler e analisar dados geoespaciais.
Portanto, podemos criar aplicativos geoespaciais em tempo real com recursos baseados em localização, como tempo de percurso e distância de percurso, usando o Redis .
5. Quando usar o MongoDB?
5.1. Consultas dinâmicas
O MongoDB oferece um poderoso conjunto de ferramentas de consulta. Além disso, ele fornece uma ampla variedade de esquemas de consulta flexíveis, como pesquisa baseada em localização geográfica, pesquisa de gráfico e pesquisa de texto para recuperação de dados eficiente.
Ao mesmo tempo, com o suporte de consultas estruturadas em JSON, o MongoDB parece ser a melhor escolha para cenários em que a pesquisa e a análise de dados são atividades diárias.
5.2. Esquema de mudança rápida
O MongoDB pode ser útil nas fases de design e implementação inicial, onde exigimos mudanças rápidas em nosso esquema. Ao mesmo tempo, ele não faz suposições sobre os dados subjacentes e se otimiza sem precisar de um esquema.
5.3. Prototipagem e Hackathons
Ao seguir a estrutura de documentos do tipo JSON, o MongoDB permite prototipagem rápida, integrações rápidas com canais front-end e hackathons .
Ao mesmo tempo, pode ser útil para equipes juniores que não desejam lidar com as complexidades de um RDBMS.
5.4. Catálogos
Ao fornecer um esquema dinâmico autodescritivo, o MongoDB facilita a adição de produtos, recursos e recomendações para catálogos como e-commerce, gestão de ativos e inventário.
Também podemos usar consultas expressivas no MongoDB para recursos como pesquisa avançada e análises indexando um campo ou conjunto de campos do documento estruturado em JSON.
5.5. Aplicativos para dispositivos móveis
A estrutura de documentos JSON do MongoDB permite armazenar diferentes tipos de dados de vários dispositivos junto com índices geoespaciais.
Além disso, a escalabilidade horizontal com fragmentação nativa permite o fácil dimensionamento de um aplicativo móvel. Portanto, o MongoDB pode atender a vários usuários, processar petabytes de dados e oferecer suporte a centenas de milhares de operações por segundo, tornando-o uma escolha digna de suporte para aplicativos móveis.
5.6. Aplicativos ricos em conteúdo
Não é fácil incorporar vários conteúdos no RDBMS para aplicativos modernos ricos em conteúdo. Por outro lado, o MongoDB permite armazenar e fornecer conteúdo avançado, como texto, áudio e vídeo .
Além disso, podemos armazenar facilmente arquivos maiores que 16 MB com eficiência usando o MongoDB GridFS . Permite acessar uma porção de arquivos grandes sem carregar o arquivo inteiro na memória.
Além disso, ele sincroniza automaticamente nossos arquivos e metadados em todos os servidores. Como resultado, o MongoDB parece ser uma escolha mais adequada para oferecer suporte a aplicativos ricos em conteúdo.
5.7. Aplicativos de jogos
Semelhante a aplicativos móveis e ricos em conteúdo, os jogos também exigem dimensionamento massivo e estruturas de dados dinâmicas. Assim, o MongoDB pode ser uma escolha promissora para aplicativos de jogos.
5.8. Serviço global de banco de dados em nuvem
O MongoDB Atlas está disponível em vários serviços de nuvem, como AWS, Google Cloud e Azure . Além disso, com replicação integrada e mecanismo de failover, oferece um sistema distribuído de alta disponibilidade. Portanto, podemos implantar e gerenciar rapidamente o banco de dados e usá-lo como um serviço global de banco de dados em nuvem.