MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

A batalha dos bancos de dados NoSQL - Comparando MongoDB e CouchDB

MongoDB e CouchDB são os tipos de bancos de dados NoSQL baseados em documentos. Um banco de dados de documentos também é chamado de armazenamento de documentos m, e geralmente são usados ​​para armazenar o formato do documento dos dados semiestruturados e a descrição detalhada dos mesmos. Permite a criação e atualização de programas sem a necessidade de consultar o esquema mestre. O gerenciamento de conteúdo e o manuseio de dados no aplicativo móvel são dois dos campos onde o armazenamento de documentos pode ser aplicado.

Visão geral do MongoDB

MongoDB foi a startup do 10gen, que se originou em 2007. Vindo da família de armazenamentos de documentos, é um dos bancos de dados NoSQL típicos, sem esquema, com desempenho, escalabilidade e riqueza nas funções de processamento de dados. Esse banco de dados de código aberto é escrito em C++ e faz uso de esquemas dinâmicos. A arquitetura do MongoDB contém documentos agrupados em coleções com base em sua estrutura. Este banco de dados faz uso de BSON. BSON é a representação binária de JSON e suporta armazenamento de documentos e intercâmbio de dados. No MongoDB, os assuntos de negócios podem ser armazenados em um número mínimo de documentos, que podem ser indexados principalmente ou secundariamente, sem dividi-los em vários relacionais.

Juntamente com os recursos mencionados acima do MongoDB, ele também fornece uma grande coleção de conjuntos de réplicas onde cada conjunto pode conter mais de uma cópia de dados. Nos conjuntos de réplicas, todas as funções primárias (leitura e escrita) são executadas no conjunto primário enquanto os conjuntos secundários são utilizados em caso de falha do primeiro. O MongoDB incorpora o sharding, que faz uso do processo de dimensionamento horizontalmente. A propriedade de balanceamento de carga deste banco de dados de armazenamento de documentos se justifica pelo fato de ser executado em vários servidores, proporcionando assim a duplicação de dados e balanceamento de carga. Em troca, também fornece backup durante a falha de hardware. Ele também faz uso de um sistema de arquivos de grade que divide o arquivo específico em diferentes partes e as armazena separadamente.

Os recursos comuns do MongoDB:

  • O design do modelo de dados reduz a necessidade de junções e facilita a evolução do esquema.
  • Alto desempenho, pois não contém junção nem transações que fornecem acesso rápido e, portanto, o desempenho é aumentado.
  • Alta disponibilidade devido à incorporação de conjuntos de réplicas que são capazes de fornecer backup durante falhas e também são altamente robustos.
  • Facilidade na escalabilidade.
  • A propriedade de fragmentação do MongoDB permite que ele execute de maneira rápida e eficiente nas funções distribuídas. Isso também é possível, pois oferece suporte ao dimensionamento horizontal de dados.
  • A linguagem é muito rica na consulta. O MongoDB tem sua própria linguagem de consulta chamada linguagem de consulta Mongo, que pode substituir as SQL. Da mesma forma, funções utilitárias e map ou reduce podem substituir funções agregadas complicadas.
Figura 1:Arquitetura MongoDB

Visão geral do CouchDB

CouchDB, um produto Apache Software Foundation e inspirado no Lotus Notes, também é um banco de dados NoSQL baseado em documento de código aberto que se concentra principalmente na facilidade de uso. É um banco de dados de nó único, funcionando exatamente como outros bancos de dados. Ele geralmente começa com a instância de nó único, mas pode ser atualizado para o cluster sem problemas. Ele permite que o usuário execute um único banco de dados em vários servidores ou VMs. Um cluster do CouchDB oferece alta capacidade e disponibilidade em comparação com o CouchDB de nó único. Ele usa Erlang, uma linguagem de uso geral. Assim como o MongoDB, ele também usa javascript e map/reduce. Ele armazena dados na forma de uma coleção de documentos em vez de tabelas. O CouchDB atualizado não tem bloqueio, o que significa que não há necessidade de bloquear o banco de dados durante as gravações. Os documentos neste banco de dados também fazem uso do protocolo HTTP e JSON, juntamente com a capacidade de anexar arquivos não JSON a eles. Portanto, o CouchDB é compatível com qualquer aplicativo ou software que suporte o formato JSON.

