Olá pessoal, em parceria com a MongoDB e Mat Keep, farei uma série de postagens mostrando as novidades da mais nova versão do MongoDB. Agora o MongoDB 3.6 está em Generally Available (GA) e pronta para utilização em produção.
- Hoje, veremos os novos recursos projetados especificamente para ajudar desenvolvedores a construir aplicativos mais rapidamente. Vamos dar uma olhada em Change Streams, Retryable Writes, ferramentas para desenvolvimento e manipulação de arrays utilizando um novo operador que dá mais poder para a manutenção dessas estruturas.
- Na parte 2, mergulharemos no mundo de DevOps e gerenciamento de sistemas distribuídos, explorando o Ops Manager, governança de schemas (schema validation) e compressão (End-to-End compression).
- A parte 3 abordará o que há de novo para desenvolvedores, cientistas de dados e analistas de BI com o novo conector baseado em SQL para BI, análises e agregações mais ricas e o novo driver recomendado para R.
- Na nossa parte final 4, analisaremos todas as novidades disponíveis no serviço de DBaaS MongoDB Atlas, disponível na AWS, Azure e Google Cloud Plataform (GCP), incluindo replicação entre regiões para clusters globalmente distribuídos, auto-dimensionamento e muito mais.
Se você quiser obter o detalhe de tudo o que a nova versão oferece, baixe o Guide to what’s New in MongoDB 3.6.
Developer-First
O MongoDB sempre foi uma tecnologia developer-first, ou seja, sempre tudo que é construído é pensando em facilitar a vida de desenvolvedores. O modelo de dados orientado a documentos mapeia naturalmente os objetos no código do aplicativo, tornando simples para os desenvolvedores aprender e usar. O schema de um documento pode ser dinamicamente criado e modificado sem provocar downtime, tornando a criação e evolução dos aplicativos mais rápida. Os drivers nativos são fornecidos para mais de 10 linguagens – e a comunidade criou mais um monte deles – permitindo consultas ad-hoc, agregação em real-time e fácil indexação fornecendo poderosas formas programáticas para acessar e analisar dados de qualquer estrutura.
O MongoDB 3.6 baseia-se nesses principais recursos para permitir que os desenvolvedores criem aplicativos e experiência de usuário mais ricas, com menos código.
Change Streams
Change Streams permite aos desenvolvedores criar aplicativos reativos, real-time, web, móveis e IoT que podem visualizar, filtrar e atuar sobre as mudanças de dados à medida que ocorrem no banco de dados. Change Streams também permite o movimento contínuo de dados em aplicações e banco de dados distribuídos, tornando simples transmitir as alterações de dados e disparar ações onde quer que sejam necessárias, usando um estilo de programação totalmente reativo.
Implementado como uma API sobre o log de operação do MongoDB (oplog), os consumidores podem abrir change streams em coleções e filtrar eventos relevantes usando os estágios do aggregation pipeline como $match, $project e $redact, por exemplo. O aplicativo pode se registrar para receber notificações sempre que um documento ou coleção for modificado, permitindo que aplicações e consumidores atuem nos novos dados em tempo real, sem ter que consultar constantemente toda a coleção para identificar mudanças. As aplicações podem consumir change streamsdiretamente, através de uma fila de mensagens ou através de um serviço de backend, como o MongoDB Stitch (em breve).
Algumas aplicações para o MongoDB change streams:
- Potencializar aplicações que precisam ser atualizadas em tempo real à medida que os preços de ações aumentam e diminuem.
- Sincronizar atualizações em arquiteturas serverless e microservices, disparando uma chamada de API quando um documento é inserido ou modificado. Por exemplo, os novos pedidos de clientes inseridos no banco de dados podem disparar automaticamente funções para gerar notas fiscais e agendamento de entrega.
- Atualizar dashboards, sistemas de análises e mecanismos de pesquisa à medida que os dados operacionais mudam.
- Criar poderosos pipelines de dados IoT que podem reagir sempre que o estado físico de objetos se altera. Por exemplo, gerando alarmes sempre que um veículo conectado se move para fora de uma área geo-definida.
- Disponibilizar através de push novas transações de cartão de crédito para modelos de machine learning reescreverem suas classificações de fraude.
- Atualizar placares de jogos multiplayer.
Figura 1: MongoDB change streams habilita consumidores a reagirem às mudanças de dados em tempo real
Alguns usuários de MongoDB que exigem notificações em tempo real criaram seus próprios processos de captura de dados modificados “olhando” o oplog. Ao migrar para change streams, esses usuários podem reduzir o desenvolvimento e demais despesas operacionais, melhorar a usabilidade e aumentar a confiabilidade dos dados. Quando comparados com as notificações de mudanças e uso de oplog implementadas alternativamente, MongoDB change streams oferece uma série de vantagens:
- Change streams é flexível – os usuários podem se registrar para receber apenas os deltas individuais das alterações de um documento ou receber uma cópia do completa do documento.
- Change streams é consistente – utilizando um relógio lógico global, change streams garante uma ordem total de notificações de eventos em shard. Como resultado, o MongoDB garante que a ordem das mudanças será preservada e pode ser processada com segurança pelo aplicativo consumidor na ordem recebida pelo stream.
- Change streams é seguro – os usuários podem criar change streams somente em coleções às quais foram concedidos acesso de leitura.
- Change streams é confiável – as notificações são enviadas somente em operações de escrita com a maioria de commits confirmadas e são duráveis quando os nós ou a rede falham.
- Change streams é recuperável – quando os nós se recuperam após uma falha, os change streams podem ser retomados automaticamente, assumindo que o último evento recebido pelo aplicativo não foi removido do oplog.
- Change streams é amigável – a sintaxe da API aproveita os drivers e query language do MongoDB e são independentes do formato básico do oplog.
- Change streams é altamente concorrente – podem ser abertas até 1000 change streams para cada instância do MongoDB sem ter grande perda de desempenho.
Veja a documentação de MongoDB Change Streams para saber mais.
Retryable Writes
A inclusão de retryable writes ao MongoDB, transfere a complexidade de lidar com falhas temporárias do aplicativo para o banco de dados. Agora, ao invés de o desenvolvedor ter que implementar um código personalizado do lado do cliente, o driver do MongoDB pode voltar a tentar escrever em caso de falhas de rede ou uma eleição num replicaset.
Ao atribuir um identificador de transação exclusivo para cada operação de escrita, o driver reenvia essa identificação para permitir que o servidor avalie o sucesso da tentativa de escrita anterior, ou tente novamente a operação, de acordo com a necessidade. A implementação de retryable writes oferece uma série de benefícios sobre as abordagens tomadas por outros bancos de dados:
- Retryable writes não se limitam apenas a operações idempotentes. Elas também podem ser aplicadas a operações como incrementar ou decrementar um contador, ou processar pedidos num sistema de estoque.
- Retryable writes são seguras para operações que não conseguiram confirmar o sucesso de volta ao aplicativo devido a um timeout, como uma falha de rede por exemplo.
- Retryable writes não requerem que o desenvolvedores adicionem qualquer código extra às suas aplicações, como uma lógica para voltar a tentar salvar em algum ponto.
Aplicativos que não podem sofrer qualquer indisponibilidade de escrita, como aplicativos de e-commerce, ações, sensores de IoT, logo se beneficiam com o uso de retryable writes. Quando implementado em conjunto com a auto-recuperação de um nó – normalmente dentro de dois segundos ou menos – retryable writes do MongoDB permitem que os desenvolvedores entreguem a disponibilidade global de operações de escrita, sem os riscos de perda de dados e leituras obsoletas impostas pela consistência eventual de sistemas de banco de dados multi-master.
Tunable Consistency
Com o recurso tunable consistency, o MongoDB oferece aos desenvolvedores um controle preciso sobre o roteamento de consultas em cluster distribuído, equilibrando garantias de consistência de dados com os requisitos de desempenho. O MongoDB 3.4 adicionou linearizable reads, que eram o ponto central para o MongoDB passar pelo Jepsen – um dos mais rigorosos testes de segurança e fidelidade de dados no setor de banco de dados.
Agora, a versão MongoDB 3.6 apresenta suporte para consistência casual – garantindo que toda operação de leitura dentro de uma sessão do cliente sempre verá a operação de escrita anterior, independentemente de qual réplica esteja atendendo a solicitação. Ao aplicar uma rigorosa ordem nas operações dentro de uma sessão, a consistência casual garante que cada leitura é sempre consistente logicamente, permitindo leituras monotônicas num sistema distribuído – garantia que a maioria dos bancos de dados multi-nó não atende.
A consistência casual permite que os desenvolvedores mantenham os benefícios herdados da estrita consistência de dados aplicada por bancos de dados relacionais single-node, ao mesmo tempo em que modernizam sua infraestrutura para tirar proveito dos benefícios de escalabilidade e disponibilidade das modernas plataformas de dados distribuídos.
Ferramenta de desenvolvimento: MongoDB Compass
Como uma GUI para MongoDB, o Compass tornou-se uma ferramenta indispensável para desenvolvedores e DBAs, permitindo análises gráficas de schemas e otimização de queries. O Compass oferece agora vários recursos novos:
- Auto-complete: permite que os desenvolvedores simplifiquem o desenvolvimento de consultas com o Compass fornecendo sugestões para nomes de campo e operadores MongoDB, além de adicionar automaticamente chaves e aspas à medida que codificam.
- Query History: permite que os desenvolvedores re-executem suas queries mais recentes e salve as mais comuns para serem executadas quando precisarem.
- Table View: agora os desenvolvedores podem visualizar documentos como tabelas e também como documentos JSON.
O MongoDB Compass não é somente apenas uma ferramenta – é uma estrutura construída para permitir a inclusão de módulos. O Compass agora expôs esse recurso como Compass Plugin Framework, tornando-o extensível por qualquer usuário com os mesmos métodos usados pelos engenheiros de software do MongoDB. Utilizando a API, os usuários podem criar plugins para adicionar recursos ao Compass. Alguns exemplos são: um visualizador de GridFS, um gerador de dados aleatórios para amostra, um visualizador de estatísticas de hardware, um coletor / analisador de logs e muito mais.
Você pode aprender mais sobre esses novos recursos na documentação do MongoDB Compass.
MongoDB Compass Community
Com o lançamento do MongoDB 3.6, a família Compass cresceu e agora dispõe de uma versão community, sem custo.
Essa versão fornece aos desenvolvedores uma interface visual intuitiva para usar em conjunto com o MongoDB shell. Inclui os principais recursos do Compass, permitindo que os usuários revejam a hierarquia e o tamanho dos bancos de dados e coleções, inspecionem documentos e façam operações de CRUD diretamente dessa interface. Os desenvolvedores podem usar a GUI para criar consultas, examinar como elas são executadas e criar ou excluir índices para melhorar o desempenho. A versão community também oferece suporte para as últimas funcionalidades do Compass disponíveis com o MongoDB 3.6, tornando os desenvolvedores ainda mais produtivos.
Figura 2: MongoDB Compass Community, nova GUI free para desenvolvedores MongoDB
Fully Expressive Array Updates
Arrays são uma poderosa estrutura no modelo de dados do MongoDB, permitindo aos desenvolvedores representar objetos complexos em um único documento que pode ser recuperado de forma eficiente em uma única chamada ao banco de dados. Antes da versão 3.6, no entanto, só era possível atualizar atomicamente o primeiro elemento encontrado no array com um único comando de update.
Com fully expressive array updates os desenvolvedores agora podem executar manipulações complexas nos elementos encontrados no array – incluindo elementos “embedados” em arrays aninhados (nested arrays) – tudo em uma única operação atômica de update. O MongoDB 3.6 adiciona uma nova opção arrayFilters, permitindo que o update especifique quais elementos modificar no array. Essa melhoria permite ainda mais flexibilidade na modelagem de dados. Também oferece um desempenho maior do que outros bancos de dados que suportam JSON, pois os documentos não precisam ser reescritos inteiramente quando somente os elementos “selecionáveis” do array são atualizados.
Saiba mais na documentação de update de arrays.
Próximos Passos
Assim encerro a primeira parte da nossa série de Novidades do MongoDB 3.6.
Se você quiser mais conteúdo relacionado, veja em:
- Entre para o DBaaS MongoDB Atlas
- Baixe a versão community do MongoDB 3.6
- Inscreva-se para o treinamento gratuito de 3.6 na MongoDB University
- Post original em inglês escrito por Mat Keep