NoSQL o base de datos No Solo SQL
NoSQL es un enfoque para la administración de bases de datos que puede adaptarse a una amplia variedad de modelos de datos, incluidos los formatos de valor clave, documento, columnas y gráficos. Una base de datos NoSQL generalmente significa que no es relacional, está distribuida, es flexible y escalable. Las características comunes adicionales de la base de datos NoSQL incluyen la falta de un esquema de base de datos, agrupación de datos, soporte de replicación y consistencia eventual, a diferencia de la consistencia de transacción típica ACID (atomicidad, consistencia, aislamiento y durabilidad) de las bases de datos relacionales y SQL. Muchos sistemas de bases de datos NoSQL también son de código abierto.
El término NoSQL originalmente podría tomarse en su palabra, es decir, SQL no se usó como API para acceder a los datos. Sin embargo, la ubicuidad y utilidad de SQL hizo que muchas bases de datos NoSQL agregaran soporte para SQL. Hoy en día se acepta comúnmente que NoSQL significa "No Solo SQL".
¿Cuáles son los tipos de bases de datos NoSQL?
Hay cuatro tipos populares de sistemas de bases de datos NoSQL. Cada uno usa un tipo diferente de modelo de datos, lo que resulta en diferencias significativas entre cada tipo NoSQL.
Bases de datos de documentos. También llamadas almacenes de documentos, estas bases de datos almacenan datos semiestructurados y descripciones de esos datos en formato de documento. Permiten a los desarrolladores crear y actualizar programas sin necesidad de hacer referencia al esquema maestro. El uso de bases de datos de documentos ha aumentado junto con el uso de JavaScript y JavaScript Object Notation (JSON), un formato de intercambio de datos que ha ganado una amplia aceptación entre los desarrolladores de aplicaciones web. Las bases de datos de documentos se utilizan para la gestión de contenido y el manejo de datos de aplicaciones móviles, como plataformas de blogs, análisis web y aplicaciones de comercio electrónico. Couchbase Server, CouchDB, MarkLogic y MongoDB son ejemplos de bases de datos de documentos.
Bases de datos gráficas. Los almacenes de datos de gráficos organizan los datos como nodos, que son similares a las filas en una base de datos relacional, y bordes, que representan conexiones entre nodos. Dado que el sistema de gráficos almacena la relación entre los nodos, puede admitir representaciones más ricas de las relaciones de datos. Además, a diferencia de los modelos relacionales que se basan en esquemas estrictos, el modelo de datos de gráficos puede evolucionar con el tiempo y el uso. Las bases de datos gráficas se aplican en sistemas que deben mapear relaciones, como plataformas de redes sociales, sistemas de reservas o gestión de relaciones con los clientes. Los ejemplos de bases de datos de gráficos incluyen AllegroGraph, IBM Graph y Neo4j.
Tiendas de valores clave. También conocidas como bases de datos de valor-clave, estos sistemas implementan un modelo de datos simple que empareja una clave única con un valor asociado. Debido a que este modelo es simple, se puede utilizar para desarrollar aplicaciones altamente escalables y de alto rendimiento. Las bases de datos de valor clave son ideales para la administración de sesiones y el almacenamiento en caché en aplicaciones web, como las necesarias para administrar los detalles del carrito de compras para compradores en línea o para administrar los detalles de la sesión para juegos multijugador. Las implementaciones difieren en la forma en que están orientadas para trabajar con RAM, unidades de estado sólido o unidades de disco. Algunos ejemplos de bases de datos de valores clave populares incluyen Aerospike, DynamoDB, Redis y Riak.
Almacenes de columna ancha. Estas bases de datos utilizan tablas, columnas y filas conocidas como tablas de bases de datos relacionales, pero los nombres y el formato de las columnas pueden diferir de una fila a otra en una sola tabla. Cada columna también se almacena por separado en el disco. A diferencia del almacenamiento tradicional orientado a filas, un almacenamiento de columnas anchas es óptimo cuando se consultan datos por columnas. Las aplicaciones típicas en las que las tiendas de columnas anchas pueden sobresalir incluyen motores de recomendación, catálogos, detección de fraudes y registro de eventos. Accumulo, Amazon SimpleDB, Cassandra, HBase e Hypertable son ejemplos de tiendas de columnas anchas.
Estas clasificaciones básicas de bases de datos NoSQL son solo guías. Con el tiempo, los proveedores han mezclado y combinado elementos de diferentes familias de bases de datos NoSQL para lograr sistemas más útiles en general. Esa evolución se ve, por ejemplo, en MarkLogic, que agregó un almacén de gráficos y otros elementos a sus bases de datos de documentos originales. Couchbase Server admite enfoques de documentos y valores clave. Cassandra ha combinado elementos clave-valor con un almacén de columnas amplias y una base de datos de gráficos. A veces, los elementos NoSQL se mezclan con elementos SQL, creando una variedad de bases de datos que se conocen como bases de datos multimodelo.
Ventajas de NoSQL
El uso de bases de datos NoSQL tiene varias ventajas, que incluyen:
- Las bases de datos NoSQL simplifican el desarrollo de aplicaciones, especialmente para aplicaciones web interactivas en tiempo real, como las que utilizan una API REST y servicios web.
- Estas bases de datos brindan flexibilidad para los datos que no se han normalizado, lo que requiere un modelo de datos flexible o tiene diferentes propiedades para diferentes entidades de datos.
- Ofrecen escalabilidad para conjuntos de datos más grandes, que son comunes en aplicaciones de análisis e inteligencia artificial (IA).
- Las bases de datos NoSQL son más adecuadas para la nube, dispositivos móviles, redes sociales y requisitos de big data.
- Están diseñadas para casos de uso específicos y son más fáciles de usar que las bases de datos SQL o relacionales de propósito general para ese tipo de aplicaciones.
Desventajas de NoSQL
Las desventajas de usar una base de datos NoSQL incluyen las siguientes:
- Cada base de datos NoSQL tiene su propia sintaxis para consultar y administrar datos. Esto contrasta con SQL, que es la lengua franca para los sistemas de bases de datos relacionales y SQL.
- La falta de un esquema de base de datos rígido y restricciones elimina las salvaguardas de integridad de datos que están integradas en los sistemas de bases de datos relacionales y SQL.
- Se requiere un esquema con algún tipo de estructura para poder utilizar los datos. Con NoSQL, esto debe ser realizado por el desarrollador de la aplicación en lugar del administrador de la base de datos.
- Debido a que la mayoría de las bases de datos NoSQL utilizan el modelo de coherencia eventual, no proporcionan el mismo nivel de coherencia de datos que las bases de datos SQL. En ocasiones, los datos no serán consistentes, lo que significa que no son adecuados para transacciones que requieren integridad inmediata, como transacciones bancarias y en cajeros automáticos.
- Debido a que las bases de datos NoSQL son más nuevas, no existen estándares industriales completos como con las ofertas de DBMS SQL y relacional.
NoSQL vs SQL: ¿Cuál es la diferencia?
En un nivel alto, las bases de datos SQL son de uso general, mientras que las bases de datos NoSQL están diseñadas para casos de uso específicos. Las principales diferencias entre NoSQL y SQL se pueden resumir en las siguientes cinco categorías: API, modelo de datos, requisito de esquema, escalabilidad e integridad de los datos. Cada uno despliega un enfoque diferente a estos aspectos del almacenamiento y recuperación de datos.
API. Para NoSQL, no se requiere SQL como API para los datos en la base de datos, aunque muchas bases de datos NoSQL ofrecen un lenguaje de consulta similar a SQL. Para las bases de datos SQL, SQL es típicamente la única o predominante interfaz para los datos.
Modelo de datos. Con los sistemas de base de datos NoSQL, los datos no se modelan como tablas con filas y columnas fijas, como con un DBMS SQL. En cambio, dependiendo de la base de datos NoSQL, los datos se pueden modelar como documentos JSON, gráficos con nodos y bordes, o pares clave-valor. Las tiendas de columnas anchas utilizan el concepto de tabla y fila, pero las columnas pueden ser dinámicas de una fila a otra dentro de una tabla.
Esquema. El esquema de una base de datos NoSQL es flexible, lo que significa que no hay una estructura fija para los datos, los tipos de datos y las longitudes de los elementos de datos. Los datos se pueden almacenar de forma libre o sin esquema. Este enfoque ofrece a los programadores un mayor grado de flexibilidad, lo que puede facilitar los esfuerzos de desarrollo.
Con SQL, el esquema de las bases de datos es fijo, con tipos de datos rígidos y longitudes para cada columna, y cada fila debe coincidir con el diseño y la estructura de columna definidos. Por ejemplo, si una columna se define como un número entero, solo se pueden almacenar datos enteros en la columna y el DBMS rechaza cualquier intento de hacer lo contrario. Este enfoque ofrece una mejor calidad de datos porque el DBMS hace cumplir las reglas a medida que se agregan los datos.
Escalabilidad. Las bases de datos NoSQL generalmente implementan escalado horizontal, también conocido como scaling out. El escalado horizontal implica agregar más hardware a un sistema, generalmente en forma de nuevos servidores básicos. La partición horizontal que utiliza fragmentación para dividir grandes bases de datos en partes más pequeñas distribuidas en varios servidores se usa con frecuencia en los sistemas NoSQL.
El enfoque de SQL suele ser el escalado vertical, también denominado escalado ascendente. Con el escalado vertical, se agregan recursos adicionales, como una CPU más potente o memoria adicional, para manejar una carga de trabajo adicional o para mejorar el rendimiento.
Integridad de los datos. Las bases de datos NoSQL y SQL utilizan diferentes enfoques para proteger la integridad de los datos a medida que las aplicaciones y los usuarios los crean, leen, actualizan y eliminan.
La mayoría de los sistemas de bases de datos NoSQL administran la integridad de los datos con un enfoque conocido como BASE (Básicamente Disponible, Estado Suave con Consistencia Eventual). Con BASE, los datos pueden ser inconsistentes durante un período de tiempo, pero la replicación de la base de datos eventualmente actualiza todas las copias de los datos para que sean consistentes. Algunas aplicaciones pueden tolerar este tipo de datos inconsistentes, mientras que otras no.
El enfoque utilizado por las bases de datos SQL es el ACID antes mencionado. Cada una de sus cuatro cualidades —atomicidad, consistencia, aislamiento y durabilidad— contribuyen a la capacidad de una transacción para garantizar la integridad de los datos. Con ACID, cada transacción, cuando se ejecuta sola, en un estado de base de datos consistente, se completará y producirá resultados correctos o terminará sin ningún efecto. En cualquier caso, la condición resultante de la base de datos siempre será un estado coherente.
Evolución de NoSQL
Los sistemas de bases de datos relacionales y SQL son omnipresentes porque brindan un buen mecanismo de propósito general para respaldar la mayoría de los requisitos de administración de datos. Están diseñados para ser confiables, precisos y útiles para aplicaciones planificadas y consultas ad hoc. Sin embargo, algunos requisitos SQL y relacionales —por ejemplo, un esquema rígido y un ACID estricto— pueden hacerlos menos adecuados para aplicaciones que requieren datos flexibles y alta velocidad.
Como reacción, surgieron sistemas de bases de datos NoSQL para abordar estas necesidades, muchas de ellas desarrolladas por empresas como Amazon con su DynamoDB, Facebook y su Apache Cassandra, y Google con su base de datos BigTable para abordar sus necesidades específicas. Otro sistema de base de datos NoSQL de influencia temprana es Berkeley DB, desarrollado en la Universidad de California, Berkeley, a partir de la década de 1990, Berkeley DB se describió ampliamente como una base de datos integrada que respaldaba de cerca las necesidades de almacenamiento de aplicaciones específicas. Este software de código abierto proporcionó un almacén de valores clave simple. Berkeley DB fue lanzado comercialmente por Sleepycat Software en 1999. La compañía fue adquirida más tarde por Oracle en 2006. Oracle ha seguido brindando soporte a Berkeley DB de código abierto.
El término NoSQL se puede aplicar a algunas bases de datos anteriores al sistema de gestión de bases de datos relacionales (RDBMS), pero se refiere más comúnmente a las bases de datos creadas a principios de la década de 2000 con el propósito de agrupar bases de datos a gran escala en aplicaciones web y en la nube.