Desarrollo

SQL o NoSQL, ésa es la cuestión

Hoy me voy a poner más técnico. Tal vez (seguro), muuucho más técnico. Como miembro del equipo de desarrollo de Laycos, me he tenido que enfrentar a muchas decisiones, algunas difíciles y otras no tanto, y hoy quiero hablar de una que fue realmente fácil: usar NoSQL como sistema de bases de datos principal.

NoSQL como sistema de bases de datos principal

Pero antes, un poco de teoría, prometo no profundizar demasiado :-).

Existen, grosso modo, 2 tipos de bases de datos:

  • Las bases de datos SQL o relacionarles (RDBMS), donde destacan productos como PostgreSQL, MySQL, Oracle (etc). Son sistemas basados en tablas en las que se almacena la información y se relaciona unas con otras siguiendo un esquema lógico.
  • Y las bases de datos NoSQL, que por contra, no requieren estructuras estáticas, como las tablas, y no mantienen una integridad referencial, como puede suceder en los RDBMS. En este grupo existen productos como Cassandra, CouchDB, Redis o MongoDB. Éste último usado como sistema principal en Laycos.

Ahora que ya conocemos un poco más de estos sistemas principales de base de datos, la pregunta es:

¿Qué base de datos utilizó para desarrollar Laycos?

Hay que reconocer que las bases de datos NoSQL son sistemas bastante modernos, por lo que inicialmente puede existir cierta desconfianza para trabajar con ellas, pero después de un primer análisis, y conociendo sus ventajas, que luego enumeraré, se torna como la mejor opción.

Pongamos un ejemplo:

Si ya usas Laycos (si no, te invito a probarlo, es totalmente gratis), sabrás que las conversaciones, pilar fundamental de la comunicación entre los miembros de tu organización, empresa o comunidad, están compuestas por una actividad que inicia un tema de conversación en un grupo de una red, y los comentarios, que no son más que las respuestas a dicha actividad

Actividad + Comentarios = Conversación

Tanto las actividades, como los comentarios pueden tener muchos elementos: ficheros, tareas, eventos de calendario, etc. Así como características, como: marcas de “me gusta” por parte de los usuarios, banderas o flags de prioridad.

Ahora, piensa en el esquema relacional que deberíamos montar para mantener esta estructura de datos:

laycos-blog-esquema-relacional-que-deber-amos-montar-para-mantener-esta-estructura-de-datos

Y ahora piensa en:

  1. La sentencia SQL que deberíamos generar para obtener un listado de actividades cuando lleguemos a grandes cantidades de datos
  2. Que un día decides añadir más elementos o características a las actividades o comentarios, cambiando así su esquema de datos
  3. Que la máquina, en la que tienes la base de datos, se empieza a quedar corta de procesador, memoria o disco duro
  4. … mejor dejamos de pensar

Para todo esto necesitaríamos:

  • Sentencias SQL largas y tediosas, poco eficaces y que tardan mucho tiempo en retornar la información pedida
  • Enormes análisis para modificar las estructuras de datos, modificación de sentencias SQL
  • Cambios de máquinas físicas, mejoras de procesador, memoria, más disco duro, es decir, escalado vertical

Ahora piensa -sí, ahora ya puedes volver a pensar 😉 – e imagina que guardamos los datos en sistemas no estructurados, tipo documentos JSON, y además, piensa que dichos documentos entre sí pueden ser diferentes.

Piensa que este sistema, que básicamente añade y recupera datos, se puede ejecutar en máquinas relativamente simples formando un clúster, de tal forma que si queremos más procesamiento, únicamente hay que añadir más de esas máquinas simples, realizando un crecimiento horizontal ¡Qué bonito es pensar ahora!, ¿no?. Pues eso es lo que ofrece una base de datos NoSQL. Eso y mucho más:

  • Basadas en clave-valor, documento JSON, etc.
  • Escalado horizontal, más rápido, más barato. La carga de información se redistribuye por todos los nodos del clúster
  • Alto rendimiento
  • Alta disponibilidad

Es por lo anterior, por lo que** en Laycos hemos apostado por bases de datos NoSQL y en concreto, por MongoDB**, ¿por qué?, eso ya es otra historia que contaré en un futuro no muy lejano 😉