Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs comparação Neo4j


Enquanto bancos de dados SQL são ferramentas incrivelmente úteis, o seu monopólio de 15 anos está chegando ao fim. E foi apenas o tempo: Eu não posso nem contar as coisas que foram forçadas a bancos de dados relacionais, mas nunca realmente equipados.

Mas as diferenças entre bancos de dados NoSQL são muito maiores do que alguma vez foi entre um banco de dados SQL e outra. Isto significa que é uma responsabilidade maior sobre os arquitetos de software para escolher o mais adequado para um projeto logo no início.



A esta luz, aqui é uma comparação de Cassandra, MongoDB, CouchDB, Redis, Riak, Membase, Neo4j e HBase:

MongoDB

Escrito em: C + +
Principal ponto: retém algumas propriedades amigáveis ​​de SQL. (Índice de consultas)
Licença: AGPL (Drivers: Apache)
Protocolo: Custom, binário (BSON)
Master / slave de replicação (failover automático com conjuntos de réplicas)
Sharding embutido
As consultas são expressões javascript
Executar arbitrária javascript funções do lado do servidor
Melhor atualização no local, que CouchDB
Usa arquivos de memória mapeada para armazenamento de dados
Desempenho durante as características
Journaling (com - revista) é mais ligado
Em sistemas de 32 bits, limitado a ~ 2.5Gb
Um banco de dados vazio ocupa 192MB
GridFS para armazenar grande de dados de metadados + (na verdade, não um FS)
Tem indexação geoespacial.

Melhor usado: Se você precisa de consultas dinâmicas. Se você preferir definir índices, não mapear / reduzir funções. Se você precisa de um bom desempenho em uma DB grande. Se você quisesse CouchDB, mas seus dados muda muito, enchendo discos.


Por exemplo: Para a maioria das coisas que você faria com o MySQL ou PostgreSQL, mas tendo colunas predefinidas realmente puxa para trás.


Riak (V1.0)

Escrito em: Erlang & C, alguns Javascript
Principal ponto: tolerância a falhas
Licença: Apache
Protocolo: HTTP REST / ou binário personalizado
Tunable trade-offs para a distribuição e replicação (N, R, W)
Ganchos de pré e pós-commit em JavaScript ou Erlang, para validação e segurança.
Mapa / redução em JavaScript ou Erlang
Links & caminhada Link: usá-lo como um banco de dados gráfico
Índices secundários, mas apenas um de cada vez
Apoio de objetos grandes (Luwak)
Vem em "open source" e "empresa" edições
Pesquisa de texto completo, indexação, consulta com Riak Pesquisa servidor (beta)
No processo de migração do backend de armazenamento de "Bitcask" a Google "LevelDB"
Replicação master replicação multi-site e monitoramento SNMP são comercialmente licenciado


Melhor usado: Se você quer algo Cassandra-like (Dynamo-like), mas nenhuma maneira que você vai lidar com o inchaço e complexidade. Se você precisa de muito bom único site escalabilidade, disponibilidade e tolerância a falhas, mas você está pronto para pagar multi-local de replicação.

Por exemplo: ponto-de-venda de coleta de dados. Sistemas de controle de fábrica. Locais onde até mesmo segundos de tempo de inatividade feridos. Poderia ser usado como um servidor web bem-update-poder.

CouchDB (V1.1.1)

Escrito em: Erlang
Principal ponto: consistência DB, facilidade de uso
Licença: Apache
Protocolo: HTTP REST /
Replicação bidirecional (!),
contínua ou ad-hoc,
com detecção de conflitos,
assim, a replicação master-master. (!)
MVCC - operações de gravação não bloquear lê
Versões anteriores de documentos estão disponíveis
Crash-somente o projeto (de confiança)
Necessita de compactação de tempos a tempos
Exibições: mapa embutido / reduzir
Vistas de formatação: listas e shows
Do lado do servidor de validação documento possível
Autenticação possível
Atualizações em tempo real através de _changes (!)
Manipulação de apego
assim, CouchApps (apps autônomos JS)
biblioteca jQuery incluído
Melhor usado: Para acumular, ocasionalmente, alteração de dados, em que pré-definidos consultas estão a ser executado. Locais onde a versão é importante.

Por exemplo: CRM, sistemas CMS. Master-master replicação é uma característica muito interessante, permitindo fácil multi-site implantações.

Redis (V2.4)

Escrito em: C / C + +
Ponto principal: rápido Blazing
Licença: BSD
Protocolo: Telnet como
Disk-apoiada na memória de banco de dados,
Atualmente sem disco-swap (VM ​​e Diskstore foram abandonados)
Mestre-escravo de replicação
Valores simples ou tabelas de hash por chaves,
mas operações complexas como ZREVRANGEBYSCORE.
INCR & co (bom para limitação de taxa ou estatísticas)
Tem conjuntos (também união / dif / inter)
Tem listas (também uma fila; pop bloqueio)
Tem hashes (objetos de vários campos)
Conjuntos classificados (tabela de pontuação, bom para consultas de intervalo)
Redis possui operações
Os valores podem ser definidas para expirar (como em um cache)
Pub / Sub permite que uma implementar mensagens

