NoSQL - MongoDB vs CouchDB [fechado]


154

Eu sou um noob completo quando se trata do movimento NoSQL. Eu ouvi muitas coisas sobre o MongoDB e o CouchDB. Eu sei que existem diferenças entre os dois. Qual você recomenda aprender como um primeiro passo no mundo NoSQL?


Como primeiro passo, o mongoDB é melhor porque é mais fácil aprender, mas há alguns problemas. Não existe uma melhor opção para usar um banco de dados noSQL específico, isso depende do que você deve fazer. Confira documentos, valores-chave, gráficos, colunas.
24415 Chris

Respostas:


148

Veja os links a seguir

Atualização : Encontrei uma ótima comparação dos bancos de dados NoSQL .

MongoDB (3.2)

  • Escrito em: C ++
  • Ponto principal: armazenamento de documentos JSON
  • Licença: AGPL (Drivers: Apache)
  • Protocolo: Personalizado, binário (BSON)
  • Replicação mestre / escravo (failover automático com conjuntos de réplicas)
  • Sharding embutido
  • Consultas são expressões javascript
  • Executar funções javascript arbitrárias do lado do servidor
  • Possui indexação e consultas geoespaciais
  • Vários mecanismos de armazenamento com diferentes características de desempenho
  • Desempenho sobre os recursos
  • Validação de documento
  • Diário
  • Estrutura de agregação poderosa
  • Em sistemas de 32 bits, limitado a ~ 2.5Gb
  • Pesquisa de texto integrada
  • GridFS para armazenar big data + metadados (na verdade não é um FS)
  • Data center consciente

Melhor usado : se você precisar de consultas dinâmicas. Se você preferir definir índices, não mapeie / reduza funções. Se você precisar de um bom desempenho em um grande banco de dados. Se você queria o CouchDB, mas seus dados mudam muito, preencha discos.

Por exemplo : Para a maioria das coisas que você faria com MySQL ou PostgreSQL, mas ter colunas predefinidas realmente o impede.

CouchDB (1.2)

  • Escrito em: Erlang
  • Ponto principal: consistência do banco de dados, facilidade de uso
  • Licença: Apache
  • Protocolo: HTTP / REST
  • Replicação bidirecional (!),
  • contínua ou ad-hoc,
  • com detecção de conflitos,
  • portanto, replicação mestre-mestre. (!)
  • MVCC - operações de gravação não bloqueiam leituras
  • Versões anteriores de documentos estão disponíveis
  • Design de falha (confiável)
  • Precisa de compactação de tempos em tempos
  • Visualizações: mapa incorporado / redução
  • Vistas de formatação: listas e shows
  • Possível validação de documento no servidor
  • Autenticação possível
  • Atualizações em tempo real via '_changes' (!)
  • Manuseio de acessórios

Melhor usado : para acumular dados ocasionalmente alterados, nos quais consultas predefinidas devem ser executadas. Locais onde a versão é importante.

Por exemplo : CRM, sistemas CMS. A replicação mestre-mestre é um recurso especialmente interessante, permitindo implantações fáceis em vários sites.


1
Para qualquer pessoa preocupada com a licença de servidor do MongoDB como AGPL, dar uma olhada na política de licenciamento do mongodb pode fornecer algum alívio.
19413 Patrick

@amra Então, quer dizer, se eu salvar os dados e os ler apenas, usar o couchdb é a melhor escolha?
verystrongjoe

@verystrongjoe Depende da complexidade dos dados e das consultas. Você geralmente não pode dizer qual é o melhor.
amra

@amra Ok. Mas .. Se ele vai acumular dados e selecionar os dados e eu tenho que escolher entre mongo e couch, qual é o melhor?
verystrongjoe

CouchApps são "não recomendado" desde ~ 2012: docs.couchdb.com/en/latest/ddocs
Tim Sylvester

123

Se você é oriundo do mundo MySQL, o MongoDB "se sentirá" muito mais natural por causa de seu suporte à linguagem semelhante a consultas.

Eu acho que é o que o torna tão amigável para muitas pessoas.

O CouchDB é fantástico se você deseja utilizar o excelente suporte à replicação master-master com uma configuração de vários nós, possivelmente em diferentes data centers ou algo assim.

A replicação do MongoDB (conjuntos de réplicas) é uma configuração mestre-escravo-escravo-escravo *, você só pode gravar no mestre em um conjunto de réplicas e ler qualquer um deles.

