Banco de Dados, redes sociais

Redes Sociais e os Bancos de Dados Relacionais

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).

Escalabilidade Horizontal

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.

Universo de problemas

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

1 Comentário

Registre sua opinião

Adicione seu comentário abaixo, ou trackback a partir de seu próprio site.

Acompanhar via RSS

Seja simpático. Mantenha-o limpo. Permaneça no tópico. Sem spam.

Você pode usar estas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

*Campos Obrigatórios