Quando alguém usaria o MongoDB (ou similar) em um DBMS Relacional?

128

Estou um pouco confuso sobre a coisa toda NoSQL e tal. Quando você escolheria usar algo como o MongoDB sobre algo como Oracle ou MySQL? Eu realmente não entendo a "diferença" no que diz respeito ao uso entre eles.

Do meu entendimento, os bancos de dados do tipo NoSQL não são destinados a substituir os RDBMS, mas o que exatamente eles devem fazer?

    
por Glorfindel 03.03.2011 / 19:48
fonte

9 respostas

33

Eu já usei o CouchDB para três projetos de animais de estimação.

  • Um sistema de microblogging.
  • Para salvar informações para uma pequena anotação realizada pelo aplicativo.
  • Um aplicativo de brainstorming de propósito geral.

A principal razão pela qual eu escolhi isso em algo como MSSQL ou MySQL é a flexibilidade que você obtém ao usá-lo. Nenhum esquema rígido. Se três meses abaixo da linha você precisa de uma certa mesa para ter um campo extra, e isso e aquilo, você apenas muda e se move de lá em diante.

Eu usei Iniciando o CouchDB da Apress para aprender como usá-lo.

Por exemplo, o CouchDB usa o json para se comunicar com / do banco de dados. Se o seu idioma puder enviar dados POST, você poderá usá-lo para se comunicar com o banco de dados.

Leia também: Por que devo usar um banco de dados baseado em documentos em vez de um banco de dados relacional? banco de dados? no StackOverflow

    
por 03.03.2011 / 19:55
fonte
14

Desculpe adicionar outra resposta, mas nenhuma das respostas aqui é muito satisfatória. Essa resposta é específica do MongoDB (em oposição à vasta gama de outras opções de armazenamento de dados que não são bancos de dados relacionais).

Prós:

  • O MongoDB tem uma latência menor por consulta & gasta menos tempo de CPU por consulta porque está fazendo muito menos trabalho (por exemplo, sem junções, transações). Como resultado, ele pode manipular uma carga maior em termos de consultas por segundo e, portanto, é usado com frequência se você tiver um grande número de usuários.
  • O MongoDB é mais fácil de fragmentar (usar em um cluster) porque não precisa se preocupar com transações e consistência.
  • O MongoDB tem uma velocidade de gravação mais rápida porque não precisa se preocupar com transações ou reversões (e, portanto, não precisa se preocupar com o bloqueio).
  • O MongoDB não possui um esquema caso você tenha um caso de uso especial que possa tirar proveito disso.

Contras:

  • O MongoDB não suporta transações . É assim que obtém a maior parte de seus benefícios.
  • Em geral, o MongoDB cria mais trabalho (por exemplo, mais custo de CPU) para o servidor cliente . Por exemplo, para unir dados, é preciso emitir várias consultas e fazer a junção no cliente.
  • Mesmo aqui, em 2017, há menos suporte a ferramentas para o MongoDB do que para bancos de dados relacionais, simplesmente porque é mais recente. Há também menos especialistas do MongoDB do que seus correspondentes relacionais.

Pontos frequentemente incompreendidos:

  • O MongoDB e os bancos de dados relacionais suportam a indexação. O desempenho da consulta é semelhante em termos de execução de consultas grandes .
  • O MongoDB não remove a necessidade de migrações ou mais especificamente, atualizando seus dados existentes à medida que seu esquema evolui. Por exemplo: Se você tiver um aplicativo que dependa de uma tabela de usuários para conter determinados dados e modificar essa tabela para conter dados diferentes (digamos que você inclua um campo de imagem de perfil), ainda será necessário:
    • Escreva seu aplicativo para manipular objetos para os quais essa propriedade é indefinida OU
    • Escreva uma migração única para colocar um valor padrão para essa propriedade OU
    • Escreva o código para fornecer um valor padrão no momento da consulta, se esse campo não estiver presente OU
    • Manipule o campo ausente de alguma outra forma
por 18.04.2017 / 22:13
fonte
12

Para roubar descaradamente de Renesis (na verdade estou fazendo esta resposta CW):

Usando o RDBMS em vez de outros tipos:

por 23.05.2017 / 14:40
fonte
9

Quando seus dados não são relacionais, pode haver grandes benefícios em usar bancos de dados NoSQL, como desempenho e escalabilidade (dependendo das circunstâncias, é claro). Alguns padrões de design, como o CQRS, facilitam muito o aproveitamento de dados não relacionais em áreas que convencionalmente exigiriam o uso exclusivo de um banco de dados SQL.

É comum usar bancos de dados como o mongo para dados em cache. Por exemplo, se você precisa gerar um relatório, você poderia fazer uma consulta SQL complicada que une e agrega um monte de dados em tempo real, ou você pode simplesmente buscar um único documento json do seu banco de dados mongo que já possui tudo o que você precisa gerar o relatório. Isso torna a leitura de dados realmente fácil (e rápida!), Mas pode tornar a escrita de dados bastante complicada (é aqui que entra o CQRS).

    
por 03.03.2011 / 22:17
fonte
7

Bancos de dados como o MongoDB são ótimos quando você geralmente sabe onde seus dados estão (em oposição à necessidade de escrever várias consultas complicadas). Com o Mongo, os dados "relacionados" são aninhados nos dados pai ou possuem chaves primárias / estrangeiras. Isso é ótimo se, por exemplo, você tem Posts e Comentários; geralmente, você não exibirá comentários fora do contexto de uma postagem, portanto, faz sentido que os comentários estejam contidos em uma postagem (assim, você obtém todos os comentários para a postagem sem precisar consultar uma tabela separada).

