Obtenga soluciones prácticas a problemas comunes: O'Reilly JavaScript Cookbook
Visión general
Para ayudarle a entender mejor NoSQL, esta página cubre:
- ¿Qué es NoSQL y para qué sirve una base de datos NoSQL?
- ¿Por qué utilizar NoSQL?
- ¿Cómo funciona NoSQL?
- Conclusión
Las bases de datos NoSQL almacenan los datos en documentos en lugar de en tablas relacionales. En consecuencia, las clasificamos como "no sólo SQL" y las subdividimos por una variedad de modelos de datos flexibles. Entre los tipos de bases de datos NoSQL se incluyen las bases de datos de documentos puros, los almacenes clave-valor, las bases de datos de columnas anchas y las bases de datos de grafos. Las bases de datos NoSQL se construyen desde cero para almacenar y procesar grandes cantidades de datos a escala y dar soporte a un número creciente de empresas modernas.
¿Qué es NoSQL y qué es una base de datos NoSQL?
Base de datos NoSQL almacena la información en documentos JSON en lugar de las columnas y filas de las bases de datos relacionales. Para que quede claro, NoSQL significa "no sólo SQL" en lugar de "no SQL" en absoluto. Esto significa que una base de datos NoSQL JSON puede almacenar y recuperar datos utilizando literalmente "no SQL". O puede combinar la flexibilidad de JSON con la potencia de SQL para obtener lo mejor de ambos mundos. En consecuencia, las bases de datos NoSQL se construyen para ser flexibles, escalables y capaces de responder rápidamente a las demandas de gestión de datos de las empresas modernas. A continuación se definen los cuatro tipos de bases de datos NoSQL más populares:
- Bases de datos documentales se construyen principalmente para almacenar información en forma de documentos, incluidos, entre otros, los documentos JSON. Estos sistemas también pueden utilizarse para almacenar documentos XML, por poner un ejemplo de base de datos NoSQL.
- Almacenes clave-valor agrupan los datos asociados en colecciones con registros que se identifican con claves únicas para facilitar su recuperación. Los almacenes clave-valor tienen la estructura justa para reflejar el valor de las bases de datos relacionales (en contraposición a las bases de datos no relacionales) al tiempo que conservan las ventajas de la estructura de las bases de datos NoSQL.
- Bases de datos de columnas anchas utilizan el formato tabular de las bases de datos relacionales, pero permiten una gran variación en la forma de nombrar y formatear los datos en cada fila, incluso en la misma tabla. Al igual que los almacenes clave-valor, las bases de datos de columnas anchas tienen una estructura NoSQL básica, pero conservan una gran flexibilidad.
- Bases de datos gráficas utilizan estructuras gráficas para definir las relaciones entre los puntos de datos almacenados. Las bases de datos de grafos son útiles para identificar patrones en información no estructurada y semiestructurada.
¿Por qué utilizar NoSQL?
La experiencia del cliente se ha convertido rápidamente en el diferenciador competitivo más importante y ha llevado al mundo empresarial a una era de cambios monumentales. Como parte de esta revolución, las empresas están interactuando digitalmente -no sólo con sus clientes, sino también con sus empleados, socios, proveedores e incluso sus productos- a una escala sin precedentes. Esta interacción está impulsada por Internet y otras tecnologías del siglo XXI, y en el centro de la revolución de NoSQL se encuentran las aplicaciones de big data, nube, móviles, redes sociales e IoT de una empresa.
¿En qué se diferencian estas aplicaciones de las aplicaciones empresariales heredadas como ERP, RRHH y contabilidad financiera? Las aplicaciones web, móviles y de IoT actuales comparten una o más (si no todas) de las siguientes características. Necesitan:
- Admite un gran número de usuarios simultáneos (decenas de miles, tal vez millones)
- Ofrecer experiencias con gran capacidad de respuesta a una base de usuarios distribuida por todo el mundo.
- Estar siempre disponible: sin tiempos de inactividad
- Manejar datos semiestructurados y no estructurados
- Adaptarse rápidamente a los requisitos cambiantes con actualizaciones frecuentes y nuevas funciones.
Construir y ejecutar estas aplicaciones masivamente interactivas ha creado un nuevo conjunto de requisitos tecnológicos. La nueva arquitectura tecnológica empresarial NoSQL debe ser mucho más ágil que nunca y requiere un enfoque de la gestión de datos en tiempo real que pueda adaptarse a niveles sin precedentes de escala, velocidad y variabilidad de los datos. Las bases de datos relacionales son incapaces de satisfacer estos nuevos requisitos, por lo que las empresas están recurriendo a tipos de bases de datos NoSQL.
Las empresas de la lista Global 2000 están adoptando rápidamente las bases de datos NoSQL para impulsar sus aplicaciones de misión crítica:
- TescoEl minorista número 1 de Europa utiliza NoSQL para el comercio electrónico, el catálogo de productos y otras aplicaciones.
- Marriott despliega NoSQL para su sistema de reservas que contabiliza $38 mil millones al año
- Gannettel primer editor de periódicos de Estados Unidos, utiliza NoSQL para su sistema de gestión de contenidos, Presto
- GE despliega NoSQL en su plataforma Predix para ayudar a gestionar el Internet Industrial
Cinco tendencias que crean nuevos retos técnicos a los que responden las bases de datos NoSQL
Estas empresas y cientos más como ellas están recurriendo a NoSQL debido a cinco tendencias que presentan retos técnicos demasiado difíciles para la mayoría de las bases de datos relacionales.
Estas empresas y cientos más como ellas están recurriendo a NoSQL debido a cinco tendencias que presentan retos técnicos demasiado difíciles para la mayoría de las bases de datos relacionales.
Tendencias de la economía digital |
Requisitos |
---|---|
1. Cada vez más clientes se conectan a Internet |
- Ampliación a miles o millones de usuarios - Cumplir los requisitos de la experiencia del usuario con un alto rendimiento constante - Disponibilidad 24 horas al día, 7 días a la semana |
2. Internet lo conecta todo |
- Soportar muchas cosas diferentes con distintas estructuras de datos - Apoyo a las actualizaciones de hardware/software, generación de datos diferentes - Soporte de flujos continuos de datos en tiempo real |
3. Los macrodatos crecen |
- Almacenamiento de datos semiestructurados y no estructurados generados por el cliente - Almacenamiento conjunto de diferentes tipos de datos procedentes de distintas fuentes - Almacenamiento de datos generados por miles/millones de clientes/cosas |
4. Las aplicaciones se trasladan a la nube |
- Ampliación bajo demanda para atender a más clientes y almacenar más datos - Aplicaciones operativas a escala mundial: clientes en todo el mundo - Minimizar los costes de infraestructura y acelerar la comercialización |
5. El mundo se ha vuelto móvil |
- Crear aplicaciones "offline first": no requiere conexión a la red - Sincronización de datos móviles con bases de datos remotas en la nube - Soporte de múltiples plataformas móviles con un único backend |
¿Y SQL?
Algunas bases de datos relacionales se denominan bases de datos SQL por su dependencia de SQL (también conocido como "lenguaje de consulta estructurado") para recuperar información relevante. Introducido por primera vez en 1979, SQL es utilizado actualmente por desarrolladores y analistas de datos de todo el mundo para buscar y elaborar informes sobre datos almacenados en sistemas relacionales como Oracle.
Por qué las bases de datos relacionales se quedan cortas
Los SGBD relacionales (sistemas de gestión de bases de datos) nacieron en la era de los mainframes y las aplicaciones empresariales, mucho antes de Internet, la nube, los macrodatos, los dispositivos móviles y las empresas interactivas masivas de hoy en día. Estas bases de datos se diseñaron para ejecutarse en un único servidor: cuanto más grande, mejor. La única forma de aumentar la capacidad de estas bases de datos era actualizar los servidores -procesadores, memoria y almacenamiento- para ampliarlos.
Las bases de datos NoSQL surgieron como consecuencia del crecimiento exponencial de Internet y el auge de las aplicaciones web. Google lanzó el trabajo de investigación de Bigtable en 2006, y Amazon lanzó el documento de investigación Dynamo en 2007. Estas bases de datos se diseñaron para satisfacer una nueva generación de requisitos empresariales:
La necesidad de desarrollarse con agilidada cumplir los requisitos cambiantesy a eliminar la transformación de datos.
Desarrollar con agilidad
Para seguir siendo competitivas en la actual economía digital centrada en la experiencia, las empresas deben innovar, y tienen que hacerlo más rápido que nunca. Y como esta innovación se centra en el desarrollo de aplicaciones web, móviles e IoT modernas, los desarrolladores tienen que ofrecer aplicaciones y servicios más rápido que nunca. Tanto la velocidad como la agilidad son fundamentales porque estas aplicaciones evolucionan mucho más rápido que las aplicaciones heredadas como ERP. Las bases de datos relacionales son un obstáculo importante porque no admiten muy bien el desarrollo ágil debido a su modelo de datos fijo.
Determinación del alcance para requisitos cambiantes
Un principio básico del desarrollo ágil es adaptarse a la evolución de los requisitos de la aplicación: cuando cambian los requisitos, también cambia el modelo de datos. Esto es un problema para las bases de datos relacionales, porque el modelo de datos es fijo y está definido por un esquema estático. Así que, para cambiar el modelo de datos, los desarrolladores tienen que modificar el esquema o, peor aún, solicitar un "cambio de esquema" a los administradores de la base de datos. Esto ralentiza o detiene el desarrollo, no sólo porque es un proceso manual y lento, sino también porque afecta a otras aplicaciones y servicios.
En cambio, un Base de datos NoSQL es totalmente compatible con el desarrollo ágil y no define estáticamente cómo deben modelarse los datos. En cambio, NoSQL deja en manos de las aplicaciones y los servicios, y por tanto de los desarrolladores, cómo deben modelarse los datos. Con NoSQL, el modelo de datos viene definido por el modelo de aplicación. Las aplicaciones y los servicios modelan los datos como objetos.
Eliminar la transformación de datos
Las aplicaciones y los servicios modelan los datos como objetos (p. ej., empleado), los datos multivaluados como colecciones (p. ej., funciones) y los datos relacionados como objetos o colecciones anidados (p. ej., gestor). Sin embargo, las bases de datos relacionales modelan los datos como tablas de filas y columnas, los datos relacionados como filas dentro de tablas diferentes y los datos multivaluados como filas dentro de la misma tabla.
El problema de las bases de datos relacionales es que los datos se leen y escriben desmontando, o "triturando", y volviendo a montar objetos. Esto es el "desajuste de impedancia" objeto-relacional. La solución consiste en transformar los datos mediante marcos de mapeo objeto-relacional, que son ineficaces en el mejor de los casos y problemáticos en el peor. Las bases de datos NoSQL suelen tratar los datos tal y como se presentan.
¿Cómo funciona NoSQL?
¿En qué se diferencia NoSQL? Veámoslo más de cerca. El siguiente tutorial NoSQL ilustra una aplicación utilizada para gestionar currículos. Interactúa con los currículos como un objeto (es decir, el objeto usuario), contiene una matriz para las habilidades y tiene una colección para los puestos. Alternativamente, escribir un currículum en una base de datos relacional requiere que la aplicación "desmenuce" el objeto usuario.
Almacenar este currículum requeriría que la aplicación insertara seis filas en tres tablas, como se ilustra en Figura 3.
Y, para leer este perfil, la aplicación tendría que leer seis filas de tres tablas, como se ilustra en Figura 4.
Por el contrario, en una base de datos orientada a documentos definida como NoSQL, JSON es el formato de facto para el almacenamiento de datos; afortunadamente, también es el estándar de facto para consumir y producir datos para aplicaciones web, móviles e IoT. JSON no sólo elimina el desajuste de impedancia objeto-relacional, sino que también elimina la sobrecarga de los marcos ORM y simplifica el desarrollo de aplicaciones porque los objetos se leen y escriben sin "desmenuzarlos" (es decir, un único objeto puede leerse o escribirse como un único documento), como se ilustra en Gráfico 5.
¿Qué pasa con las consultas y SQL?
Algunos pueden argumentar que es más difícil consultar bases de datos NoSQL, pero esto es un error común. La flexibilidad inherente a las bases de datos NoSQL orientadas a documentos permite manejar datos estructurados y no estructurados por igual, y las nuevas herramientas permiten realizar consultas más rápido que nunca.
Couchbase Server 4.0 introdujo SQL++, un potente lenguaje de consulta que extiende SQL a JSON, permitiendo a los desarrolladores aprovechar tanto la potencia de SQL como la flexibilidad de JSON. No sólo admite las sentencias SELECT / FROM / WHERE estándar, sino también la agregación (GROUP BY), la ordenación (SORT BY), las uniones (LEFT OUTER / INNER), así como la consulta de matrices y colecciones anidadas. Además, el rendimiento de las consultas puede mejorarse con índices compuestos, parciales, de cobertura, etc.
SQL
SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City
FROM AdventureWorks2016.Person.Persona COMO p
INNER JOIN AdventureWorks2016.HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN
(SELECT bea.BusinessEntityID, a.City
FROM AdventureWorks2016.Person.Address AS a
INNER JOIN AdventureWorks2016.Person.BusinessEntityAddress COMO bea
ON a.AddressID = bea.AddressID) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName, p.FirstName;
SQL
SELECT RTRIM(p.Nombre) || ' ' || LTRIM(p.LastName) AS Name, d.City
FROM AdventureWorks2016.Person.Persona COMO p
INNER JOIN AdventureWorks2016.HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN
(SELECT bea.BusinessEntityID, a.City
FROM AdventureWorks2016.Person.Address AS a
INNER JOIN AdventureWorks2016.Person.BusinessEntityAddress COMO bea
ON a.AddressID = bea.AddressID) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName, p.FirstName;
Más información sobre consultas
Tutorial de SQL ¿Qué es SQL++? Ejecute su primera consulta Pruebe gratisOperar a cualquier escala
Las bases de datos que soportan aplicaciones web, móviles y de IoT deben poder funcionar a cualquier escala. Aunque es posible escalar una base de datos relacional como Oracle (utilizando, por ejemplo, Oracle RAC), hacerlo suele ser complejo, caro y no del todo fiable. Con Oracle, por ejemplo, el escalado mediante tecnología RAC requiere numerosos componentes y crea un único punto de fallo que pone en peligro la disponibilidad. En cambio, una base de datos distribuida NoSQL -diseñada con una arquitectura escalable y sin un único punto de fallo- ofrece ventajas operativas convincentes.
Elasticidad para un rendimiento a escala
Las aplicaciones y los servicios tienen que soportar un número cada vez mayor de usuarios y datos: de cientos a miles o millones de usuarios, y de gigabytes a terabytes de datos operativos. Al mismo tiempo, tienen que escalar para mantener el rendimiento, y tienen que hacerlo de forma eficiente.
La base de datos tiene que ser capaz de escalar lecturas, escrituras y almacenamiento.
Esto supone un problema para las bases de datos relacionales, que están limitadas a escalar (es decir, añadir más procesadores, memoria y almacenamiento a un único servidor físico). Como resultado, la capacidad de escalar eficientemente, y bajo demanda, es un reto. Resulta cada vez más caro porque las empresas tienen que comprar servidores cada vez más grandes para dar cabida a más usuarios y más datos. Además, puede provocar tiempos de inactividad si la base de datos tiene que desconectarse para realizar actualizaciones de hardware.
Una base de datos NoSQL distribuida, sin embargo, aprovecha el hardware básico para escalar, es decir, añadir más recursos simplemente añadiendo más servidores. La capacidad de ampliación permite a las empresas escalar de forma más eficiente: a) no desplegando más hardware que el necesario para hacer frente a la carga actual; b) aprovechando el hardware más barato y/o la infraestructura en la nube; y c) escalando bajo demanda y sin tiempo de inactividad.
Además de poder escalarse de forma eficaz y eficiente, las bases de datos NoSQL distribuidas son fáciles de instalar, configurar y escalar. Han sido diseñadas para distribuir lecturas, escrituras y almacenamiento, y para funcionar a cualquier escala, incluida la gestión y supervisión de clústeres grandes y pequeños.
Disponibilidad para una implantación global permanente
A medida que aumentan las relaciones con los clientes en línea a través de aplicaciones web y móviles, la disponibilidad se convierte en una preocupación importante, si no primordial. Estas aplicaciones de misión crítica tienen que estar disponibles 24 horas al día, 7 días a la semana, sin excepciones. Ofrecer disponibilidad 24×7 es un reto para las bases de datos relacionales que se despliegan en un único servidor físico o que dependen de clústeres con almacenamiento compartido. Si se despliega en un único servidor y éste falla, o en un clúster y falla el almacenamiento compartido, la base de datos deja de estar disponible.
A diferencia de la tecnología relacional, una base de datos distribuida NoSQL particiona y distribuye los datos en varias instancias de base de datos sin compartir recursos. Además, los datos pueden replicarse en una o más instancias para una alta disponibilidad (replicación intercluster). Mientras que las bases de datos relacionales como Oracle requieren un software independiente para la replicación (por ejemplo, Oracle Active Data Guard), las bases de datos NoSQL no lo necesitan: está integrada y es automática. Además, la conmutación por error automática garantiza que, si falla un nodo, la base de datos pueda seguir realizando lecturas y escrituras enviando las peticiones a un nodo diferente.
A medida que los compromisos de los clientes se trasladan a Internet, la necesidad de estar disponible en varios países y/o regiones se vuelve crítica. Desplegar una base de datos en varios centros de datos aumenta la disponibilidad y facilita la recuperación en caso de desastre, pero también aumenta el rendimiento, ya que todas las lecturas y escrituras pueden ejecutarse en el centro de datos más cercano, lo que reduce la latencia.
Garantizar la disponibilidad global es difícil para las bases de datos relacionales en los casos en que el requisito de complementos independientes aumenta la complejidad (por ejemplo, Oracle requiere Oracle GoldenGate para mover datos entre bases de datos) - o cuando la replicación entre múltiples centros de datos sólo puede utilizarse para la conmutación por error porque sólo un centro de datos está activo a la vez. Además, cuando se replica entre centros de datos, las aplicaciones creadas sobre bases de datos relacionales pueden experimentar una degradación del rendimiento o encontrarse con que los centros de datos están muy desincronizados.
Una base de datos NoSQL distribuida incluye replicación integrada entre centros de datos, por lo que no se necesita ningún software aparte. Además, algunas incluyen replicación unidireccional y bidireccional que permite despliegues activos-activos completos en múltiples centros de datos, lo que permite desplegar la base de datos en múltiples países y/o regiones y proporcionar acceso local a los datos a las aplicaciones locales y sus usuarios. Esto no sólo mejora el rendimiento, sino que también permite la conmutación por error inmediata a través de enrutadores de hardware: las aplicaciones no tienen que esperar a que la base de datos descubra el fallo y realice su propia conmutación por error.
Conclusión
¿Qué son las bases de datos NoSQL y por qué son importantes ahora? A medida que las empresas cambian a la economía digital -habilitada por la nube, los móviles, los medios sociales y las tecnologías de big data-, los desarrolladores y los equipos de operaciones tienen que crear y mantener aplicaciones web, móviles y de IoT cada vez más rápido y a mayor escala. NoSQL, flexible y de alto rendimiento, es cada vez más la tecnología de bases de datos preferida para impulsar las aplicaciones web, móviles y de IoT de hoy en día.
Cientos de empresas de la lista Global 2000, junto con decenas de miles de pequeñas empresas y startups, han adoptado NoSQL. Para muchos, el uso de NoSQL comenzó con una caché, una prueba de concepto o una pequeña aplicación, luego se amplió a aplicaciones de misión crítica específicas y ahora es la base de todo el desarrollo de aplicaciones.
Con las bases de datos NoSQL, las empresas son más capaces de desarrollar con agilidad y operar a cualquier escala, así como de ofrecer el rendimiento y la disponibilidad necesarios para satisfacer las demandas de las empresas de la economía digital.