Seções 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

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

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 24×7.
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

    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

    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

Muito Interessante, obrigado por dividir conhecimento

Qual a sua opinião?