sql ou não, eis a questão


posted by qmx on 01 September 2010
http://www.flickr.com/photos/timothymorgan/75593157/sizes/s/in/photostream/

Ultimamente tenho visto um grande movimento de tecnologias NoSQL pipocando na comunidade de desenvolvimento. Conversando com o @dcrec1, ele soltou uma frase bem interessante:

“parece que o povo tem medo de ir crescendo sabe, ja querem pegar a arma mais poderosa logo de cara”

Falávamos de como a tecnologia NoSQL virou febre, e tem sido utilizada muitas vezes de forma indiscriminada. Não quero dizer que a tecnologia é ruim (longe disso, sou fã de NoSQL, que inclusive pode ser uma das abordagens para solucionar problemas de escalabilidade).

Antes de adotar alguma solução NoSQL, vale a pena refletir sobre alguns pontos interessantes: (antes de mais nada, isso é uma reflexão, YMMV, IMO, então não corte os pulsos, etc)

1. Conheça seu problema

Não adianta você tentar usar um banco NoSQL se a sua aplicação precisa de um monte de relatórios de projeção de dados; um banco relacional vai tornar a tarefa bem mais agradável (e rápida, talvez)

2. Conheça a tecnologia

Não adianta você tentar usar um banco baseado em java se você nunca sequer brincou com código java. Não que você vá ter que mexer no código, mas normalmente cada linguagem tem seu ambiente e jeitão de executar tarefas; (o mesmo vale pra erlang, python, etc) Esse conhecimento pode vir a fazer falta em um momento de crise! (a regra perde sentido caso você possua um programador 7 por perto).

3. Conheça o seu ambiente

Um grande risco em projetos greenfield com soluções NoSQL é a falta de cultura em torno das novas ferramentas. Você sabe responder estas questões de bate-pronto? (Sim, eu sei, RTFM, mas pense “na hora da dor de barriga”….)

  • O que você faz quando o banco cair?
  • Como é o processo de backup?
  • Como monitorar?
  • Existe consolidação das bases de dados?

Essas perguntas, por mais inocentes que pareçam, podem ser respondidas com facilidade no caso de bancos SQL tradicionais, que possuem toda uma cultura em torno dos procedimentos de operação e manutenção.

E agora?

Por fim, mesmo que sua resposta tenha sido negativa à essas questões, ainda assim pode ser que um banco de dados não relacional seja adequado para atender perfeitamente as suas necessidades!

Se você tem testes e um domínio de objetos rico, fica muito mais fácil evoluir a “camada” de persistência da sua aplicação. Será que vale a pena adiar a implantação do banco NoSQL da moda (que de fato simplifica e muito a vida do desenvolvedor) e continuar com o bom e velho MySQL | Postgres | XptoSQL?

Os bancos SQL estão de fato com os dias contados?

Eu acho que não! A melhor ferramenta é aquela que você domina, não é?

Continuo acreditando fortemente no uso complementar de ambas tecnologias.

E você?