É amplamente mencionado que o Redis é "Blazing Fast" e o mongoDB também é rápido. Mas, estou tendo problemas para encontrar números reais comparando os resultados dos dois. Dadas configurações, recursos e operações semelhantes (e talvez mostrando como o fator muda com diferentes configurações e operações), etc., o Redis é 10x mais rápido ?, 2x mais rápido?, 5x mais rápido?
Estou falando apenas de desempenho. Entendo que o mongoDB é uma ferramenta diferente e possui um conjunto de recursos mais rico. Este não é o debate "O mongoDB é melhor que o Redis"? Estou perguntando, por qual margem o Redis supera o mongoDB?
Neste ponto, mesmo os benchmarks baratos são melhores do que nenhum benchmark.
mongodb
benchmarking
redis
Homer6
fonte
fonte
Respostas:
Resultados aproximados da seguinte referência: gravação de 2x, leitura de 3x .
Aqui está uma referência simples em python, que você pode adaptar aos seus propósitos, eu estava vendo como cada um executaria simplesmente configurando / recuperando valores:
Resultados para com mongodb 1.8.1 e redis 2.2.5 e o mais recente pymongo / redis-py:
Leve os resultados com um grão de sal, é claro! Se você estiver programando em outro idioma, usando outros clientes / implementações diferentes, etc., seus resultados variarão rapidamente. Sem mencionar que o seu uso será completamente diferente! Sua melhor aposta é compará-los você mesmo, exatamente da maneira que você pretende usá-los. Como corolário, você provavelmente descobrirá a melhor maneira de fazer uso de cada um. Sempre referência para si mesmo!
fonte
Verifique este post sobre a análise de desempenho de inserção de Redis e MongoDB:
fonte
Benchmark bom e simples
Tentei recalcular os resultados novamente usando as versões atuais de redis (2.6.16) e mongo (2.4.8) e aqui está o resultado
Além disso, este post compara os dois, mas usando o node.js. Ele mostra o efeito do aumento do número de entradas no banco de dados junto com o tempo.
fonte
Os números serão difíceis de encontrar, pois os dois não estão exatamente no mesmo espaço. A resposta geral é que o Redis é 10 a 30% mais rápido quando o conjunto de dados se encaixa na memória de trabalho de uma única máquina. Depois que essa quantidade de dados é excedida, o Redis falha. O Mongo diminuirá a velocidade a uma quantidade que depende do tipo de carga. Para um tipo de carga apenas de inserção, um usuário relatou recentemente uma desaceleração de 6 a 7 ordens de magnitude (10.000 a 100.000 vezes), mas esse relatório também admitiu que havia problemas de configuração e que essa era uma carga de trabalho muito atípica. As cargas pesadas de leitura normal são anedoticamente lentas em cerca de 10X quando alguns dos dados devem ser lidos do disco.
Conclusão: os Redis serão mais rápidos, mas não muito.
fonte
Aqui está um excelente artigo sobre o desempenho da sessão no framework Tornado, com cerca de 1 ano de idade. Ele tem uma comparação entre algumas implementações diferentes, das quais Redis e MongoDB estão incluídos. O gráfico no artigo afirma que o Redis está atrás do MongoDB em cerca de 10% neste caso de uso específico.
O Redis vem com um benchmark integrado que analisará o desempenho da máquina em que você está. Existe uma tonelada de dados brutos no wiki do Benchmark para Redis. Mas talvez você precise procurar um pouco pelo Mongo. Como aqui , aqui e alguns números aleatórios de polimento (mas fornece um ponto de partida para a execução de alguns benchmarks do MongoDB).
Acredito que a melhor solução para esse problema é realizar os testes você mesmo nos tipos de situações que você espera.
fonte
No meu caso, o que tem sido um fator determinante na comparação de desempenho, é o MongoDb WriteConcern usado. Atualmente, a maioria dos drivers mongo define o WriteConcern padrão como ACKNOWLEDGED, o que significa 'gravado na RAM' ( Mongo2.6.3-WriteConcern ); nesse sentido, era muito comparável ao redis para a maioria das operações de gravação.
Mas a realidade depende das necessidades do aplicativo e da configuração do ambiente de produção. Você pode alterar essa preocupação para WriteConcern.JOURNALED (gravado em oplog) ou WriteConcern.FSYNCED (gravado em disco) ou até gravado em conjuntos de réplicas (backups) se for necessário.
Então você pode começar a ver uma diminuição no desempenho. Outros fatores importantes também incluem, quão otimizados são seus padrões de acesso a dados,% de índice faltante (consulte mongostat ) e índices em geral.
fonte
Eu acho que os 2-3X na referência mostrada são enganosos, pois se você também depende do hardware em que é executado - pela minha experiência, quanto mais forte a máquina é, maior a diferença (a favor da Redis) será, provavelmente pelo fato de que o benchmark atinge os limites de memória muito rapidamente.
Quanto à capacidade de memória - isso é parcialmente verdade, já que também existem maneiras de contornar isso, existem produtos (comerciais) que gravam dados Redis em disco e também soluções de cluster (multi-sharded) que superam o tamanho da memória limitação.
fonte