Quando usar um banco de dados nosql, como mongodb, sobre mysql?


13

Eu sou novo no conceito de bancos de dados nosql e nunca o usei. Com base no que li e no pouco que entendi, ainda não vejo como eles podem ser particularmente úteis se você não puder fazer referências entre dados, se não houver um conceito de chave estrangeira.

Como eu poderia, por exemplo, consultar algo simples como 'encontrar todos os comentários publicados por esse usuário', 'encontrar todas as fotos que pertencem a uma entidade do álbum' etc.

Os sistemas nosql se afastam do modelo de dados relacional estático, mas ainda permitem acompanhar essas referências; existe algo análogo às chaves estrangeiras que você pode utilizar nas consultas?

Respostas:


19

Usos Gerais

  • Se você possui estruturas de dados que não estão claramente definidas no momento em que você cria o sistema. Costumo manter as configurações do usuário no nosql, por exemplo. Outro exemplo foi um sistema em que os usuários precisavam adicionar campos em tempo de execução - muito doloroso em um RDBMS e muito fácil no NoSQL.

  • Se sua estrutura de modelo estiver amplamente centrada em torno de um ou poucos objetos de modelo e a maioria dos relacionamentos forem objetos filhos dos principais objetos de modelo. Nesse caso, você descobrirá que precisará muito pouco de junções reais. Eu descobri que o sistema de gerenciamento de contatos pode ser implementado bastante bem no nosql, por exemplo. Uma pessoa pode ter vários endereços, telefones e e-mails. Em vez de colocá-los em uma tabela separada, todos eles se tornam parte do mesmo modelo e você tem um objeto de pessoa.

  • Se você deseja se beneficiar do armazenamento de dados em cluster em vários servidores, em vez de ter um servidor monolítico, normalmente exigido pelo RDBMS.

  • Armazenamento em cache. Mesmo se você quiser usar um RDBMS como seu banco de dados principal, pode ser útil usar um banco de dados NoSQL para armazenar em cache os resultados da consulta ou manter os dados, como contadores.

  • Armazenando documentos. Se você deseja armazenar documentos coerentes, em um banco de dados, alguns dos bancos de dados NoSQL (como o MongoDB) são realmente especializados em armazená-los.

E as junções?

Honestamente, a coisa de não se juntar também me pareceu bastante assustadora no começo. Mas o truque é parar de pensar em SQL. Você precisa realmente pensar no objeto que tem na memória quando estiver executando seu aplicativo. Eles devem ser salvos mais ou menos apenas no banco de dados NoSQL, conforme a área.

Como você pode armazenar seu gráfico de objeto completo, com objetos filho, a maior parte da necessidade de junções é eliminada. E se você achar que precisa de um, precisará morder o marcador e buscar os dois objetos e ingressar no código do aplicativo.

Felizmente, a maioria dos drivers pode fazer a junção por você, se você configurar seu esquema corretamente.

Para uma leitura mais aprofundada, recomendo Martin Fowler .


2

Definitivamente, eu usaria esse banco de dados durante as etapas de planejamento de um projeto (antes do desenvolvimento, antes do design) para registrar dados cuja estrutura, relacionamentos e características ainda não são conhecidos e estão sujeitos a análise. Eu tentaria fazer tudo se encaixar em um modelo relacional depois disso.


2
O que? ... Por quê? ...
Robert Harvey

Assim, na prática, pode-se utilizar um modelo de relação para dados que sabemos que realmente não mudam muito, como informações do usuário, com o nome típico, email etc, no exemplo do mysql. E depois use isso em conjunto com um banco de dados nosql para manipular dados não estruturados e irregulares, como logs de atividades do usuário. Tipo de responsabilidade dividida. ? Ou você estava sugerindo iniciar com um banco de dados nosql e executar uma migração completa para um modelo relacional quando tudo estiver definido?
akomada

Em um cenário em que você já possui dados antes do início da análise (por exemplo, você é chamado para reescrever o software que controla uma fábrica existente, onde os sensores já estão transmitindo dados), eu começaria a capturar imediatamente os dados em um banco de dados nosql, e então tentaria, se possível, encaixá-lo em um modelo relacional. Se não for possível, eu continuaria com o nosql.
152615 Mike Nakis

0

Em alguns casos, você não precisará de chaves estrangeiras. Por exemplo:

Encontre todos os comentários publicados por este usuário

pode ser tão simples quanto carregar a commentsparte de um documento correspondente a um usuário. Isso é chamado de desnormalização : em vez de ter dois conjuntos com uma junção, você tem um documento e tudo o que precisa está dentro do documento. Uma consulta, nenhuma associação, melhor desempenho .

Mas, em algumas circunstâncias, isso pode levar à duplicação de dados , portanto, a vinculação de um para outro documento pode ser adequada. Neste caso, você pode estar interessado por MongoDB normalização, chave estrangeira e juntando-se , banco de dados Referências página e, especialmente, recurso DBRefs.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.