O Thumbtack publicou hoje uma excelente postagem no blog (link). Ele destaca os resultados preliminares dos testes de desempenho executados com o Couchbase Server, o MongoDB e o DataStax Enterprise (Apache Cassandra). Os resultados finais serão incluídos em um relatório de benchmark. A Thumbtack consultou o Couchbase, o MongoDB e o DataStax para garantir que os bancos de dados fossem configurados para um desempenho ideal com base na carga de trabalho e no hardware. O resultado? O Couchbase Server superou o MongoDB e o DataStax Enterprise tanto em cargas de trabalho de leitura intensiva quanto em cargas de trabalho balanceadas.
O desempenho é um requisito fundamental dos bancos de dados. Ele tem um impacto direto na experiência do usuário e na satisfação do cliente. Um banco de dados de alto desempenho permite que muitos usuários acessem os dados ao mesmo tempo e o façam sem atrasos. Ele tem um impacto direto sobre o custo. Um banco de dados de alto desempenho requer menos nós. Se for implantado na nuvem, exigirá menos instâncias, menos assinaturas e resultará em menos cobranças. Se for implantado em um data center, exigirá menos servidores, menos assinaturas e resultará em menos consumo de energia (link). Reduz os custos.
Execução
- Os testes de desempenho foram executados com o YCSB.
- Os testes de desempenho foram executados em servidores dedicados.
- Os testes de desempenho foram executados em quatro servidores.
- Os testes de desempenho foram executados com duas cargas de trabalho operacionais:
- Intensivo em leitura: 95% de leitura / 5% de gravação
- Balanceado: 50% Leitura / 50% Gravação
- Os testes de desempenho foram executados com várias cargas de clientes.
Dados
- Valores: 20M
- Tamanho do valor: 150 bytes
- Réplicas: 2
- 90% Na memória
Leitura intensiva
Couchbase Server, 6,5x a taxa de transferência do MongoDB.
Couchbase Server, 7,5x a taxa de transferência do DataStax Enterprise.
MongoDB, 2x a latência de leitura do Couchbase Server.
DataStax Enterprise, 3,1x a latência de leitura do Couchbase Server.
* A latência é medida em milissegundos.
** A carga de trabalho do MongoDB foi reduzida de 96 threads de cliente para 64 threads de cliente para diminuir a latência.
Isso não é nenhuma surpresa.
Primeiro, o Couchbase Server apresenta um cache integrado na memória para oferecer o mais alto desempenho de leitura (link). Ele foi projetado para desempenho, e isso requer acesso eficiente aos dados na memória.
Em segundo lugar, o Couchbase Server utiliza clientes inteligentes. Os clientes do Couchbase Server exigem uma solicitação (cliente para nó), enquanto os clientes do MongoDB e do DataStax Enterprise exigem duas solicitações (cliente para nó, nó para nó). Os clientes do Couchbase Server determinam em qual nó os dados estão armazenados e enviam a ele uma solicitação de leitura direta. No entanto, os clientes do MongoDB enviam solicitações de leitura aos roteadores. O roteador determina em qual nó os dados estão armazenados e encaminha a solicitação de leitura (link). Os clientes do DataStax Enterprise enviam solicitações de leitura para nós aleatórios. O nó aleatório determina em qual nó os dados estão armazenados e encaminha a solicitação de leitura (link).
Uma solicitação é mais rápida do que duas solicitações.
Equilibrado
Couchbase Server, 7,6 vezes a taxa de transferência do MongoDB.
Couchbase Server, 2,7 vezes a taxa de transferência do DataStax Enterprise.
MongoDB, 3x a latência de gravação do Couchbase Server.
* A latência é medida em milissegundos.
** A carga de trabalho do MongoDB foi reduzida de 96 threads de cliente para 64 threads de cliente para diminuir a latência.
Isso não é nenhuma surpresa.
Para oferecer o mais alto desempenho de gravação, o Couchbase Server grava primeiro em um cache integrado na memória. Em seguida, ele sincroniza o cache com o dispositivo de armazenamento para garantir a durabilidade (link).
Assim como as operações de leitura, o MongoDB e o DataStax Enterprise exigem duas solicitações para operações de gravação. O Couchbase Server não.
O Couchbase Server dimensiona as gravações para todos os nós em uma implantação, enquanto o MongoDB limita as gravações aos nós primários (link). Como resultado, todos os quatro nós do Couchbase Server executaram operações de gravação. No entanto, somente dois nós do MongoDB executaram operações de gravação. Os dois nós restantes eram nós secundários.
O Couchbase Server implementa o bloqueio em nível de documento. Isso permite que os nós do Couchbase Server executem muitas gravações ao mesmo tempo. No entanto, o MongoDB implementa um único bloqueio por banco de dados (link). Os nós do MongoDB são limitados à execução de uma única gravação por vez por banco de dados.
O DataStax Enterprise manteve solicitações de gravação com baixa latência durante cargas de trabalho com uso intensivo de gravação. No entanto, ele não conseguiu fazer isso para as solicitações de leitura. Como resultado, o aumento da latência de leitura reduziu a taxa de transferência.
Notas
Apesar de estar configurado para uma consistência forte, a taxa de transferência do Couchbase Server foi de 2 a 7 vezes maior do que a do MongoDB e do DataStax Enterprise.
O MongoDB foi configurado para consistência eventual.
Como resultado, o MongoDB executa operações de leitura em ambos os nós primários e nós secundários para aumentar o desempenho. Ele dimensiona as operações de leitura. No entanto, ele sacrifica a consistência ao permitir que as operações de leitura retornem dados inconsistentes. Com a configuração padrão, o MongoDB executa operações de leitura nos nós primários para manter a consistência (link). No entanto, isso diminui o desempenho.
O DataStax Enterprise foi configurado para consistência eventual.
Como resultado, o DataStax Enterprise executa operações de leitura e gravação em um único nó para aumentar o desempenho. No entanto, ele sacrifica a consistência ao permitir que as operações de leitura retornem dados inconsistentes. Quando configurado para consistência forte, o DataStax Enterprise executa operações de leitura e gravação em vários nós (ou seja, quorum) para manter a consistência (link). No entanto, isso diminui o desempenho.
Taxa de transferência, latência e simultaneidade
A Thumbtack esperava que o Couchbase Server superasse a concorrência. Ele foi projetado para ter escalabilidade e desempenho, e essa engenharia se reflete na arquitetura. Ele foi projetado para alta taxa de transferência, baixa latência e simultaneidade.
O rendimento do Couchbase Server é cerca de duas vezes maior que o do MongoDB e do DataStax Enterprise em uma carga de trabalho leve. Isso ocorre porque sua latência é cerca de metade da latência dos outros. Se o teste de desempenho fosse realizado com um único thread cilente, a latência determinaria a taxa de transferência. No entanto, a simultaneidade é um fator decisivo. O Couchbase Server ainda não está saturado. Com o aumento das cargas de trabalho, a taxa de transferência aumentou. O MongoDB e o DataStax Enterprise estão mais ou menos saturados com cargas de trabalho leves. Com o aumento das cargas de trabalho, sua latência aumentou.
* O x-asix é o número total de threads de clientes YCSB.
Resumo
O Couchbase Server não só oferece o mais alto desempenho, como também é fácil de dimensionar (link) e é consistente (link).
O PDF com uma descrição completa do benchmark e os resultados preliminares está disponível.
O relatório completo já está disponível disponível.
Interessante, você poderia compartilhar o código-fonte do teste?
Oi Alonso,
Eles estão usando um fork do YCSB e incluirão os parâmetros de configuração no relatório final de benchmark.
https://github.com/brianfrankc…
Algum teste de velocidade relativa do MapReduce?
Olá, Serge,
Essa é uma ótima pergunta. Embora eu não acredite que o YCSB possa ser usado para fazer benchmark de consultas, suspeito que ele possa ser estendido para isso. Como todos os bancos de dados NoSQL adicionam suporte a consultas mais avançadas, isso pode muito bem acontecer.
https://github.com/brianfrankc…
Não consigo ver nada sobre a versão do banco de dados, detalhes de hardware, caso de otimização para cada banco de dados? Você pode atualizar essas informações?
Você pode encontrar todos os detalhes no relatório final. Também atualizarei esta postagem.
http://info.couchbase.com/2014…
Qual versão dos bancos de dados NoSQL é usada no benchmark.
Por que os registros de confirmação estão desativados no Cassandra?
Esse não é um ambiente de produção típico com logs de confirmação desativados.
Oi Tom,
Couchbase Server 2.5.1 / Cassandra 2.0.9 / MongoDB 2.6.4
O registro de confirmação foi desativado para melhorar o desempenho do Cassandra.
[...] Veja os resultados aqui. [...]