Para uma configuração de site padrão, tudo bem. Ele mapeia muito bem o uso do MySQL.

Mas se você estiver tentando criar um serviço global como uma CDN que precise manter todos os nós globais sincronizados, mesmo que a leitura / gravação para todos eles, algo como a replicação no CouchDB será um grande benefício para você.

Embora o MongoDB tenha uma linguagem de consulta que você possa usar e pareça muito intuitiva, o CouchDB adota uma abordagem de "redução de mapa" e esse conceito de visualizações. Parece estranho no começo, mas quando você pega o jeito, realmente começa a parecer intuitivo.

Aqui está uma rápida visão geral, portanto faz algum sentido:

  • O CouchDB armazena todos os seus dados em uma árvore b
  • Você não pode "consultá-lo" dinamicamente com algo como "SELECT * FROM user WHERE ..."
  • Em vez disso, você define "visões" discretas dos seus dados ... "aqui é uma visão de todos os meus usuários", "aqui é uma visão de todos os usuários com mais de 10 anos" "aqui é uma visão de todos os usuários com mais de 30 anos" e em breve.
  • Essas visualizações são definidas usando a abordagem de redução de mapa e são definidas como funções JavaScript.
  • Quando você define uma visualização, o banco de dados começa a alimentar todos os documentos do banco de dados aos quais você atribuiu a visualização, registrando os resultados de suas funções como o "índice" desses dados.
  • Existem algumas consultas básicas que você pode fazer nas visualizações, como solicitar uma chave (ID) específica ou um intervalo de IDs, independentemente do que sua função de mapa / redução faça.
  • Leia estes slides , é o melhor esclarecimento de mapa / redução no sofá que eu já vi.

Portanto, essas duas fontes usam documentos JSON, mas o CouchDB segue mais essa abordagem "todo servidor é mestre e pode sincronizar com o mundo", o que é fantástico se você precisar, enquanto o MongoDB é realmente o MySQL do mundo NoSQL.

Portanto, se isso soa mais como o que você precisa / deseja, faça isso.

Pequenas diferenças, como o protocolo binário do Mongo e a interface RESTful do CouchDB, são todos pequenos detalhes.

Se você deseja velocidade bruta e muita segurança na segurança dos dados, pode fazer com que o Mongo execute mais rápido que o CouchDB, pois ele pode operar com memória insuficiente e não comprometer coisas no disco, exceto por intervalos esparsos.

Você pode fazer o mesmo com o Couch, mas o protocolo de comunicação baseado em HTTP será 2-4x mais lento que a comunicação binária bruta com o Mongo nesta "velocidade sobre tudo!" cenário.

Lembre-se de que a velocidade insana louca é inútil se uma pane no servidor ou falha no disco corromper e colocar seu banco de dados no esquecimento, para que o ponto de dados não seja tão incrível quanto possa parecer (a menos que você esteja realizando sistemas de negociação em tempo real no Wall Street, nesse caso, veja Redis).

Espero que tudo ajude!


"O MongoDB é realmente o MySQL do mundo NoSQL" - não sei se as coisas mudaram, mas este artigo de 2014 discorda: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yrldırım

Embora, vagamente em espírito, acho que o comentário ainda funcione, você está certo, MUITO mudou na última meia década e meu comentário deve ser facilmente descartado.
Riyad Kalla


1

Atualmente, existem muito mais bancos de dados NoSQL no mercado do que nunca. Sugiro que dê uma olhada no Quadrante Mágico do Gartner se você estiver procurando por um banco de dados que também seja ótimo para aplicativos corporativos baseados em suporte, expansibilidade, gerenciamento e custo.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Gostaria de sugerir o Couchbase a qualquer um que ainda não o tenha experimentado, mas não com base na versão mostrada no relatório (2.5.1), porque há quase duas revisões atrás do CB Server hoje, aproximando-se do lançamento do 4.0 no 2S15 .

http://www.couchbase.com/coming-in-couchbase-server-4-0

A outra parte do Couchbase como fornecedor / produto é que ele é um tipo de banco de dados multiuso. Ele pode atuar como um armazenamento K / V puro, banco de dados orientado a documentos com escala multidimensional, Memcached, além de cache com persistência e suporta SQL compatível com ANSI 92 com junções automáticas, replicação para clusters de DR com o pressionar de um botão e ainda possui um componente móvel embutido no ecossistema.

Se nada mais, vale a pena conferir os últimos benchmarks:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

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.