(Apunte) Introducción (NoSQL)
(Apunte) Introducción (NoSQL)
NoSQL
Introducción a NoSQL
Tipos de bases de datos NOSQL - Taxonomía de soluciones
Persistencia Políglota
Fuentes
Página 1 de 19
Visión General NoSQL
Sin lugar a dudas el paradigma que domina en el mundo de las bases de datos es el
modelo o paradigma relacional. Actualmente la mayoría de los sistemas y aplicaciones
utilizan algún RDBMS (libre o comercial). Todos coincidimos en que dichos RDBMS son
muy sólidos, robustos y se han consolidado a lo largo de los años en el mercado, entre
otras cosas, debido a que utilizan un lenguaje estándar de consultas SQL. A pesar de
todas las ventajas conocidas en el paradigma relacional, este también presenta
limitaciones propias de su arquitectura. Es por ello que Amazon y Google desarrollaron
un sistema de almacenamiento basado en el uso de clusters, obligados por sus
necesidades de negocio: Big tables de google y Dynamo de Amazon. Estas soluciones
permitían gestionar y procesar enormes volúmenes de información en sistemas
distribuidos. Dio el origen entonces a la aparición de las bases de datos NoSQL.
El surgimiento de Big Data generó también nuevas necesidades y formas de
procesamiento y almacenamiento de la información. En este nuevo contexto, lo más
frecuente es tratar con datos no estructurados o semiestructurados, en grandes
cantidades (imaginar muy grandes cantidades, como la información que maneja una
red social, o un portal de streaming de video, etc.), en donde el procesamiento rápido es
fundamental, y donde cuestiones tales como la consistencia de los datos deja de ser un
requisito y se puede flexibilizar como así también la cuestión de un esquema fijo.
Estos temas fundamentales en un RDBMS dejan de ser esenciales. El procesamiento
distribuido se convierte ahora en un requisito de primer orden y en consecuencia surgen
términos tales como clusters, alta disponibilidad, replicación de datos, escalamiento
horizontalmente, entre otros….todos éstos temas los desarrollaremos a lo largo del
curso. Si bien es cierto que –de alguna manera– el paradigma relacional puede
adaptarse –en mayor o menor grado- a estos nuevos requisitos, no es la mejor solución
ni fueron pensados para ese propósito. En este escenario es que surgen las bases de
datos NoSQL. Este tipo de base de datos no es homogéneo y es posible encontrar
distintas aproximaciones a los mismos problemas. Las bases de datos NoSQL no han
surgido para reemplazar a las bases de datos relacionales, sino que las complementan.
Dan soluciones efectivas, donde el paradigma relacional ya no podía debido sus
características propias inherentes o resulta muy costoso hacerlo.
Página 2 de 19
NoSQL
Son muchas las aplicaciones web que utilizan algún tipo de bases de datos para
funcionar. Hasta ahora estábamos acostumbrados a utilizar bases de datos SQL
tales como MySQL1, MariaDB2, PostgreSQL3, pero desde hace ya algún tiempo han
aparecido otras que reciben el nombre de NoSQL(Not only SQL – No sólo SQL,
existen otras opciones diferentes a las SQL) y que han llegado con la intención de
complementar a las bases relacionales utilizadas por la mayoría de los usuarios. No
han surgido para reemplazar (a las BD relacionales), sino que surgieron como una
alternativa donde las bases de datos relacionales no podían responder ni adaptarse
debido a las limitaciones propias de su arquitectura.
Teniendo en cuenta la evolución de las páginas Web.
1
https://www.mysql.com/
2
https://mariadb.org/
3
https://www.postgresql.org/
Página 3 de 19
cultural. Poco a poco las de los atractivos para esto aun falta
empresas empezaron a principales para atraer a bastante), y
tomar parte y las primeras usuarios (basta ver los principalmente aprovecha
webs de empresa surgieron, usuarios de facebook la nube para prestar
con diseños muy pobres (no que, hasta facebook, no servicios al usuario y
había herramientas, ni eran usuarios frecuentes eliminar su necesidad de
tecnología, ni conexión de computadoras. disponer de sistemas
suficiente como para hacerlo operativos complejos y
mejor) y contenidos que grandes discos duros
rápidamente quedaban para almacenar su
anticuados al ser complejo información.
actualizarlos.
Se puede decir que la aparición del término NoSQL surge con la llegada de la web 2.0
ya que hasta ese momento sólo subían contenido a la red aquellas empresas que
tenían un portal, pero con la llegada de aplicaciones como Facebook, Twitter, Instagram
o Youtube, cualquier usuario puede subir contenido (casi) ilimitadamente, provocando
así un crecimiento exponencial de los datos (hay un cambio de paradigma). Inclusive
el avance del hardware, procesadores más veloces, multiprocesamiento, redes más
rápidas, contribuyeron al desarrollo de las base de datos NoSQL sumado a que las
bases de datos relacionales no pueden dar la respuesta que se espera a esta nueva
necesidad de negocio.
Por lo tanto referirse a bases de datos NoSQL es hablar de estructuras que nos
permiten almacenar información en aquellas situaciones en las que las bases de datos
relacionales presentan ciertas dificultades y limitaciones debido principalmente a
problemas de escalabilidad y rendimiento, donde se produce el acceso de miles de
usuarios concurrentes con millones de consultas diarias. Además de lo comentado
anteriormente, las bases de datos NoSQL son sistemas de almacenamiento de
información que no cumplen con el esquema entidad–relación.
Los diseñadores de bases de datos recurrieron a los sistemas NoSQL cuando los
Página 4 de 19
RDBMS existentes no satisfacían sus necesidades de negocio.
Las bases de datos NoSQL evolucionaron para abordar las limitaciones de los sistemas
de administración de bases de datos relacionales. Es poco probable que las bases de
datos NoSQL desplacen a las bases de datos relacionales.Los RDBMS desplazaron las
bases de datos de archivos planos, jerárquicas y de red. Es muy probable que los dos se
complementen entre sí y adapten las características entre sí, ya que ambos siguen
siendo aplicados a aplicaciones cada vez más complejas y exigentes.
⇒ Se ejecutan en máquinas con pocos recursos (en relación a los necesarios para
una base de datos relacional - commodities servers): Estos sistemas, a diferencia
de los sistemas basados en SQL, requieren de apenas computación, por lo que
se pueden montar en máquinas de un coste mucho más reducido.
Página 5 de 19
que las bases de datos fueron concebidas para operar en modo single-instance
(una única instancia) y a parte, es más barato procesar muchos datos que están
distribuidos en muchos servidores (conformando un cluster). Se puede
maximizar el uso de las bases de datos NoSQL si se ejecutan en un cluster.
⇒ Algunas no utilizan SQL como lenguaje de consultas, otras sí. Por lo general no
utilizan el esquema relacional ni el lenguaje de consulta SQL.
⇒ No garantizan las propiedades ACID (hay que analizar caso por caso). En
general, proveen consistencia débil (weak consistency), como p.ej. consistencia
eventual,
⇒ Las bases de datos NoSQL no tienen un esquema fijo o rígido. Se dice que las
bases de datos NoSQL son polimórficas, esto es, no existe un esquema
uniforme. Cuando se van a almacenar datos en una base de datos relacional, lo
primero que hay que conocer es su esquema, es decir, que tablas hay, cuáles son
sus columnas, tipos de datos, etc. Las bases de datos NoSQL operan sin
esquema fijo, lo que permite añadir libremente “campos a los registros (filas)” sin
tener que re-definir ni conocer su estructura.
Página 6 de 19
necesita, permitiendo cambiar acorde a las necesidades puntuales del
momento. Y si hay información que ya no es más necesaria, no se requiere
seguir almacenándola, por lo que, se puede dejar de almacenar sin preocuparse
por perder datos, como si se borrasen columnas que ya no se utilizan en el
paradigma relacional. Las bases de datos sin esquemas, cambian el esquema
dentro del código de la aplicación que lo accede. Esto puede ser un problema
si existen múltiples aplicaciones desarrolladas por diferentes personas que
acceden a la misma base de datos.
Algunas de las diferencias más destacables que nos podemos encontrar entre los
sistemas NoSQL y los sistemas SQL están:
⇒ Lenguaje de Consultas: Las bases de datos SQL utilizan lenguaje de consulta
estructurado (SQL) para definir y manipular datos. Por un lado, esto es
extremadamente poderoso: el lenguaje SQL es una de las opciones más
versátiles y ampliamente utilizadas disponibles en el mercado, lo que resulta en
una opción segura e ideal para consultas complejas. Pero por el otro, puede ser
altamente restrictivo. Las bases de datos SQL requieren que use esquemas
predefinidos para determinar la estructura de sus datos antes de trabajar con
ellos.
Página 7 de 19
⇒ Escalabilidad: En casi todas las situaciones, las bases de datos SQL son
escalables verticalmente. Esto significa que podemos mejor las prestaciones de
un servidor de base de datos, agregando más memoria, procesamiento (CPU) o
SSD (discos sólidos).
Las bases de datos NoSQL están diseñadas para escalar horizontalmente con
mucha facilidad y sin límite, es decir podemos agregar más servidores muy
fácilmente en su infraestructura. Las bases de datos relacionales también
pueden escalar horizontalmente pero con muchísimas limitaciones.
⇒ La Estructura: Las bases de datos SQL están basadas en tablas, mientras que
las bases de datos NoSQL están basadas en documentos, pares de clave-valor,
bases de datos de gráficos entre otras. Esto hace que las bases de datos SQL
relacionales sean una mejor opción para aplicaciones que manejan
transacciones, como por ejemplo un sistema de contabilidad, o para sistemas
heredados que se crearon originalmente para una estructura relacional.
Las aplicaciones web que deben ofrecer su servicio a miles o tal vez millones de
usuarios. Una solución de esta naturaleza es imposible de implementar con base de
datos relacionales.
● Escalabilidad
● Costo
● Flexibilidad
4
https://www.amazon.com/Dan-Sullivan/e/B001IXSA1Y/ref=dp_byline_cont_book_1
Página 8 de 19
● Disponibilidad
Escalabilidad
La escalabilidad es la capacidad de satisfacer de manera eficiente las necesidades de
diferentes cargas de trabajo. Por ejemplo, si hay un aumento en el tráfico de un sitio
web, se pueden conectar servidores adicionales para manejar la carga adicional.
Cuando el pico cede y el tráfico vuelve a la normalidad, algunos de esos servidores
adicionales pueden cerrarse o liberarse. Agregar servidores según sea necesario se
llama escalar horizontalmente (scale out).
Decimos también que es más flexible porque la escalabilidad vertical puede requerir la
sustitución de un servidor. Esto implica la migración de los datos por el administrador
de base de datos a un nuevo servidor.
Página 9 de 19
Costo
El costo de las licencias de base de datos es una consideración significativa para
cualquier empresa u organización (y mucho más si esta es una pyme). Los proveedores
de software comercial emplean una variedad de modelos de licenciamiento que incluye
el cobro por el tamaño del servidor que ejecuta el RDBMS (cantidad de cores del
procesador) o el número de usuarios nombrados autorizados para usar el software.
Cada uno de estos modelos presenta desafíos para los usuarios del sistema de base de
datos.
Por ejemplo, las aplicaciones web pueden tener picos de demanda que aumentan el
número de usuarios que utilizan una base de datos en cualquier momento:
¿Deberían los usuarios de RDBMS pagar por la cantidad de usuarios pico o la cantidad de
usuarios promedio? ¿Cómo se deberían adquirir las licencias RDBMS cuando es difícil
saber cuántos usuarios usarán el sistema dentro de seis meses o un año?
Flexibilidad
Los sistemas de administración de bases de datos relacionales son muy flexibles en
cuanto al rango de problemas que nos permite resolver:
Sin embargo, hay otro aspecto de las bases de datos relacionales que las hace mucho
menos flexibles.
Los diseñadores de bases de datos deben saber al inicio de un proyecto todas las
tablas y columnas que serán necesarias para diseñar una aplicación y poder comenzar
con el diseño conceptual. Se debe conocer previamente todo el modelo.
Página 10 de 19
Por ejemplo, todos los empleados tienen que tener nombre y apellido y ID. Si bien,
luego es posible cambiar la estructura de las tablas, la metodología está orientada a
hacer el diseño de la base de datos completo al comienzo del proyecto.
Considere una aplicación de comercio electrónico que utiliza una base de datos
relacional para documentar los atributos de sus productos. Los productos informáticos,
como las computadoras, tendrían atributos como el tipo de CPU, la cantidad de
memoria y el tamaño del disco. Los hornos de microondas tendrían atributos tales
como tamaño y potencia.
Un diseñador de base de datos podría crear tablas separadas para cada tipo de
producto o definir una tabla con tantos atributos de producto diferentes como ella
podría imaginar en el momento en que diseña la base de datos.
Disponibilidad
Muchos de nosotros -en algún momento- tuvimos que esperar a que los sitios web y/o
las aplicaciones web estén disponibles cuando queríamos usarlos ¿Te pasó alguna vez
con el sistema de inscripción de la facultad? Si su sitio favorito de redes sociales o
comercio electrónico no funcionaba cuando intentó usarlo, es probable que comience a
buscar otras opciones, obviamente cuando esto sea posible.
Las bases de datos NoSQL están diseñadas para aprovechar múltiples servidores de
bajo costo. Cuando un servidor falla o se pone fuera de servicio por mantenimiento, los
otros servidores del clúster pueden asumir toda la carga de trabajo.
Los servidores de réplica mantienen copias de los datos del servidor primario en caso
de que falle el servidor primario. Si eso sucede, la copia (la base replicada) puede
Página 11 de 19
asumir la carga de trabajo que el servidor primario había estado procesando.
Esta puede ser una configuración ineficiente porque un servidor se mantiene en reserva
en caso de una falla pero de lo contrario no está ayudando a procesar la carga de
trabajo.
Introducción a NoSQL
Persistencia Políglota
Para entender mejor a que se refiere con este término podríamos definir la palabra
políglota. Su definición es: “alguien que habla o escribe varios idiomas”. Entonces
basado en esa definición pero llevado a base datos, podemos definir persistencia
políglota como un conjunto de aplicaciones que utilizan varias tecnologías básicas
de base de datos que se usan para resolver problemas complejos de
almacenamiento.
Página 12 de 19
NoSQL como alternativa para el manejo de la persistencia de nuestra solución.
5
N. Ford, “about me,” 2006, [Online; accessed 20-may-2017]
Página 13 de 19
Modelo de Distribución de datos
Replicación
Consiste en tomar los datos y copiarlos, en tiempo real, a otros servidores. Existen
varios enfoques de replicación. Maestro-Esclavo o Peer-to-peer. En el caso del
Maestro-Esclavo un único nodo denominado Maestro es sobre el que se realizan las
actualizaciones y este “replica” “copia” en los esclavos. Hay un único Maestro a la vez
y es el único autorizado a recibir cambios desde la aplicación.
En el caso de la replicación peer-to-peer se permite la escritura sobre cualquier nodo, de
manera que los nodos se coordinan para sincronizar las copias de los datos.
Sharding
Este concepto, se podría traducir como particionado. Se emplea esta técnica para
gestionar (balancear de alguna manera) la carga de los servidores. Consiste en
distribuir los datos entre distintos shards (conjuntos de servidores que almacenan parte
de los datos), para que se reparta la carga a la hora de realizar consultas e inserciones.
Dicho de otra manera, los datos están distribuidos, repartidos entre los distintos shards.
Cada servidor o nodo, actúa como un único repositorio de dichos datos.
Página 14 de 19
Consistencia o coherencia (consistency)
En sistemas distribuidos, habitualmente se dice que se encuentra en un estado
consistente si, después de una operación de escritura, todas las operaciones de lectura
posteriores son capaces de ver las actualizaciones desde la parte del sistema desde la
que están leyendo. Dicho de otra manera, que todos los usuarios vean la misma
información al mismo tiempo. Por lo tanto con la consistencia se garantiza que una
lectura devolverá la escritura más reciente para un cliente determinado.
La disponibilidad (availability)
La alta disponibilidad se logra cuando el sistema ha sido diseñado e implementado de
modo que se pueda continuar operando (lecturas, escrituras), incluso después de que
algún nodo haya sufrido algún inconveniente, tanto de hardware como de software.
Página 15 de 19
Fuente: https://robertgreiner.com/cap-theorem-revisited/
El teorema CAP se extendió en base a la idea original que solo puede elegirse 2 de las 3
variables para un sistema de cómputo distribuido. Aunque la frase es poco feliz como el
mismo autor sugirió años después, sí es cierto que tenemos al menos dos estrategias
posibles para manejar la información sobre una red:
Fuente: https://robertgreiner.com/cap-theorem-revisited/
Página 16 de 19
que la información recuperada puede no ser la última, a favor de tener una
alta disponibilidad de todos los nodos.
Fuente: https://robertgreiner.com/cap-theorem-revisited/
⇒ Basic Availability. El sistema funciona incluso cuando alguna parte falla, debido
a que el storage sigue los principios de distribución y replicación. BA es
básicamente disponible. Esto significa que puede haber una falla parcial en
algunas partes del sistema distribuido y el resto del sistema continúa
funcionando.
Página 17 de 19
consultas de los usuarios fallará, pero el 90% lo logrará. Las bases de datos
NoSQL a menudo conservan múltiples copias de datos en diferentes servidores.
Esto permite que la base de datos responda a las consultas incluso si uno de los
servidores ha fallado.
⇒ Soft State. Los nodos no tienen porque ser consistentes entre sí todo el tiempo.
En las operaciones NoSQL, se refiere al hecho de que los datos pueden
sobrescribirse con datos más recientes.
Por ejemplo, algunas bases de datos NoSQL mantienen varias copias de datos
en varios servidores. Sin embargo, existe la posibilidad de que las copias
múltiples no sean consistentes por un corto período de tiempo.
Esto puede ocurrir cuando un usuario o programa actualiza una copia de los
datos y otras copias siguen teniendo la versión anterior de los datos.
El tiempo que toma actualizar todas las copias depende de varios factores, como
la carga en el sistema y la velocidad de la red.
Considere una base de datos que mantiene tres copias de datos. Un usuario
realiza una actualización en un servidor. El sistema de gestión de base de datos
NoSQL actualiza automáticamente las otras dos copias. Una de las otras copias
está en un servidor en la misma red de área local, por lo que la actualización se
realiza rápidamente. El otro servidor se encuentra en un centro de datos6 a miles
de kilómetros de distancia, por lo que hay un retraso en la actualización de la
tercera copia. Un usuario que ejecuta una consulta en el tercer servidor mientras
la actualización está en curso puede obtener el valor anterior del usuario,
mientras que alguien que consulta el primer servidor recibe el nuevo valor.
Fuentes
6
https://es.wikipedia.org/wiki/Centro_de_procesamiento_de_datos
Página 18 de 19
1. Artículo: https://eamodeorubio.wordpress.com/2010/05/17/nosql-2-no-necesitas-acid/
[Consultado: Agosto 2016]
5. Dan Sulivan (201) - NoSQL for Mere Mortals (Inglés) 1st Edición
Página 19 de 19