Mongo DB & Laravel: saiba mais sobre embedded documents

Este artigo discute maneiras de consultar dados por meio do Mongo Shell e da linguagem Java. Nesse contexto, são introduzidas consultas simples e avançadas, o uso do framework de agregação e a classe QueryBuilder. Mais importante ainda, este artigo também discute maneiras de entender o desempenho individual de cada consulta em relação ao banco e o uso de índices para melhorar o desempenho.

Em que situação o tema é útil

Este tópico é útil para quem deseja iniciar com um banco de dados Mongo DB e está interessado em métodos relacionados a desempenho e desenvolvimento de consultas.

Atualmente, os bancos de dados NoSQL (Not Only SQL) tornaram-se evidentes em grandes aplicações e grandes corporações que utilizam de alguma forma um ambiente web, e estão aderindo com entusiasmo a esse novo paradigma. Essa escolha foi feita porque as soluções NoSQL oferecem alguns pontos positivos associados aos bancos de dados relacionais. Entre esses fatores, temos buscas de dados mais rápidas, menos espaço em disco físico para armazenamento e facilidade de expansão, o que permite que o banco de dados seja distribuído em várias máquinas usando partições de dados (também conhecidas como shards).

Em busca desses pontos positivos, grandes empresas aderiram ao NoSQL, como Google, Facebook, Twitter, Amazon.com, MTV Networks, Disney IMG, Cisco e muito mais. Há algum tempo no Brasil, em um evento sobre o banco de dados NoSQL MongoDB, o especialista Franklin Amorim da Globo.com revelou que o MongoDB é o banco de dados escolhido para o jogo online CartolaFC. Atualmente, este é o maior aplicativo da Globo.com com mais de 2 milhões de usuários cadastrados e um pico de pageview de cerca de 90 milhões de páginas em junho de 2011. Normalmente, em seus projetos, a empresa utiliza o MySQL e o banco de dados relacional da equipe Globo. com revelou que eles descobriram que o uso do Mongo DB tinha algumas vantagens sobre o uso do MySQL.

MongoDB é um banco de dados gratuito desenvolvido pela empresa norte-americana 10gen. O banco é construído sobre os conceitos de arquivos e coleções, cada coleção armazenando vários documentos. Nesta arquitetura, podemos tentar associar coleções a tabelas e documentos a linhas de tabelas. Mas existem algumas diferenças muito significativas entre eles, por exemplo, o Mongo DB não possui relacionamentos entre coleções, como entre tabelas em um banco de dados relacional; os documentos são considerados dinâmicos, ou seja, você pode ter um Documents com um campo, enquanto outros documentos podem contêm três ou seis campos; pode-se usar o conceito de documentos embutidos, onde um documento está dentro de outro, ao invés de uma relação entre tabelas.

Os documentos no MongoDB seguem o padrão JSON (JavaScript Object Notation) e, após persistência, são convertidos para BSON, que é um tipo de dado binário e serializado típico do MongoDB. Com documentos formatados em JSON, a manipulação de dados é baseada em chaves e valores, o que permite a dinâmica entre documentos. Por exemplo, se, em qualquer coleção, um novo documento a ser inserido contém uma chave nula ou vazia entre suas chaves, a chave não precisa ser inserida. Porém, futuramente, quando tal chave tiver um valor, basta alterar o documento inserindo a chave e o valor, e somente esse documento será alterado.

Caso sejam necessárias novas chaves, elas podem ser inseridas no documento toda vez que houver alguma alteração no documento, como uma atualização, devido à necessidade de armazenar alguma informação nova. Em um banco de dados relacional, você não teria esse recurso e precisaria criar uma instrução SQL de alteração de tabela para inserir uma nova coluna. Se a nova coluna não tiver nenhum valor em algumas linhas, ela receberá o valor “null” nessas linhas. Este espaço de coluna ocupado por “null” será reservado pelo SGBD para uso futuro de dados, o que acabará consumindo espaço físico em disco, e se esses dados nunca forem inseridos, muito espaço em disco será perdido e apenas o valor “null” será armazenado.

No entanto, o objetivo deste artigo não é salvar documentos ou testar o espaço em disco usado para armazená-los, mas explorar consultas diretamente, ou formas de consultar dados do código Java e por meio do Mongo DB Shell. Entre os métodos de consulta temos Consultas Simples, Consultas Avançadas, Estrutura de Agregação e tipos de consultas QueryBuilder.

Todos esses tipos de consultas serão abordados neste artigo com exemplos práticos em Java e no Mongo Shell. Além disso, demonstraremos como obter um melhor desempenho de consulta adicionando um índice à coleção de documentos e também veremos as ferramentas que o Mongo DB fornece para avaliar o desempenho de consulta. Uma coleção de extensa documentação está disponível para download pelos leitores, que servirá como exemplos para teste de consulta, bem como o código-fonte Java usado no projeto.

Bancos relacionais e campos json

Quase todos os bancos de dados relacionais modernos trazem algum tipo de solução de esquema flexível, eu seria muito tendencioso se não comentasse sobre isso, por exemplo, o MySQL possui campos json que nos permitem obter os mesmos resultados citados acima e a mesma entidade de análise” protagonista”, que se encaixa muito bem com o Laravel e sua funcionalidade custom cast, uma possibilidade que você sem dúvida deve levar em consideração, no nosso caso acabamos escolhendo o Mongo DB por outras vantagens, como pipelines de agregação, que é uma ferramenta muito poderosa para filtrar e transformar resultados, esse recurso leva apenas uma postagem.

Conclusão

Mongo DB é uma ferramenta muito completa, certamente tem muito a oferecer, mas a maioria dos aplicativos funciona perfeitamente bem com bancos de dados relacionais mais antigos, se for o seu caso, sugiro que você vá com o familiar, pois toda nova tecnologia trará uma curva de aprendizado nossos próprios desafios, o Mongo DB não é diferente, e vou escrever um artigo para mostrar todos os desafios pelos quais passamos, e eles são muitos.