CouchDB – Implementação

O CouchDB é feito na plataforma Erlang OTP, uma linguagem de programação funcional, concorrente e uma plataforma de desenvolvimento. Erlang foi desenvolvida para aplicações em tempo real de telecomunicações com ênfase na extrema confiabilidade e disponibilidade.

Na sintaxe e na semântica, Erlang é muito diferente de linguagens de programação convencionais como C ou Java. Erlang usa “processos” leves e passagem de mensagem por concorrência, não tem compartilhamento de estado de thread e todos os dados são imutáveis. A natureza robusta e concorrente do Erlang é ideal para um servidor de banco de dados.

O CouchDB é projetado para concorrência livre de locks, no modelo conceitual e na implementação atual do Erlang. Reduzindo gargalos e evitando locks mantém o sistema inteiro funcionando previsivelmente sobre cargas pesadas. O CouchDB pode acomodar muitas mudanças de replicação de clientes, abrir e atualizar documentos, consultar views cujos índices estão sendo simultaneamente sendo atualizados por outros clientes, sem precisar de locks.

Para alta disponibilidade e mais usuários concorrentes, o Couchdb é projetado para um cluster “shared nothing”. Em um cluster “shared nothing”, cada máquina é independente e replica dados com seus companheiros de cluster, deixando falhas individuas de servidores com zero de downtime. E porque scans de consistência e consertos não são necessários no restart, se o cluster inteiro falhar – devido a uma queda de energia no datacenter, por exemplo – todo o sistema distribuído do CouchDB volta a ficar disponível depois de um restart.

O CouchDB é construído desde o início com uma visão consistente de um sistema distribuído de banco de dados orientado a documento. Ao contrário de tentativas pesadas em construir recursos distribuídos no topo da mesma herança de modelos e base de dados, ele é o resultado de um projeto, engenharia e integração cuidadosos. O documento, view, segurança e modelos de replicação, a proposta especial da linguagem de query, o layout robusto e eficiente de disco e a natureza concorrente e real da plataforma Erlang são cuidadosamente integrados para um sistema real e eficiente.

Essa é uma tradução adaptada:
http://couchdb.apache.org/docs/overview.html

MongoDB

No post que eu falo que conheci o conceito de NoSQL e fiz uma pequena tradução sobre o CouchDB eu disse que em breve falaria sobre o MongoDb.

Assim como o Couch o Mongo é um banco de dados orientado a documentos, é open source, também tem como propósito a escalabilidade e é desenvolvido em C++.
Os documentos são armazenados com a simplicidade de esquemas de dados JSON-like, mais precisamente BSON (Binary JSON). Assim como o JSON, suporta a incorporação de objetos e arrays dentro de outros objetos e arrays.
As consultas também são bem simples:

db.clientes.find()

em SQL seria

SELECT * FROM clientes

Suporta Map/Reduce, provê algumas funcionalidades para buscas full text e tem muitas outras vantagens.

Com certeza os bancos orientados a documentos mais falados no momento são o MongoDB e o CouchDB. Não arrisco um papilte em dizer qual é melhor, particularmente eu gosto bastante do CouchDB. Notei que o MongoDB está em uma fase de desenvolvimento mais evoluída que o CouchDB, porém acho o Couch um pouco mais simples, até mesmo de instalar.
Como referência aqui no Brasil, temos o pessoal da Improve It utilizando o Couch e o pessoal do time de Cloud Computing da Locaweb utilizando o Mongo.
E você prefere qual? Por que?