Fala pessoal,
Vou aproveitar o post sobre redes sociais feito pelo Pedro para dar continuidade ao assunto.
Neste post vou falar um pouco sobre problemas de escalabilidade (horizontal) dos sistema gerenciadores de bancos de dados, focando em redes sociais que crescem demasiadamente, porém, o que está aqui também vale para os demais sistemas que possuem grandes(monstruosos) volumes de dados.
É comum, ao iniciarmos um projeto de software, a escolha de qual sistema de banco de dados utilizar. É também comum nos limitarmos às opções de bancos de dados relacionais mais consolidadas do mercado, como MySql, Oracle, Postgres, DB2 e MS SQL Server.
Entretanto, para iniciar um projeto como uma rede social, onde se pretende atingir milhares ou milhões de usuários, realizar uma escolha deste tipo sem estudar as tecnologias disponíveis pode se tornar uma dor de cabeça no futuro, pois escalar horizontalmente um banco de dados relacionais pode ser muito custoso ou, até mesmo, inviável para o projeto(ex: licenças de uso).

Imagine o cenário do Orkut, onde temos o relacionamento amigos-em-comum ou o amigos-dos-amigos. Agora tente pensar no conjunto de JOINs de uma consulta SQL em tabelas deste porte para obter os dados. É de ficar com pena dos bancos de dados tradicionais.
Mas como evitar este tipo de problema? Eis que surge o movimento NoSQL (Not Only SQL).
Os bancos de dados NoSQL surgiram com o intuito de resolver os problemas de escalabilidade encontrados nos bancos relacionais, onde a medida que o volume de dados crescia, mais dolorosa e custosa se tornava esta tarefa.
Algumas características dos bancos de dados NoSQL são:
- Schema-less ou schema free: os dados inseridos no banco de dados não precisam obedecer um esquema de tabela e de colunas. O desenvolvedor também não precisa se preocupar em ter que adicionar uma coluna no banco de dados sempre que a aplicação for modificada.
- Distribuídos: podem ser distribuídos em vários servidores
- Não relacionais: as tabelas não possuem relacionamentos (relacionamentos com integridade referencial)
- Horizontalmente escaláveis: permite distribuir os dados em vários servidores com tolerância a falhas.
- Consistência Eventual(não ACID): o sistema de banco de dados garante que se nenhuma atualização for feita no objeto, todos os acessos retornarão o valor que está gravado.
Os mais fanáticos os chamam de “next-generation databases” ou “modern web-scale databases”. Não participo deste nicho, pois acredito que a maioria dos problemas pode ser resolvida com os bancos de dados relacionais com seus recursos ACID e esquemas completos.

Para quem acredita que estas soluções ainda não estão maduras o suficiente, redes sociais como Orkut(Big Table), Facebook(Cassandra), LinkedIn(Valdemort) já utilizam estas soluções, mesmo que de forma híbrida(juntas com os bancos de dados relacionais).
É isso, vou ficando por aqui, espero que esta visão geral sobre NoSQL possa ter contribuído para quem pretende dar inicio ao desenvolvimento de redes sociais, quem tiver mais interesse em se aprofundar no assunto, seguem alguns links de referências:
http://nosql-database.org
http://pt.wikipedia.org/wiki/NoSQL


Muito interessante este Post.
Eu particularmente ainda não tenho confiança de utilizar uma solução 100% “NoSQL”, acho que por enquanto o melhor é fazer uso de tecnologias hibridas. O Postgres tem projeto para implementação de base de dados em NoSQL e acredito que os outros grandes BDs também devam ter. Acho q devemos ir nos acostumando com esta nova “onda” pois com o crescimento de redes sociais e outras tendências, como a web semântica, este tipo de base de dados será requerido.