Melhor usado: Para rápida mudança de dados com um banco de dados de tamanho previsível (deve caber principalmente em memória).

Por exemplo: Os preços das ações. Analytics. Tempo real de coleta de dados. Comunicação em tempo real.

HBase (V0.92.0)

Escrito em: Java
Principal ponto: Bilhões de milhões de linhas X colunas
Licença: Apache
Protocolo: HTTP REST / (também Thrift)
Modelado após BigTable do Google
Usa o Hadoop HDFS como armazenamento
Mapa / reduzir com o Hadoop
Predicado de consulta empurrar para baixo através de varredura do lado do servidor e obter filtros
Otimizações para consultas em tempo real
Um gateway de alta performance Thrift
HTTP suporta XML, protobuf, e binário
Módulos em cascata, colméia, fonte de porco e e pia
Jruby-based (JIRB) shell
Reinício de laminação para alterações de configuração e upgrades menores
Desempenho de acesso aleatório é como MySQL
Um conjunto constituído por vários tipos diferentes de nós

Melhor usado: Hadoop é, provavelmente, ainda é a melhor maneira de executar Mapa / Reduzir empregos em grandes conjuntos de dados. Melhor se você usar a pilha Hadoop / HDFS já.

Por exemplo: Analisando dados de registro.

Neo4j (V1.5M02)

Escrito em: Java
Principal ponto: banco de dados Gráfico - dados conectados
Licença: GPL, alguns recursos AGPL / comercial
Protocolo: HTTP REST / (ou incorporação em Java)
Autônomo, ou embutido em aplicações Java
Conformidade total com ACID (incluindo dados duráveis)
Ambos os nós e os relacionamentos podem ter metadados
Linguagem de consulta integrada de correspondência de padrões de base ("Cypher")
Também o "Gremlin" gráfico linguagem travessia pode ser usado
Indexação de nós e relacionamentos
Administrador web agradável auto-suficiente
Caminho encontrar avançado com vários algoritmos
Indexação de chaves e relacionamentos
Optimizado para lê
Possui operações (na API Java)
Script em Groovy
Backup online, monitoramento avançado e alta disponibilidade é AGPL / comercial licenciada

Melhor usado: Para gráfico de estilo, ricos ou complexos, dados interligados. Neo4j é bastante diferente dos outros nesse sentido.

Por exemplo: relações sociais, transportes públicos, mapas de estradas, topologias de rede.

Cassandra

Escrito em: Java
Principal ponto: O Melhor dos BigTable e Dínamo
Licença: Apache
Protocolo: Custom, binário (Thrift)
Tunable trade-offs para a distribuição e replicação (N, R, W)
Consultando por faixa de coluna, de chaves
BigTable-como características: colunas, coluna famílias
Tem índices secundários
Escreve são muito mais rápido do que lê (!)
Mapa / reduzir possível com Apache Hadoop
Todos os nós são semelhantes, em oposição ao Hadoop / HBase

Melhor usado: Quando você escreve mais do que você ler (log). Se todos os componentes do sistema deve ser em Java. ("Ninguém é demitido por escolher coisas Apache.")

Por exemplo: Bancos, setor financeiro (. Embora não necessariamente para transações financeiras, mas essas indústrias são muito maiores do que isso) Escreve são mais rápidos que lê, para um nicho natural é em tempo real, análise de dados.

Membase

Escrito em: Erlang & C
Principal ponto: compatível Memcache, mas com persistência e clustering
Licença: Apache 2.0
Protocolo: memcached extensões, além de
Muito rápido acesso (200k + / s) de dados por chave
Persistência de disco
Todos os nós são idênticos (master-master replicação)
Fornece memcached estilo de baldes em memória cache, também
Escreva de duplicação para reduzir IO
Muito agradável a administração de cluster web GUI
As atualizações de software sem ter o offline DB
Procuração conexão para o pool de conexão e multiplexação (Moxi)


Melhor usado: Qualquer aplicação onde a baixa latência de acesso de dados, suporte a alta concorrência e alta disponibilidade é um requisito.

Por exemplo: baixa latência casos de uso, como segmentação de anúncios ou aplicativos altamente concorrentes web como jogos on-line (por exemplo, Zynga).


Compartilhe no Google Plus

About Tiago Sousa

Desenvolvedor/professor com foco em Java. Bacharel em Sistemas de Informação pela Universidade de Franca (Unifran) e Pós Graduado em DW Java pela Universidade de Araraquara (Uniara). Está no mercado de TI há 12 anos, possui conhecimentos gerais em diversas tecnologias.