O MongoDB não tem esquema. Isso significa que, na maior parte, será necessária a estrutura dos dados que você usar.

Por outro lado, se você precisar usar funções agregadas e sentir a necessidade de consultar dados de maneiras complexas que não podem ser obtidas por meio de incorporações ou relações simples no Mongo, saberá que é hora de usar um RDBMS como o MySQL ou PostgreSQL.

O MongoDB não é destinado a substituir o SQL. Ela simplesmente preenche necessidades diferentes, e o MongoDB e um RDBMS podem ser usados em conjunto. Na minha opinião, o MongoDB não é tão necessário se você não precisa que seus dados sejam flexíveis ou incorporados em um documento pai. O desenvolvimento com o MongoDB é muito divertido porque há muito menos etapas envolvidas na execução de um projeto (digamos, no Rails). Precisa fazer uma mudança? Sem problemas. Basta adicionar um atributo ao seu modelo. Feito.

Eu não posso falar por muitos outros bancos de dados NoSQL, embora eu saiba que eles geralmente são projetados de forma semelhante para atender a uma necessidade específica que não pode ser atendida por um RDBMS. Algumas residem inteiramente na memória ou podem ser compartilhadas ou dimensionadas com muita facilidade. Tenho certeza de que o Cassandra foi projetado para continuar operando sem perda de dados se um nó ficar inativo. Redis é basicamente um armazenamento de valores chave que reside na memória (com gravações de disco periódicas para persistência), mas também tem a capacidade de armazenar tipos de dados como conjuntos e classificá-los.

    
por 23.03.2015 / 22:14
fonte
6

A maior vitória é quando você deseja fragmentar dados ou ter bancos de dados multi-mestre. Você pode cortar dados no MySQL, mas isso se torna um grande problema. Se você estiver fazendo muitas gravações, geralmente é útil fragmentar os dados em vários servidores, o problema é que, se você quiser ter consistência referencial strong ao fazer isso, pode ser muito difícil, se não impossível, procurar o teorema CAP.

Os bancos de dados SQL têm uma consistência muito boa, mas um suporte de particionamento muito ruim, os bancos de dados NoSQL tendem a ir para o outro lado. Fácil de particionar, mas geralmente é chamado de consistência eventual. Se você está criando um site de mensagens que está ok, para um banco provavelmente não está OK.

A vantagem é que agora há vários modelos de como armazenar dados para que haja escolha em como você implementa o material, enquanto antes tudo o que você tinha eram bancos de dados SQL.

SE Radio teve alguns bons episódios sobre este assunto.

    
por 22.03.2011 / 15:57
fonte
1

O MongoDB funciona bem quando você grava muitos dados e quando suas necessidades de consulta não são muito complicadas. Portanto, o MongoDB é um bom ajuste quando você está implementando o CQRS com Event Sourcing no lado do Comando - ou seja, seu repositório de eventos é um banco de dados do MongoDB.

No lado da consulta, ainda usamos um banco de dados do SQL Server com exibições e o WCF Data Services, por causa de sua flexibilidade. Eu acho que na maioria dos casos você realmente precisa do poder de um banco de dados relacional para consulta.

    
por 22.03.2011 / 15:45
fonte
1

A diferença imediata e fundamental entre o MongoDB e um RDBMS é o modelo de dados subjacente. Um banco de dados relacional estrutura dados em tabelas e linhas, enquanto o MongoDB estrutura dados em coleções de documentos JSON. O JSON é um formato de dados legível e auto-descritivo. Originalmente projetado para trocas leves entre o navegador e o servidor, ele se tornou amplamente aceito para muitos tipos de aplicativos.

Documentos JSON são particularmente úteis para o gerenciamento de dados por vários motivos. Um documento JSON é composto por um conjunto de campos que são eles próprios pares de valor-chave. Isso significa que cada documento JSON carrega seu próprio design de esquema legível por humanos para onde ele for, permitindo que os documentos se movam facilmente entre aplicativos de banco de dados e de clientes sem perder o significado.

O JSON também é um formato de dados natural para uso na camada de aplicativo. O JSON suporta uma estrutura de dados mais rica e flexível do que tabelas feitas de colunas e linhas. Além de suportar tipos de campo como number, string, Boolean, etc., os campos JSON podem ser arrays ou subobjetos aninhados. Isso significa que podemos representar um conjunto de relações sofisticadas que são uma representação mais próxima dos objetos com os quais nossos aplicativos trabalham. Usar documentos JSON em nosso banco de dados significa que não precisamos de um mapeador relacional de objeto entre nosso banco de dados e os aplicativos que ele serve. Podemos manter nossos dados na forma correta

    
por 23.03.2015 / 12:00
fonte
1

Se seus dados precisarem de muitas consultas, uma solução NoSQL não será boa e, quando você precisar de suporte transacional (ACID), um NoSql não será o melhor ajuste. Eu acho que o NoSQL brilha quando você tem muitas leituras que precisam ser rápidas e quando a estrutura é um pouco adhoc, você recupera pelo documento ou pela estrutura da página, algo assim. Mas muitas soluções NoSQL se aprimoram bastante rápido, portanto, talvez haja falhas em breve. De qualquer forma, acho que os bancos de dados relacionais ainda são um bom ajuste para a maioria dos aplicativos.

    
por 24.03.2015 / 13:04
fonte