Fala pessoal, blz? Hoje inicio minha série de artigos sobre a utilização do MongoDB no Azure Cosmos DB. E hoje, domingo, escrevo do terminal 2 do Aeroporto do Galeão no Rio de Janeiro, depois de finalizar mais um treinamento de MongoDB aqui na "Cidade Maravilhosa".
Mas vamos ao que interessa!
Azure Cosmos DB
Numa breve introdução, o Azure Cosmos DB é definido pela Microsoft como um serviço de banco de dados multi-model, globalmente distribuído, para aplicações críticas. Dentre os serviços oferecidos pelo Azure Cosmos DB estão distribuição global, escalabilidade elástica para throughput e armazenamento, latências de milissegundos e garantia de alta disponibilidade, baseados no suporte de SLAs da Azure. Além disso o Azure Cosmos DB indexa os dados automaticamente (mas isso é assunto pra outro dia...)!
O Azure Cosmos DB pode ser usado para armazenar dados de aplicações originalmente escritas para o MongoDB. Basicamente isso quer dizer que se você utilizar os drivers existentes, sua aplicação que utiliza o MongoDB pode se comunicar com Azure Cosmos DB (em muitos dos casos) somente trocando a string de conexão, ao mesmo tempo que você continua utilizando as ferramentas e ainda aplicando seus conhecimentos de MongoDB!
Compatibilidade com o MongoDB: se você já utiliza o MongoDB, sabe como ele funciona e domina o schema design, poderá continuar aplicando tudo isso, mas cuidado com alguns aspectos (que serão abordados nos próximos posts), porque o Azure Cosmos DB até a data de publicação desse artigo utiliza a versão 3.4.5 do MongoDB e também suporta do aggregation pipeline do MongoDB, sendo que esse último terá um post específico nos próximos dias...
Mas que vantagem Maria leva em utilizar o Azure Cosmos DB com a API do MongoDB?
Processamento e Armazenamento elasticamente escaláveis: a possibilidade de aumentar ou reduzir verticalmente seu banco de dados. Os dados são armazenados em discos SSD, fornecendo a menor latência possível. O Azure Cosmos DB oferece suporte a coleções que podem ser dimensionadas para tamanhos de armazenamento e throughput praticamente ilimitados. E você pode modificar essas configurações à medida em que sua aplicação cresce.
Replicação entre várias regiões: De forma transparente, o Azure Cosmos DB pode replicar seus dados entre as regiões de sua conta associada ao MongoDB, isso possibilita que você desenvolva aplicações que exijam distribuição global. Com isso, também é possível configurar um failover regional sem downtime de sua aplicação.
Serverless: Como o Azure Cosmos DB se assemelha muito a um DBaaS, você não precisa se preocupar com o gerenciamento das máquinas onde seu banco de dados estará hospedado, ele está disponível em mais de 30 regiões do Azure.
Níveis de consistência ajustáveis: Hoje, o Azure Cosmos DB trabalha com a versão 3.4 do MongoDB, ele oferece somente dois níveis de consistência: forte e eventual. O Azure Cosmos DB oferece vários níveis de consistência, porém, esses níveis são controlados pela API que você escolhe, ou seja, dependendo da API utilizada, esses níveis são reduzidos ao que a API escolhida oferece. Até o lançamento da versão 3.6 do MongoDB, não havia nenhum controle de sessão, por isso se você definir a API do MongoDB para utilizar a consistência de sessão, será feito um downgrade para a consistência eventual. Veja como utilizar os níveis de consistência para potencializar a disponibilidade e desempenho
Níveis de consistência do Azure Cosmos DB | API do MongoDB (3.4) |
---|---|
Eventual | Eventual |
Consistent Prefix | Eventual with consistent order |
Session | Eventual with consistent order |
Bounded staleness | Strong |
Strong | Strong |
Indexação automática: O Azure Cosmos DB indexa automaticamente todas as propriedades dos documentos do seu banco de dados MongoDB, sem necessidade de schema ou criação de índices secundários. Ainda oferece a possibilidade de criar índices do tipo unique em qualquer propriedade já indexada.
Próximos passos
Nos próximos artigos vou mostrar como criar um banco de dados no Azure Cosmos DB utilizando a API do MongoDB, depois demonstrarei a facilidade de migração dos aplicativos existentes, trocando basicamente a string de conexão. Posteriormente continuaremos juntos nessa jornada em que compartilharei com vocês o que tenho aprendido pelo caminho.
Espero que tenham gostado e fiquem à vontade em compartilhar e deixar seu like!
Abraços!
Top comments (2)
Legal seu artigo Leandro! Tenho utilizado o CosmosDB com a API do MongoDB. Gosto bastante do MongoDB pra maioria das aplicações que temos hoje, acredito que a facilidade que ele nos trás no desenvolvimento de aplicações CRUD é muito grande. Porém, tenho visto algumas dificuldades com o CosmosDB, como a facilidade de que minha aplicação crie a collection faz com que eu não tenha um tamanho ilimitado dela ou mesmo eu possa alterar para um tamanho ilimitado, acho isso complicado. Tenho tido alguns problemas para fazer consultas aggregate quando preciso filtrar por um campo específico dentro de um array, muitas vezes a consulta não me traz os valores que deveriam trazer, se exporto a collection para um MongoDB nativo, a query me retorna exatamente o que eu preciso, passou por algum problema assim? Outro ponto que não achei muito interessante é que dizem que é escalável, mas eu preciso escalar manualmente ou então criar um outro aplicativo pra rodar e fazer escala-lo sozinho com base em métricas de monitoria do Azure, sem falar que estariam me cobrando pra q essa aplicação fique rodando pra escalar o cosmos.
Luidy, obrigado! Vi sua dúvida lá no grupo de Cosmos do WhatsApp... não respondi porque estou montando um cenário que servirá de base para essa série de posts, onde falarei sobre a compatibilidade e das versões e operadores do aggregation framework tbm. Assim que tiver os resultados eu posto lá no grupo e aqui tbm. Valeu!