Primeiro, vamos comparar maçãs com maçãs:Leituras e gravações com o MongoDB são como leituras e gravações únicas por chave primária em uma tabela sem índices não agrupados em um RDBMS.
Então vamos comparar exatamente isso:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html
E acontece que a diferença de velocidade em uma comparação justa de exatamente a mesma operação primitiva não é grande. Na verdade, o MySQL é um pouco mais rápido. Eu diria que são equivalentes.
Por quê? Porque, na verdade, ambos os sistemas estão fazendo coisas semelhantes neste benchmark específico. Retornar uma única linha, pesquisada por chave primária, na verdade não é muito trabalhoso. É uma operação muito rápida. Suspeito que as despesas gerais de comunicação entre processos sejam uma grande parte disso.
Meu palpite é que o código mais ajustado no MySQL supera as sobrecargas um pouco menos sistemáticas do MongoDB (sem bloqueios lógicos e provavelmente algumas outras pequenas coisas).
Isso leva a uma conclusão interessante:Você pode usar o MySQL como um banco de dados de documentos e obter um excelente desempenho dele.
Se o entrevistador dissesse:"Não nos importamos com documentos ou estilos, só precisamos de um banco de dados muito mais rápido, você acha que devemos usar MySQL ou MongoDB?", o que eu responderia?
Eu recomendaria desconsiderar o desempenho por um momento e observar a força relativa dos dois sistemas. Coisas como dimensionamento (para cima) e replicação vêm à mente para o MongoDB. Para o MySQL, há muito mais recursos, como consultas avançadas, modelos de simultaneidade, melhores ferramentas e maturidade e muito mais.
Basicamente, você pode trocar recursos por desempenho. Estão dispostos a fazer isso? Essa é uma escolha que não pode ser feita em geral. Se você optar pelo desempenho a qualquer custo, considere ajustar o MySQL primeiro antes de adicionar outra tecnologia.
Aqui está o que acontece quando um cliente recupera uma única linha/documento por chave primária. Vou anotar as diferenças entre os dois sistemas:
- O cliente cria um comando binário (o mesmo)
- O cliente envia por TCP (o mesmo)
- O servidor analisa o comando (o mesmo)
- O servidor acessa o plano de consulta do cache (somente SQL, não MongoDB, não HandlerSocket)
- O servidor pede ao componente B-Tree para acessar a linha (mesma)
- O servidor usa um bloqueio físico somente leitura no caminho B-Tree que leva à linha (o mesmo)
- O servidor usa um bloqueio lógico na linha (somente SQL, não MongoDB, não HandlerSocket)
- O servidor serializa a linha e a envia por TCP (o mesmo)
- O cliente desserializa (mesmo)
Existem apenas duas etapas adicionais para RDBMS'es típicos baseados em SQL. É por isso que não há realmente uma diferença.