Canais iMasters

Banco de Dados

Um olhar sobre alguns bancos de dados NoSQL

Em um artigo anterior, falei sobre o NoSQL e algumas ferramentas para serem usadas com ele. Neste artigo, daremos uma olhada no MongoDB, no Redis e no Riak.

MongoDB

 

O MongoDB combina o melhor dos armazenamentos chave-valor, documentos de bancos de dados, bancos de dados (ou database?) de objeto e sistemas de gerenciamento de bancos de dados relacionais (RDBMS). Isso significa que o MogoDB executa o sharding automaticamente (como com armazenamentos chave-valor), permite documentos de schema dinâmicos baseados em JSON, e oferece uma rica linguagem de query na forma de RDBMS. Além disso, o MongoDB  oferece auto-sharding (o sharding de dados novos e pré-existentes é feito automaticamente) e um recurso de implementação MapReduce.

Dê uma olhada mais de perto no cluster MongoDB, e você verá que ele é feito de vários tipos de servidores:

  • Servidores shard que armazenam dados
  • Servidores de configuração que armazenam a configuração
  • Servidores router que recebem e roteiam as solicitações
  • Uma thread de servidor usando MapReduce

Alguns fatos adicionais sobre MongoDB: é uma ferramenta de armazenagem distribuída orientada a documentos e usa a linguagem de implementação C++. Com o progresso do schema, documentos do tipo JSON são armazenados, e schemas dinâmicos podem ser usados. Entre as companhias que usam o MongoDB encontramos:  Shutterfly, Evite e The New York Times. Impressionante! Uma das coisas bacanas das quais gosto a respeito desse produto é a existência de uma interface web bastante boa, que permite testar o MongoDB em seu browser – mas usando uma shell JavaScript.

Redis

O Redis não é um simples armazenamento chave-valor, porque suporta uma variedade de valores em diferentes estruturas de dados, tais como listas e conjuntos de binary-safe strings, bem como conjuntos ordenados, que contêm uma pontuação de números float. No ano passado, o VMWare se tornou patrocinador do Redis.

Ele possui uma orientação chave-valor, e sua linguagem de implementação é ANSI C. Entretanto, o Redis não é distribuído. Sob seu schema, Redis oferece um armazenamento chave-valor, usando um nome-chave de servidor para armazenar e recuperar valores. Como MongoDB, o Redis tem uma lista impressionante de clientes – incluindo Python, Twisted Python e a nova  linguagem do Google, Go. O Redis é open source, e há uma página muito bacana que oferece um tutorial Redis que permite experimentá-lo diretamente de seu browser usando JavaScript. Descubra-a em http://try.redis-db.com.

Basho Riak

 

 

Riak é um banco de dados híbrido fabricado pela BashoTecnologies, mas é baseado no Amazon Dynamo. Funciona como um banco de dados (tradução de database?) orientado para documentos, e também com um armazenamento chave-valor distribuído. É tolerante a falhas e faz escalas linearmente. É direcionado para uso em aplicativos web. Como o Cassandra, não tem um controlador central, e assim não tem um ponto único de falhas.

O Riak é um armazenamento de chaves/valor plenamente distribuído, e implementa o MapReduce.

O design do Riak inclui três elementos básicos: buckets, chaves e valores. Os dados são organizados em buckets, que são pouco mais do que flat namespaces para agrupar logicamente pares chave/valor. Os buckets podem armazenar os dados diretamente ou através de links para outro bucket. Todos os nós no cluster têm o mesmo papel. O sharding de dados (existentes ou novos) é feito automaticamente entre os nós.

O Riak vem tanto em versão comercial quanto em versão open source. Roda em Unix, mas não em sistemas Windows. Ele é distribuído, um sistema tanto de documento quanto de armazenamento chave-valor, e sua linguagem de implementação é Erland, juntamente como alguma coisa de C e de JavaScript.

O Riak tem uma estrutura simples e não usa tipos de dados específicos. Os valores associados às chaves são objetos. O Riak interage com clientes via JSON sobre a interface HTTP; tem drivers para Erlang, Python, Java, PHP, JavaScript e Ruby; e, finalmente, uma interface de cliente que suporta o Protocol Buffers, do Google. A base de clientes do Riak inclui a Comcast.

Essas informações foram úteis para você? Deixe sua resposta nos comentários.

Texto original disponível em http://blog.monitis.com/index.php/2011/06/06/a-look-at-some-nosql-databases-mongodb-redis-and-basho-riak/


