MongoDB vs CouchDB – Porque escolhi o MongoDB

maio 14th, 2010 | by alex | cassandra, couchdb, escalabilidade, mongodb, mysql, nosql

mai
14

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.

6 Comments »

Yahoo!, O Grande Case do Hadoop Para Big Data

maio 12th, 2010 | by suissa | bigtable, cassandra, hadoop

mai
12

Hadoop está ganhando cada vez mais mais aceitação comercial. Estamos vendo uma série de sinais de sua crescente popularidade. Conversamos recentemente com um executivo do Yahoo! e ficou bastante claro que a empresa está reconstruindo seu futuro no armazenamento distribuído e em tecnologias de análises de grandes volumes de dados.

É um caminho similar ao que estamos vendo com as grandes redes sociais e fornecedores de computação em nuvem. O Facebook usa o Hadoop para fazer análises sociais mais elaboradas que fortalecem a capacidade de fornecer o alto nível estabelecido de qualidade das suas recomendações sociais. O Windows Azure também está adotando o Hadoop.

Em uma ligação recente do Eric Baldeschwieler, vice-presidente do Hadoop, para o Yahoo!, foi falado que o Hadoop está no núcleo da reconstrução do Yahoo!, sendo indispensável para seu futuro.

Perguntamos para ele por email o que o Hadoop acrescentará para o futuro do Yahoo!.

Aqui está sua declaração preparada:

“A visão do Yahoo! é se tornar o centro da vida das pessoas online fornecendo experiências relevantes na web. Pense no Hadoop como uma camada da fundação sob dois dos mais preciosos empreendimentos do Yahoo!: seus dados de usuários e sua coleção de conteúdo diversificado. Para o Yahoo!, o processamento e análise de dados é a chave para a compreensão da sua enorme audiência global, enriquecendo produtos e conectando os usuários com anunciantes.

Como o Hadoop está cada vez mais se tornando um armazém de dados para o Yahoo!, a empresa espera acelerar o ritmo de inovação em todas as experiências de seus consumidores e anunciantes.”

O Yahoo! começou a usar o Hadoop inicialmente em 2006 como um projeto de ciência para processar e analisar grandes conjuntos de dados. Eles desenvolveram um protótipo em 20 nodes(instâncias). Hoje, o Yahoo! gerencia mais de 25.000 nodes de análise e processamento de dados.

O Yahoo! descobriu que o desenvolvimento de seus produto poderia ser feito em uma fração de tempo com o Hadoop. Eles viram que poderiam jogar máquinas em um projeto para processar cada vez mais rápido e assim rentabilizar mais aceleradamente. O que antes levava 29 dias pode ser feito em menos de um.

Como resultado, o Yahoo! começou a integrar o Hadoop em todas as partes do seu negócio. A empresa esvaziou os dados do departamento de TI e os armazenou em um cluster.

Hoje, o Yahoo! utiliza o Hadoop para determinar a melhor posição da publicidade e para otimização de conteúdo. Por exemplo, a empresa começou a testar a forma como a otimização trabalha na página inicial, servindo conteúdo relevante ao usuário. E funcionou. O Yahoo! viu um aumento de 150% nas métricas de engajamento dos usuários com sua home.

O Hadoop está se tornando o padrão para processamento dados e analytics em redes sociais, em projetos como o genoma, no IBM Big Sheets e vários outros. Alguns vêem isso como prova de que ele ganhou aceitação comercial. E recentemente houve um grande aumento no número de vagas para uso da tecnologia no mercado. Já temos notícias também de algumas empresas usando Hadoop no Brasil. E você, aposta no uso do Hadoop se tornando cada vez mais mainstream?

Quem será o próximo grande player dos projetos relacionados a Big Data? Alguém disse Cassandra?

artigo retirado de: http://readwriteweb.com.br/2010/05/11/yahoo-ve-no-hadoop-a-solucao-de-seus-problemas/

2 Comments »

Como instalar Cassandra no Windows

maio 7th, 2010 | by suissa | cassandra, escalabilidade, java, nosql

mai
07

Hoje de manhã me deparei com a facilidade de instalar o Cassandra no Windows então vamos começar baixando a última JDK(Java SE Development Kit) e vai precisar do Cassandra, lógico,http://www.apache.org/dyn/closer.cgi?path=/cassandra/0.6.1/apache-cassandra-0.6.1-bin.tar.gz

  1. Extraia o Cassandra para uma pasta a sua escolha. (Eu usei c:\cassandra)
  2. Defina as seguintes variáveis de ambiente(Painel de Controle > Sistema > Avançado > Variáveis de Sistema)
    1. JAVA_HOME (para o diretório onde você instalou o JRE, este não deve ser o diretório bin. Meu exemplo: C:\Arquivos de programas\Java\jdk1.6.0_20)
    2. CASSANDRA_HOME (para o diretório que você extraiu os arquivos na etapa 1 – c:\cassandra)

Modifique o arquivo de configuração Cassandra como você gosta e não se esqueça de atualizar as localizações dos diretórios de um UNIX como caminho para algo em seu diretório do Windows (no meu exemplo o arquivo de configuração está localizado em c:\cassandra\conf\storage-conf.xml

<CommitLogDirectory>C:/cassandra/data/commitlog</CommitLogDirectory>
<DataFileDirectories>
<DataFileDirectory>C:/cassandra/data/data</DataFileDirectory>
</DataFileDirectories>

ATENÇÃO

Essas linhas não existem no arquivo padrão, então pode colá-las sem problema. Eu coloquei mais para o final do arquivo.

<CalloutLocation>C:/cassandra/data/callouts</CalloutLocation>
<BootstrapFileDirectory>C:/cassandra/data/bootstrap</BootstrapFileDirectory>
<StagingFileDirectory>C:/cassandra/data/staging</StagingFileDirectory>

Abra o cmd e execute o cassandra.bat arquivo (no meu exemplo está localizado em c:\cassandra\ bin\cassandra.bat)

Você pode verificar que Cassandra está funcionando, ao tentar se conectar ao servidor. Para fazer isso, abra um novo cmd e executar o cassandra-cli.bat arquivo a partir do diretório bin.

c:\cassandra\ bin\cassandra.bat
connect localhost/9160

Caso ainda assim não esteja rodando tente excutar o cassandra.bat e o cassandra-cli.bat apartir do C:\cassandra. Ex.:

cd cassandra
bin\cassandra.bat

E pronto nosso Cassandra já está pronto para uso.

1 Comment »

Alguns números do Twitter

maio 6th, 2010 | by suissa | cassandra, escalabilidade, flockdb, hadoop, mysql, twitter

mai
06

Fiquei pasmo coma quantidade de informação

-50 milhões de tweets/dia
-300 mil novas contas/dia
- O Twitter gera 7 TB/dia, 2 PB/ano.
- Solução para logs com Scribe após tentar com syslog-ng.
- Hadoo p/HDFS para armazenamento e processamento distribuído. Pig para analise.
- Projeto próprio para gerenciar grafos sociais. FlockDB.
- Estão migrando de MySQL com memcached para Cassandra. Particionar MySQL leva a muitos pontos de falha, é computacionalmente pesado e demanda mais trabalho.
- Deploy em mais de 1000 maquinas em menos de 1 minuto com BitTorrent (Murder).

Agora me pergunto seria possível sem NOSQL?

1 Comment »