Os recursos comuns do CouchDB

  • Um servidor CouchDB hospeda bancos de dados nomeados, que armazenam documentos com um nome exclusivo no banco de dados, e o CouchDB fornece uma API HTTP RESTful para ler e atualizar (adicionar, editar, excluir) documentos de banco de dados
  • O CouchDB fornece uma GUI baseada em navegador para lidar com os dados, permissões e configurações.
  • O CouchDB fornece a forma mais simples de replicação.
  • O CouchDB facilita a autenticação e o suporte à sessão:para manter a autenticação aberta por meio de um cookie de sessão, como um aplicativo da web.
  • O CouchDB fornece segurança em nível de banco de dados onde as permissões por banco de dados são separadas em leitores e administradores. Os leitores têm permissão para ler e gravar no banco de dados do CouchDB.
  • O CouchDB valida os dados inseridos no banco de dados usando autenticação para verificar se o criador e o ID da sessão de login são os mesmos.
Figura 2:Arquitetura CouchDB

API REST é usada para gravar e consultar os dados . Ele também oferece leitura, adição, edição e exclusão de documentos. Ele usa o modelo ACID em vez de BASE pela implementação MVCC. Assim como o MongoDB suporta a replicação de dispositivos quando estão offline. Ele usa um modelo de replicação especial chamado Consistência Eventual. O CouchDB é altamente confiável em termos de dados. Bancos de dados de nó único usam uma estrutura de dados resistente a falhas somente de anexo, e um banco de dados multimodo ou cluster pode salvar os dados de forma redundante para que possam ser disponibilizados sempre que o usuário precisar. O CouchDB pode ser dimensionado de grandes clusters como clusters globais para pequenos como dispositivos móveis. A capacidade de rodar em qualquer dispositivo Android ou iOS faz com que o CouchDB se destaque entre outros bancos de dados.

A arquitetura CouchDB é distribuída, que suporta sincronização bidirecional. Ele não requer nenhum esquema, pois faz uso de um id exclusivo. Embora o CouchDB siga o recurso AP (disponibilidade e tolerância à partição) do modelo CAP, para superar a consistência negociada, ele segue o modelo ACID na prática.

Comparações entre CouchDB e MongoDB

Recurso de comparação

CouchDB

MongoDB

Modelo de Dados

Segue o modelo orientado a documentos, e os dados são apresentados no formato JSON.

Segue o modelo orientado a documentos, mas os dados são apresentados no formato BSON.

Interface

O CouchDB usa uma interface baseada em HTTP/REST. É muito intuitivo e muito bem desenhado.

MongoDB usa o protocolo binário e o protocolo personalizado sobre TCP/IP.

Armazenamento de Objetos

No CouchDB, o banco de dados contém documentos.

No MongoDB, o banco de dados contém coleções e a coleção contém documentos.

Velocidade

A velocidade de leitura é crítica para o banco de dados, o MongoDB é mais rápido que o CouchDB

MongoDB fornece velocidades de leitura mais rápidas.

Suporte móvel

O CouchDB pode ser executado em dispositivos Apple iOS e Android, oferecendo suporte para dispositivos móveis.

Nenhum suporte móvel fornecido

Tamanho

O banco de dados pode crescer com o CouchDB; O MongoDB é mais adequado para crescimento rápido quando a estrutura não está claramente definida desde o início.

Se tivermos um banco de dados em rápido crescimento, o MongoDB é a melhor escolha.

Método de consulta

As consultas usam funções de redução de mapa. Embora possa ser uma solução elegante, pode ser mais difícil para pessoas com experiência em SQL tradicional aprenderem.

MongoDB segue Map/Reduce (JavaScript) criando coleção + linguagem de consulta baseada em objeto. Para usuários com conhecimento de SQL, o MongoDB é mais fácil de aprender, pois está mais próximo da sintaxe.

Replicação

O CouchDB suporta replicação mestre-mestre com funções personalizadas de resolução de conflitos.

MongoDB suporta replicação mestre-escravo.

Simultaneidade

Segue o MVCC (Multi-Version Concurrency Control).

Atualize no local.

Preferências

O CouchDB favorece a disponibilidade.

MongoDB favorece a consistência.

Consistência de desempenho

O CouchDB é mais seguro que o MongoDB.

MongoDB, o banco de dados contém coleções e a coleção contém documentos.

Consistência

O CouchDB acaba sendo consistente.

MongoDB é fortemente consistente.