Comente também

5 Comentários

Luis
Luis

Muito bom o artigo eu não conhecia as duas ultimas opções de bancos de dados NoSQL vou estuda-las e mostrar aos meus colegas de trabalho, obrigado pela explicação.

Diego Hellas
Diego Hellas

Muito bom Mikayel.
O MongoDB com certeza é o NoSQL mais completo que temos, mas é bom deixar claro que existe uma licença comercial para o seu uso, mas acho que apenas quando usado em cluster, tem que ler direito lá no site da 10gen.
A estrutura de funcionamento do MongoDB é praticamente a mesma do MySQL Cluster(qual o MongoDB foi baseado), porém apenas com o recurso NoSQL(Com o MySQL Cluster 7.2 temos o banco relacional e NoSQL que funciona através do Memcahed API no mesmo servidor).
Independete no que ele foi baseado ou não ele é muito bom tem ótimos recursos para a execusão de querys.
Tenho três comentários negativos sobre ele;
1 - O suporte da 10gen é uma porcaria, nem querendo pagar eles querem receber, praticamente impossível conseguir contato comercial com eles, isso se torna um ponto muito importante quando quem quer usar o produto é uma empresa grande que precisa que o seu produto fique no ar 24x7.
2 - A queda no desempenho do MongoDB cai MUITO quando ele é ligado a um cluster grande com muitas querys por segundo(eles ainda vão copiar a solução para esse problema do MySQL Cluster :) )
3 - Não tem treinamento oficial aqui no Brasil.
4(informação extra) - o Twitter desistiu de usar ele apos testes de performace e confiabilidade.

Quanto aos outros 2 eu não conheço, mas o Amazon Dynamo parece ser muito bom, estou para fazer testes nele.. mas ainda não consegui tempo. Para testar ele é fácil, basta criar uma conta no AWS(aws.amazon.com).

Um outro banco de dados que vem crescendo muito e eu utilizo ele no meu trabalho é o Couchbase Server(Antigo Membase). Banco muito estável e rápido(o único problema é quando precisamos escalar o cluster, isso da uma dorzinha de cabeça), mas ainda sem muitas opções de execução de querys como o MongoDB, mas com certeza ele é MUITO estável. Mais informações em http://www.couchbase.com/.

E com certeza o melhor produto que surgiu nos últimos tempos se tratando de NoSQL e bancos de dados relacionais foi o MySQL Cluster 7.2, o funcionamento dele está fantástico, muito rápido, estável e com muitas formas de monitoração e muitas formas de aumentar o desempenho. No mesmo servidor e para os mesmos dados podemos ter acesso via Memcached API e trabalhar no formato NoSQL, e também acessar os dados da forma relacional tradicional.
O Twitter usa MySQL Cluster(de uma forma modificada mas usa).
O Facebook usa no seu motor principal o MySQL Cluster(+ de 1000 servidores em cluster)

Abraço

Jean Nascimento
Jean Nascimento

Sobre a queda de desempenho isso aconteceu contigo? Tem o benchmark para podermos analisar? Pois eu acho que esse cluster foi mal configurado, se vc souber utilizar sharding e replicas creio que melhora e muito o desempenho.

Não possui treinamento oficial aqui ainda, porém a Gonow é representante deles na América Latina e aqui temos bons profissionais trabalhando com ele em produção, caso necessite de algo da um grito.

[]s

Diego Hellas
Diego Hellas

Talvez eu ate tenha em algum relatório, estou falando de uma estrutura bem grande mesmo e aconteceu mais de uma vez. Uma rede social dos EUA tb acabou de abortar o MongoDB pelo menos problema, não foi problema de configuração não. É um problema no produto, o que me decepcionou muito pois estava muito empolgado com ele.
Olha quanto ao suporte, quem representa eles não sei.. mas eu trabalho em uma empresa de técnologia multinacional, estou falando de 2 redes sociais e um studio de desenvolvimento de social games. Mesmo com o nosso nome forte que temos não conseguimos sequer uma resposta deles de nada, e foi mais de um contato, ligações telefônicas. Ou ele não conseguem atender essa demanda simplismente eles não são organizados o suficiente para atender uma grande empresa.

Se você tiver algum benchmark ai sobre isso dicaria feliz em olhar para ele. Eu estou falando de cerca de 1T de dados no cluster com no mínimo 100.000 requests por segundo.

Abraço e obrigado pela resposta

Otto
Otto

Muito Interessante, obrigado por dividir conhecimento

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize