Entendendo MapReduce

Sabemos que ter um bom modelo de banco de dados relacionais é importante, porém com a necessidade de aplicações mais escaláveis nos dias atuais, talvez você precise “desnormalisar” o seu banco de dados. O que adiantaria uma foreign key se você tem tabelas espalhadas em diversos data sources? Por questões de performance, dados podem ser distribuídos em data centers distintos, então como buscar pelo id se você não sabe onde está esse dado? Por isso é importantíssimo que a aplicação controle essa integridade, com um bom design OO, para não depender de constraints e stored procedures do banco de dados.

MapReduce é um modelo de programação, e framework introduzido pelo Google para suportar computações paralelas em grandes coleções de dados em clusters de computadores. Agora MapReduce é considerado um novo modelo computacional distribuído, inspirado pelas funções map e reduce usadas comumente em programação funcional. MapReduce é um “Data-Oriented” que processa dados em duas frases primárias: Map e Reduce. A filosofia por trás do MapReduce é: Diferentemente de data-stores centrais, como um banco de dados, você não pode assumir que todos os dados residem em um lugar central portanto você não pode executar uma query e esperar obter os resultados em uma operação síncrona. Em vez disso, você precisa executar a query em cada fonte de dados simultaneamente. O processo de mapear a requisição do originador para o data source é chamado de ‘Map’, e o processo de agregação do resultado em um resultado consolidado é chamado de ‘Reduce’.

Hoje existem diversas implementações de MapReduce, como : Hadoop, Disco, Skynet, FileMap e Greenplum. Hadoop é a implementação mais famosa implementada em Java como um projeto open source.

Se você quer contribuir nesse projeto, assista esse screencast.

QCon London 2009 – Projetos De Banco de Dados para ver de Perto

Geir Magnusson apresentou sobre  Cloud Data Persistence ou “We’re in a database reneaissance – pay attention” no QCon London 2009. A principal mensagem dessa apresentação foi que limitações físicas da tecnologia de hoje combinada com a complexidade computacional de bancos de dados relacionais convencionais estão nos levando a olhar para espaços novos e excitantes.

Apresentando soluções como Google’s BigTable e Amazon Dynamo , Magnusson diz que banco de dados distribuídos nos permite gerenciar um enorme volume de dados (BigTable é preparado para tabelas petabyte) mas questões de alta disponibilidade, com distribuição através de muitos sistemas, trás alguns requerimentos que geralmente necessitam de uma solução que diverge de um modelo relacional e direciona para modelos de armazenagem de documentos.

Magnusson mencionou alguns projetos interessantes para olhar de perto.

Alternativas Open Source do Google BigTable:

Alternativas Open Source para o Amazon Dynamo:

Outros projetos Open Source interessantes:

  • MongoDB, armazenagem de documento
  • CouchDB, armazenagem de documento JSon
  • MemcachedDB, banco de dados distribuído a armazenagem chave/valor, acessado via api memcached
  • Drizzle, fork do mysql direcionado a cloud
  • Hadoop, sistema de arquivo distribuído, framework M/R
  • LightCloud, banco de dados distribuído a armazenagem chave/valor, baseado no Tokyo Cabinet
  • Scalaris, escalavel, transacional, armazenagem chave/valor distribuído, em Erlang