Escrito em

Está escrito em Erlang.

Está escrito em C++.

Análise

Se precisarmos de um banco de dados que funcione em dispositivos móveis, precise de replicação mestre-mestre ou durabilidade de servidor único, o CouchDB é uma ótima opção.

Se estamos procurando o máximo rendimento ou temos um banco de dados em rápido crescimento, o MongoDB é o caminho a seguir.

CouchDB e MongoDB:consultas muito diferentes

CouchDB e MongDB são armazenamentos de dados orientados a documentos que funcionam com documentos JSON, mas quando se trata de consultas, os dois bancos de dados não poderiam ser mais diferentes. O CouchDB requer visualizações predefinidas (que são essencialmente funções JavaScript MapReduce) e o MongoDB suporta consultas dinâmicas (basicamente o que estamos acostumados com consultas SQL ad-hoc RDBMS normais).

Por exemplo, para inserir alguns dados no CouchDB usando o RESTClient do Groovy e emitir um post RESTful conforme abaixo:

import static groovyx.net.http.ContentType.JSON

import groovyx.net.http.RESTClient

 def client = new RESTClient("http://localhost:5498/")

response = client.put(path: "parking_tickets/1280002020",

  contentType: JSON,

  requestContentType:  JSON,

  body: [officer: "Micheal Jordan",

      location: "189 Berkely Road",

      vehicle_plate: "KL5800",

      offense: "Parked in no parking zone",

      date: "2020/02/01"])

Código de amostra de uma função para consultar qualquer documento cuja propriedade oficial seja “Micheal Jordan”:

function(doc) {

  if(doc.officer == "Micheal Jordan"){

emit(null, doc);

  }

}

Quando  emitimos uma solicitação HTTP GET para o nome dessa visualização, podemos esperar pelo menos um documento conforme abaixo:

response = client.get(path: "parking_tickets/_view/by_name/officer_grey",

     contentType: JSON, requestContentType: JSON)

assert response.data.total_rows == 1

response.data.rows.each{

   assert it.value.officer == "Micheal Jordan"

}

MongoDB funciona como estamos acostumados com bancos de dados normais:podemos consultar o que nosso coração desejar em tempo de execução.

Inserindo a mesma instância de uma multa de estacionamento usando o driver Java nativo do MongoDB:

DBCollection coll = db.getCollection("parking_tickets");

BasicDBObject doc = new BasicDBObject();



doc.put("officer", "Micheal Jordan");

doc.put("location", "189 Berkely Road ");

doc.put("vehicle_plate", "KL5800");

//...

coll.insert(doc);

Para consultar qualquer bilhete do MongoDB emitido pelo oficial Micheal Jordan, simplesmente emitindo uma consulta na propriedade do oficial:

BasicDBObject query = new BasicDBObject();

query.put("officer", "Micheal Jordan");

DBCursor cur = coll.find(query);

while (cur.hasNext()) {

   System.out.println(cur.next());

}

Conclusão

Neste blog, comparamos dois bancos de dados NoSQL baseados em documentos - MongoDB e CouchDB. A tabela fornece uma visão geral das principais comparações paramétricas entre esses dois bancos de dados. Como vimos, a prioridade do projeto determinará a seleção do sistema. As principais diferenças incluem o método de replicação e o suporte à plataforma. Além disso, a partir das comparações, fica claro que, se o aplicativo exigir mais eficiência e velocidade, o MongoDB é uma escolha melhor do que o CouchDB. Se o usuário precisar executar seu banco de dados em dispositivos móveis e também precisar de replicação multimestre, o CouchDB é uma escolha óbvia. Além disso, o MongoDB é mais adequado que o CouchDB se o banco de dados estiver crescendo rapidamente. A principal vantagem de usar o CouchDB é que ele é compatível com dispositivos móveis (Android e iOS) em vez do MongoDB. Então, basicamente, diferentes requisitos de aplicativos exigirão diferentes bancos de dados com base em cenários.

Observamos que o MongoDB é um pouco melhor que o CouchDB, pois usa a estrutura de consulta semelhante ao SQL, e o mesmo é mais fácil no primeiro. Além disso, para usar consultas dinâmicas, o MongoDB é uma escolha muito melhor. Em relação à segurança em ambos os bancos de dados, a pesquisa ainda está em andamento, e é difícil dizer qual deles oferece um ambiente melhor e seguro.