Aposto todas as minhas fichinhas que todos que quiseram estudar NoSQL ficaram na duvida de qual dos dois usar, MongoDB ou CouchDB, mesmo que tenha ido para um cassandra ou qualquer outro NoSQL.
A duvida fica muito maior, porque são dois banco de dados muito semelhantes(orientado a documentos) e bastante usados. Vou colocar aqui o meu relato sobre o MongoDB e o CouchDB.
CouchDB
Quando vi as possibilidades do NoSQL, o primeiro banco de dados que vi foi o CouchDB, fiquei louco para começar a aprender ele, fazer alguns projetos e tudo mais, porem, dei uma olhada muito rápida no site deles, e não vi uma versão pra Windows. Falem o que quiserem, mas muita, muita gente e todo mundo sabe disso, faz tudo no Windows e se não tiver uma versão pra ele, não vão usar, vão continuar com o MySQL.
Demorei meses para voltar para o NoSQL, mas sempre com aquela vontade de realmente aprender um desses novos bancos de dados. Voltando aquele tesão inicial em aprender o NoSQL, vi muitos códigos usando o CouchDB, muita gente usando, muitas coisas pela internet sobre ele. Isso foi um ponto forte pra mim em relação a outros, quando vi que o CouchDB era incubado pela Apache, a balança pesou mais um pouquinho.
Já que o NoSQL é uma técnologia extremamente nova, eu queria pensar a longo prazo, várias vezes fiquei me perguntando as vantagens entre esses bancos de dados. Confesso que quando vi uma pesquisa falando sobre os bancos de dados que as pessoas mais tinham vontade de aprender, apontando o CouchDB como segundo, ele ganhou mais um ponto, em primeiro vinha o cassandra, porem ele ainda não tinha instalação pra windows. O PHP é muito forte, e um dos fatores principais é a grande comunidade e excelente documentação que eles possuem, levei isso em consideração na hora da escolha do NoSQL.
O CouchDB vinha cada vez mais ganhando pontos comigo, mas na mesma pesquisa, o terceiro colocado era o MongoDB, resolvi olhar ele mais de perto, uma vez que queria dar o ponta pé inicial.
MongoDB
Cheguei para olhar o MongoDB só por olhar mesmo, só para ir pro CouchDB com a consciencia limpa. Lia alguma coisa sobre ele, já pensava, mas o CouchDB faz isso também. Mas uma coisa começou a me chamar a atenção, o MongoDB para instalar era só baixar no site e extrair em algum diretório. Isso me chamou a atenção, pois o CouchDB precisava de algumas dependencias para rodar. Logo baixei e instalei, naquele momento comecei a pensar mais sobre ele, um coraçãozinho cresceu.
Rodei uma linha de comando, e está lá, um NoSQL funcioando direitinho. Isso foi tão empolgante, que não achava que pudesse melhorar, olhei no site do MongoDB, e para rodar com o PHP bastava instalar uma DLL. Fui lá e instalei a dll.
A facilidade me encantou, porem ainda pesava a incubadora do CouchDB e todas os outros pontos. Analizando mais um pouco o CouchDB vi que era preciso vários includes para fazer ele funcionar com PHP, menos pontos pra ele, uma vez que o MongoDB se saiu muito bem nessa. Agora fui colocar lado a lado a documentação.
Não precisei olhar muito para saber o escolhido, na imensa documentação do php.net esta uma documentação para o MongoDB. Foi ali que parei de ler o CouchDB e ler sobre o MongoDB. MongoDB funcioando na minha maquina, documentação no php.net, documentação no próprio site do MongoDB era incrivel, não tive mais tempo para o CouchDB.
Benchmark
Felix Geisendörfer fez uma referência em PHP, que foi super-fácil para portar para MongoDB. Seu benchmark diz a respeito da inserção dos dados e não sobre consultas e atualizações. Agora comparando seus resultados para CouchDB com o meu para MongoDB (tempo em ms):
Como você pode ver o MongoDB é um pouco melhor. Aqui estão os números:
N º de inserções
|
Couch Tempo Total (seg)
|
Couch / Doc (ms)
|
Mongo Tempo Total (seg)
|
Mongo / Doc (ms)
|
| 1 |
0,0015
|
1,46
|
0,0005
|
0,5
|
| 2 |
0,0015
|
0,75
|
0,0004
|
0,2096
|
| 3 |
0,0017
|
0,56
|
0,0005
|
0,1604
|
| 4 |
0,0017
|
0,44
|
0,0005
|
0,1190
|
| 5 |
0,0018
|
0,36
|
0,0005
|
0,1060
|
| 6 |
0,0019
|
0,32
|
0,0006
|
0,0931
|
| 7 |
0,0021
|
0,3
|
0,0006
|
0,0847
|
| 8 |
0,0022
|
0,27
|
0,0007
|
0,0789
|
| 9 |
0,0023
|
0,25
|
0,0007
|
0,0734
|
| 10 |
0,0025
|
0,25
|
0,0007
|
0,0721
|
| 50 |
0,007
|
0,14
|
0,0024
|
0,0476
|
| 100 |
0,0136
|
0,14
|
0,0044
|
0,0442
|
| 500 |
0,0687
|
0,14
|
0,0253
|
0,0505
|
| 1000 |
0,1361
|
0,14
|
0,0372
|
0,0372
|
| 2500 |
0,4686
|
0,19
|
0,0278
|
0,0372
|
| 5000 |
0,9165
|
0,18
|
0,0488
|
0,0371
|
| 7500 |
1,5116
|
0,2
|
0,0835
|
0,0098
|
| 10000 |
2,3111
|
0,23
|
0,1065
|
0,0111
|
| 25000 |
6,8684
|
0,27
|
0,2711
|
0,0107
|
| 50000 |
15,8227
|
0,32
|
0,5430
|
0,0109
|
| 100000 |
35,3071
|
0,35
|
1,7697 |
0,0177
|
| 250000 |
104.0009
|
0,42
|
6,4533
|
0,0258
|
| 500000 |
230.6021
|
0,46
|
11,7684
|
0,0235
|
| 750000 |
352.7959
|
0,47
|
17,0473
|
0,0227
|
1000000
|
487.3284
|
0,49
|
18,4376
|
0,0184
|
|
|
|
|
|
Analisando os dados do gráfico e da tabela podemos perceber que o tempo real do MongoDB quase sempre esta uma casa(decimal) abaixo do CouchDB, ou seja, enquanto o CouchDB demora 0,0025 o Mongo DB, para o mesmo conjunto de instruções, demora 0,0007 segundos. E por conseguinte notamos que no final da inserção de 1 milhão de registros o CouchDB demora 487.3284 e o MongoDB 18,4376 segundos ao total. É um tempo considerável a se levar em conta
Conclusão
Posso ter puxado o saco do MongoDB, mas a facilidade de instalação, sem dependencias nem nada, só instalar uma dll no meu php e rodar, foi fator decisivo. No meio do caminho da comparação, o processo foi tão simples que parei por ali. Ao ver a documentação do php.net vi que ali o MongoDB tinha o apoio que eu esperava. Apesar de muitas pessoas estarem entrando no NoSQL indo direto pro CouchDB o MongoDB tem uma comunidade bastante forte, a facilidade dele como um todo é incrivel, isso conta muitos pontos.
Eu escolhi o MongoDB, mas vou estudar o CouchDB e o Cassandra. Eles são tão faceis, que quero aprender nem que seja um pouco de cada um deles, mas estou estudando a fundo o MongoDB.