Qué es NoSQL
Por qué apareció una alternativa al modelo relacional, qué ventajas trae el esquema flexible y el reparto de datos entre máquinas, qué es el sharding y qué se paga a cambio.
De dónde sale NoSQL
El modelo relacional lleva medio siglo funcionando bien, así que la pregunta correcta no es qué tiene de malo, sino qué le pidieron que no sabía dar. Se lo pidieron los servicios que crecieron en la primera década de los dos mil: catálogos con millones de artículos, redes sociales, registros de actividad, sistemas donde el dato llega sin parar y no siempre con la misma forma.
NoSQL no significa «sin SQL», sino «no solo SQL»: es un conjunto de bases de datos que renuncian a alguna pieza del modelo relacional (el esquema fijo, las uniones, las transacciones sobre todo el conjunto) a cambio de repartirse entre muchas máquinas y de admitir datos cuya estructura cambia con el tiempo.
La clave está en cómo se crece. Escalar en vertical es poner una máquina más grande: más procesadores, más memoria, más disco. Es lo más cómodo, pero tiene un techo físico y un precio que sube mucho más deprisa que la capacidad. Escalar en horizontal es poner más máquinas iguales y repartir el trabajo entre ellas: no tiene techo, pero obliga a que el sistema sepa vivir partido.
Ahí está el problema del relacional. Sus dos garantías más valiosas, las uniones entre tablas y las transacciones, dan por hecho que todos los datos implicados están al alcance de la misma máquina. En cuanto los repartes, cada unión y cada transacción se convierte en una coordinación por red. Los sistemas NoSQL evitan esa coordinación guardando juntos los datos que se consultan juntos, aunque eso obligue a repetirlos.
NoSQL nace para escalar en horizontal. Casi todo lo que gana y todo lo que pierde se deduce de esa decisión.
Para el examen
Qué significa NoSQL: «no solo SQL», no «sin SQL»
Escalado horizontal: añadir máquinas: es el que persigue NoSQL
Escalado vertical: agrandar la máquina; tiene techo físico
Lo que se gana
Las ventajas se agrupan en dos bloques: las que afectan a quien programa y las que afectan a quien opera el sistema.
En desarrollo se gana productividad. El esquema es flexible: no hay que declarar de antemano todas las columnas ni migrar la tabla entera cuando aparece un campo nuevo, así que el modelo de datos puede cambiar al ritmo del producto. Y el ajuste con el código es mejor: un documento se parece a un objeto del lenguaje mucho más de lo que se le parece una fila repartida entre cinco tablas. La otra pieza es la agregación: los datos que se leen juntos se guardan juntos, en una sola unidad, y una lectura no necesita reconstruir nada.
En explotación se gana volumen. Son sistemas pensados para estar altamente distribuidos, para escalar añadiendo nodos y para dar un rendimiento alto en las operaciones sencillas, que son la inmensa mayoría de las que atiende una aplicación real: leer por clave y escribir.
Esquema flexible y agregación son la misma idea vista dos veces: se guarda la unidad de información completa, no repartida.
Para el examen
En desarrollo: esquema flexible y agregación
En explotación: sistemas distribuidos que escalan añadiendo nodos
Rendimiento: alto en operaciones sencillas
Lo que se paga
El primer inconveniente es de garantías: estos sistemas, en general, no aseguran del todo las propiedades ACID de una transacción clásica. Lo habitual es ofrecer consistencia eventual, porque la información está repartida y tarda un intervalo en consolidarse en todas las copias. Ese modelo se resume con las siglas BASE, y se ve en el subtema siguiente.
El segundo es de madurez del ecosistema. Frente a un mundo relacional donde SQL es un estándar y cualquier herramienta habla con cualquier motor, en NoSQL no hay un lenguaje ni una interfaz comunes: cada producto tiene el suyo. Eso significa menos experiencia acumulada, menos compatibilidad entre productos y una dependencia real del proveedor elegido, porque migrar de un motor a otro no es cambiar una cadena de conexión, es reescribir la capa de acceso a datos.
Hay un tercer coste que se deduce del diseño: como los datos se guardan agregados y repetidos, mantener coherentes esas copias es trabajo de la aplicación, y las consultas que nadie previó al modelar salen caras o directamente no salen.
La falta de estándar es el inconveniente que más se olvida y el que más cuesta a largo plazo: en NoSQL el modelo de datos y el producto se eligen a la vez.
Para el examen
Transacciones: muchos productos no garantizan ACID completo
Qué ofrecen a cambio: consistencia eventual, modelo BASE
Estandarización: no hay estándar común: crea dependencia del producto