15 de Noviembre, 2009

Not Only SQL

Siempre soy escéptico, o más bien prudente, con las nuevas tecnologías revolucionarias, así que cuando hace unos meses se empezó a hacer ruido con NoSQL, llamándolo movimiento y prometiéndose el mejor invento después del pan de molde, aparqué el tema para más tarde como hago con cualquier nuevo buzzword que nos intentan vender. Si es importante, ya me volveré a topar con él (es una forma de gestionar la infoxicación, como otra cualquiera :P).

En los últimos meses he estado involucrado en un proyecto SaaS (Software as a Service), y me intrigan las consecuencias que puede tener este modelo de software para el Software Libre (interesante al respecto la Franklin Street Statement on Freedom and Network Services), lo que me ha llevado al cloud computing (es que ahora todo son buzzwords), y a toparme de nuevo con NoSQL.

Resumiendo (mucho) se trata de almacenamientos de datos no relacionales (más complicado de lo que parece, tantos años educándonos sobre modelos relacionales), que gracias a no depender de las restricciones que acaba sufriendo un sistema de gestión de datos relacional, nos pueden dar ciertas características muy deseables cuando necesitamos acceder a muchos datos (y muy rápido).

Esos almacenamientos trabajan, por ejemplo, orientados a documentos o pares clave/valor (sí, como el venerable BerkeleyDB; y recordemos: sin relaciones), y se desprenden en muchos casos de SQL en su API para dar características que resultan muy difíciles de conseguir con un sistema relacional:

  • No tienen un esquema de datos fijo: se puede cambiar el modelo de datos sobre la marcha, dando trabajo a la capa de negocio.
  • No existen agregaciones de forma implícita: no hay relaciones, así que no se puede hacer un join de forma nativa entre tablas :P.
  • Permiten gran escalabilidad y rendimiento: algunos son distribuidos, otros permiten replicación tal cual, y en general proponen modelos de almacenamiento en disco muy optimizado.
  • En general proporcionan APIs sencillas: ya no es necesaria la complejidad del SQL, porque no hay relaciones.

Estas características abren la puerta a aplicaciones muy interesantes, sobretodo en el campo del cloud computing, y me parece muy importante que hayan soluciones open source disponibles para este tipo de infraestructura (un buen ejemplo sería CouchDB, MongoDB o Apache Jackrabbit).

Pero no todo es tan bueno como parece, empezando por el nombre que han elegido para el movimiento: debería ser algo más como Not Only SQL, ya que estos nuevos sistemas de bases de datos no nos valdrán para solucionar cualquier problema: habrán casos que necesitemos obligatoriamente relaciones.

Además nos encontramos con que el SQL, que más o menos nos sirve para entendernos con cualquier modelo relacional (aunque en la práctica usamos un API, y no SQL directamente, como por ejemplo JDBC en Java, DBI en Perl o PDO en PHP), ya no es el lenguaje franco para hablar con la base de datos, y corremos el riesgo de perder la independencia de la capa de negocio que buscamos en un diseño modelo-vista-controlador.

Pero en general me parece una idea genial, para los casos en los que nos ayude a resolver el problema que tenemos entre manos.

Por ejemplo, en ln.usebox.net podríamos haber usado un sistema de bases de datos no relacional, ya que empleo un modelo de datos realmente simple sin relaciones (bueno, una URL puede tener un Alias; pero es una relación 1:1 como máximo); así que podría estar usando ya mismo un almacenamiento en la nube (como el SimpleDB de Amazon), lo que hubiera permitido escalar horizontalmente sin que nosotros hubieramos tenido que hacer nada (salvo pagarle a Amazon cuando toque :D).

Anotación por Juan J. Martínez.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.