Les presento una síntesis para comprender que son y en que se diferencian las bases de datos SQL y NoSQL ¿Puede un especialista en Informática Médica ignorar el estándar SQL?
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Sql o NoSql en Informática Médica
1. Tema No.3: SQL o NoSQL en Informática Biomédica
Conferencia No.1
¿Qué es NoSQL?
Diferenciación entre Bases de Datos SQL y NoSQL.
Tipos de bases NoSQL.
Abril, 2016
2. SUMARIO
1. ¿Qué es una base de datos
NoSQL?
2. Diferencias principales entre las
bases de datos SQL y NoSQL.
ACID y BASE.
3. Tipos de Base de Datos NoSQL.
3. ¿Qué es NoSQL?
¿Qué son las bases de datos NoSQL?
Se puede decir que la aparición del término NoSQL aparece 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 o Youtube, cualquier usuario podía subir contenido,
provocando así un crecimiento exponencial de los datos.
Empiezan a aparecer los primeros problemas de la gestión de toda esa
información almacenada en bases de datos relacionales. En un principio, para
solucionar estos problemas de accesibilidad, las empresas optaron por utilizar un
mayor número de máquinas, pero pronto se dieron cuenta de que esto no
solucionaba el problema, además de ser una solución muy cara.
La otra solución era la creación de sistemas pensados para un uso específico que
con el paso del tiempo han dado lugar a soluciones robustas, apareciendo así el
movimiento NoSQL.
4. ¿Qué es NoSQL?
¿Qué son las bases de datos NoSQL?
Por lo tanto hablar de 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 generan ciertos problemas debido principalmente a
problemas de escalabilidad y rendimiento de las bases de datos relacionales
donde se dan cita miles de usuarios concurrentes y con millones de consultas
diarias.
Las bases de datos NoSQL son sistemas de almacenamiento de información que
no cumplen con el modelo relacional. No utilizan una estructura de datos en
forma de tabla, no utilizan las operaciones JOIN.
Para el almacenamiento hacen uso de otros formatos como clave–valor, mapeo
de columnas o grafos, documentos.
5. Unidades de información (del byte)
Sistema Internacional
(decimal)
ISO/IEC 80000-13 (binario)
Múltiplo
(símbolo)
SI
Múltiplo
(símbolo)
ISO/IEC
kilobyte (kB) 103 kibibyte (KiB) 210
megabyte (MB) 106 mebibyte (MiB) 220
gigabyte (GB) 109 gibibyte (GiB) 230
terabyte (TB) 1012 tebibyte (TiB) 240
petabyte (PB) 1015 pebibyte (PiB) 250
exabyte (EB) 1018 exbibyte (EiB) 260
zettabyte (ZB) 1021 zebibyte (ZiB) 270
yottabyte (YB) 1024 yobibyte (YiB) 280
•Internet Archive tiene alrededor de 2
petabytes de datos.
•Google procesa sobre 20 petabytes de
datos cada día.
•En diciembre de 2007, YouTube tuvo un
tráfico de 27 petabytes.
•El Gran Colisionador de Hadrones genera
unos 20 petabytes de datos útiles al año.
•Facebook tiene 60 mil millones de
imágenes, lo que supone 1,5 petabytes de
almacenamiento y crece a un ritmo de 220
millones de imágenes por semana.
Ejemplos
Un petabyte es una unidad de almacenamiento de información cuyo símbolo es el PB, y
equivale a 1015 bytes = 1 000 000 000 000 000 de bytes. El prefijo peta viene del griego πέντε,
que significa cinco, pues equivale a 10005 ó 1015. Está basado en el modelo de tera, que viene
del griego ‘monstruo’, pero que es similar (excepto una letra) a tetra-, que viene de la palabra
griega para cuatro y así peta, que viene de penta-, pierde la tercera letra, la n.
1 PB = 1015 byte = 1012 kB = 109 MB = 106 GB = 103 TB
6. ¿Qué es NoSQL?
Bases de DATOS. SQL vs NoSQL
Históricamente, una base de datos relacional focaliza el interés en la fiabilidad de las
transacciones bajo el conocido principio ACID, acrónimo de Atomicity, Consistency,
Isolation and Durability (Atomicidad, Consistencia, Aislamiento y Durabilidad en
español). Bajo esas propiedades se pretende que una transacción sobre una base de
datos siempre se complete o no (atomicidad), que los datos se mantengan en estado
válido en todo momento (consistencia), que sea independiente (aislamiento) y que
sea permanente frente a fallos del sistema (durabilidad).
El principio ACID aporta una robustez que colisiona con el rendimiento y operatividad
a medida que los volúmenes de datos crecen.
Cuando la magnitud y el dinamismo de los datos cobran importancia, el principio
ACID de los modelos relacionales queda en segundo plano frente al rendimiento,
disponibilidad y escalabilidad, las características más propias de las bases de datos
NoSQL. Hoy en día, los modernos sistemas de datos en internet se ajustan más al
también conocido principio BASE, acrónimo de Basic Availability (disponibilidad
como prioridad) Soft state (la consistencia de datos se delega a gestión externa al
motor de la base de datos) Eventually consistency (intentar lograr la convergencia
hacia un estado consistente)
7. ¿Qué es NoSQL?
- Principio ACID, típico de bases de datos relacionales -
- Principio BASE, común en BBDD NoSQL -
8. ¿Qué es NoSQL?
La principal diferencia entre una base datos relacional RDBMS y una
NoSQL estriba en el concepto de la estructura de los datos.
Con un modelo NoSQL la información se almacena de modos más flexibles
que no tienen la restricción de adoptar un formato predefinido, tal y como
ocurre en las bases relacionales (tablas cuya estructura sigue un
esquema).
Gracias a esto, es mucho más sencillo distribuir los datos entre sistemas
sin tener que mantener un complejo mecanismo de migración.
Este diseño beneficia una escalabilidad horizontal simplemente añadiendo
nodos para distribuir la carga, que aventaja la escalabilidad vertical
(incremento de potencia de procesado y memoria) necesaria en bases de
datos relacionales.
Estas razones principalmente, hacen que las bases de datos NoSQL sean
las candidatas a adoptar cuando se trate de manejar grandes volúmenes
de datos de naturaleza muy variada.
9. Ventajas de los sistemas NoSQL
• Se ejecutan en máquinas con pocos recursos: Estos sistemas, a diferencia
de los sistemas basados en SQL, no requieren de apenas computación, por
lo que se pueden montar en máquinas de un coste más reducido.
• Escalabilidad horizontal: Para mejorar el rendimiento de estos sistemas
simplemente se consigue añadiendo más nodos, con la única operación de
indicar al sistema cuáles son los nodos que están disponibles.
• Pueden manejar gran cantidad de datos: Esto es debido a que utiliza una
estructura distribuida, en muchos casos mediante tablas Hash.
• No genera cuellos de botella: El principal problema de los sistemas SQL es
que necesitan transcribir cada sentencia para poder ser ejecutada, y cada
sentencia compleja requiere además de un nivel de ejecución aún más
complejo, lo que constituye un punto de entrada en común, que ante
muchas peticiones puede ralentizar el sistema.
10. Algunas de las diferencias más destacables que nos podemos encontrar entre los sistemas
NoSQL y los sistemas SQL están:
• No utilizan SQL como lenguaje de consultas. La mayoría de las bases de datos NoSQL
evitan utilizar este tipo de lenguaje o lo utilizan como un lenguaje de apoyo. Por poner
algunos ejemplos, Cassandra utiliza el lenguaje CQL, MongoDB utiliza JSON o BigTable
hace uso de GQL.
• No utilizan estructuras fijas como tablas para el almacenamiento de los datos. Permiten
hacer uso de otros tipos de modelos de almacenamiento de información como sistemas
de clave–valor, objetos o grafos.
• No suelen permitir operaciones JOIN. Al disponer de un volumen de datos tan
extremadamente grande suele resultar deseable evitar los JOIN. Esto se debe a que,
cuando la operación no es la búsqueda de una clave, la sobrecarga puede llegar a ser
muy costosa. Las soluciones más directas consisten en desnormalizar los datos, o bien
realizar el JOIN mediante software, en la capa de aplicación.
• Arquitectura distribuida. Las bases de datos relacionales suelen estar centralizadas en
una única máquina o bien en una estructura máster–esclavo, sin embargo en los casos
NoSQL la información puede estar compartida en varias máquinas mediante mecanismos
de tablas Hash distribuidas.
11. Base de datos relacional Base de datos NoSQL
Modelo de datos
El modelo relacional normaliza los datos en estructuras tabulares conocidas
como tablas, que están formadas por filas y columnas. Contienen un
esquema que define estrictamente las tablas, columnas, índices, relaciones
entre las tablas y otros elementos de las bases de datos.
Las bases de datos no relacionales (NoSQL) no suelen contener un
esquema. Se suele utilizar una “clave hash” para recuperar valores,
conjuntos de columnas o documentos JSON o XML semiestructurados, así
como otros documentos que contengan atributos de elementos
relacionados.
Propiedades ACID
Los sistemas de administración de bases de datos relacionales (RDBMS)
tradicionales admiten un conjunto de propiedades definidas por el acrónimo
ACID (por sus siglas en inglés): atomicidad, consistencia, aislamiento y
durabilidad. Atomicidad significa “todo o nada” – una transacción se
ejecuta completamente o no se ejecuta en absoluto. Consistencia quiere
decir que una vez se ha ejecutado una transacción, los datos deben
acoplarse al esquema de la base de datos. El aislamiento requiere que las
transacciones simultáneas se ejecuten por separado. La durabilidad es la
capacidad de recuperarse de un error inesperado del sistema o de un corte
de energía y volver al último estado conocido.
Habitualmente, las bases de datos NoSQL intercambian algunas de las
propiedades ACID de los sistemas de administración de bases de datos
relacionales (RDBSM) tradicionales por un modelo de datos más flexible que
se escala de forma horizontal. Estas características convierten las bases de
datos NoSQL en una elección excelente en las situaciones en las que los
RDBMS detectan desafíos en la arquitectura a la hora de superar una
combinación de cuellos de botella de desempeño, escalabilidad,
complejidad operativa y el aumento de los costos de administración y
soporte.
Desempeño
Normalmente, el desempeño depende del subsistema de disco. Es necesaria
la optimización de consultas, índices y estructura de tabla para lograr el
máximo desempeño.
El desempeño es, por lo general, depende del tamaño del clúster de
hardware subyacente, la latencia de red y la aplicación que efectúa la
llamada.
Escalado
Lo más sencillo es ampliar la escala con un hardware más rápido. Se
requieren inversiones adicionales para que las tablas relacionales abarquen
un sistema distribuido.
Está diseñada para reducir la escala utilizando clústeres distribuidos de
hardware de bajo costo para aumentar el desempeño sin que aumente la
latencia.
API
Solicita almacenar y recuperar datos que están comunicados mediante
consultas que se ajustan a un lenguaje de consulta estructurado (SQL por sus
siglas en inglés). Estas consultas son analizadas y ejecutadas por los sistemas
de administración de bases de datos relacionales (RDBMS).
Las API basadas en objetos permiten a los desarrolladores almacenar y
recuperar fácilmente estructuras de datos en memoria. Las “claves hash”
permiten que las aplicaciones busquen pares de clave-valor, conjuntos de
columnas o documentos semiestructurados que contengan atributos y
objetos de aplicación serializados.
Herramientas
Las bases de datos SQL normalmente ofrecen un amplio conjunto de
herramientas que simplifican el desarrollo de aplicaciones de base de datos.
Las bases de datos NoSQL suelen ofrecer herramientas para administrar los
clústeres y el escalado. Las aplicaciones representan la interfaz primaria de
los datos subyacentes.
Comparación entre base de datos SQL y NoSQL
12. Tipos y clasificación de bases de datos NoSQL
Existen unos 150 tipos de bases de datos NoSQL con diferente
arquitectura de datos (basado en documento, en clave/valor, en
objetos, en grafos, en columnas, etc) Entre las más conocidas
destacan Cassandra, Hadoop, MongoDB, CouchDB o Redis.
Gigantes como Oracle también disponen de una implementación
NoSQL.
13. Tipos de bases de datos NoSQL
1.- Bases de datos clave – valor Son el modelo de base de datos NoSQL más popular,
además de ser la más sencilla en cuanto a
funcionalidad. En este tipo de sistema, cada elemento
está identificado por una llave única, lo que permite
la recuperación de la información de forma muy
rápida, información que habitualmente está
almacenada como un objeto binario.
Optimizadas para cargas de trabajo de aplicaciones
que realizan muchas tareas de lectura (como redes
sociales, juegos, uso compartido de archivos
multimedia y portales de preguntas y respuestas) o
para cargas de trabajo con un uso intensivo de
computación (como un motor de recomendaciones).
El almacenamiento en memoria caché mejora el
desempeño de las aplicaciones almacenando los
datos críticos en memoria para un acceso de baja
latencia.
Algunos ejemplos de este tipo son DynamoDB, Riak, Redis. Amazon y Best Buy.
14. Tipos de bases de datos NoSQL
1.- Bases de datos clave – valor
En esta categoría encontramos:
• DynamoDB: desarrollada por Amazon,
es una opción de almacenaje que
podemos usar desde los Amazon Web
Services. La utilizan el Washington
Post y Scopely.
• Redis: desarrollada en C y de código
abierto, es utilizada por Craiglist y
Stack Overflow (a modo de caché).
De interés: Los almacenes key/value son
extremadamente rápidos pero no permiten
consultas complejas más allá de buscar por su
clave. Por lo que si una aplicación necesita
consultas complejas, este tipo de base de
datos no se ajusta a las necesidades.
Existen implementaciones de estos almacenes
solo en memoria, tales como: memcached,
Oracle Coherence, JBoss Cache y WebSphere
eXtreme Scale. Estas soluciones normalmente
funcionan junto a un RDBMS actuando solo
como un cache complementario.
Además existen otras implementaciones que sí
son persistentes, es decir que realmente
guardan datos en el soporte físico y no sólo en
memoria por lo que se les puede usar sin un
RDBMS. Las más usadas son VMWare Redis,
Amazon SimpleDB, Oracle BerkeleyDB y Tokyo
Cabinet.
15. Tipos de bases de datos NoSQL
2.- Bases de datos documentales Este tipo almacena la información como un
documento (datos semiestructurados)
generalmente utilizando para ello una
estructura simple como JSON o XML y donde
se utiliza una clave única para cada registro.
Este tipo de implementación permite, además
de realizar búsquedas por clave–valor, realizar
consultas más avanzadas sobre el contenido
del documento.
Son las bases de datos NoSQL más versátiles.
Se pueden utilizar en gran cantidad de
proyectos, incluyendo muchos que
tradicionalmente funcionarían sobre bases de
datos relacionales.
A diferencia de las bases de datos relacionales
tradicionales, el esquema de cada documento
no relacional (NoSQL) puede variar, lo que
ofrece más flexibilidad al organizar y
almacenar datos de aplicaciones y permite
reducir el almacenamiento necesario para los
valores opcionales.
16. Tipos de bases de datos NoSQL
2.- Bases de datos documentales
Ejemplos:
• MongoDB: probablemente la base de datos NoSQL más
famosa del momento. En octubre del año pasado,
MongoDB conseguía 150 millones de dólares en
financiación, convirtiéndose en una de las startups más
prometedoras. Algunas compañías que actualmente
utilizan MongoDB son Foursquare o eBay.
• CouchDB: es la base de datos orientada a documentos
de Apache. Una de sus interesantes características es
que los datos son accesibles a través de una API Rest.
Este sistema es utilizado por compañías como Credit
Suisse y la BBC.
17. Tipos de bases de datos NoSQL
3.- Bases de datos en grafo
En este tipo de bases de datos, la información se representa como nodos de un grafo y sus
relaciones con las aristas del mismo, de manera que se puede hacer uso de la teoría de grafos
para recorrerla. Los gráficos pueden basarse en bases de datos relacionales (SQL) y no
relacionales (NoSQL) Para sacar el máximo rendimiento a este tipo de bases de datos, su
estructura debe estar totalmente normalizada, de forma que cada tabla tenga una sola
columna y cada relación dos.
Este tipo de bases de datos ofrece una navegación más eficiente entre relaciones que en un
modelo relacional. Modelo de grafos que se extiende entre múltiples máquinas. Es un modelo
apropiado para datos cuyas relaciones se ajustan a este modelo, como por ejemplo redes de
transporte, mapas, etc.
18. Tipos de bases de datos NoSQL
3.- Bases de datos en grafo
En esta categoría encontramos:
• Infinite Graph: escrita en Java y C++ por la compañía Objectivity.
Tiene dos modelos de licenciamiento: uno gratuito y otro de pago.
• Neo4j: base de datos de código abierto, escrita en Java por la
compañía Neo Technology. Utilizada por compañías como HP,
Infojobs o Cisco.
Almacenan vértices y
enlaces dirigidos
llamados aristas. Los
gráficos pueden
basarse en bases de
datos relacionales
(SQL) y no relacionales
(NoSQL). Los vértices y
las aristas pueden
tener propiedades
asociadas.
19. Tipos de bases de datos NoSQL
4.- Bases de datos en columnas
Pensadas para realizar consultas y agregaciones sobre grandes cantidades de datos.
Funcionan de forma parecida a las bases de datos relacionales, pero almacenando
columnas de datos en lugar de registros.
Optimizadas para leer y escribir columnas de datos en lugar de filas.
El almacenamiento basado en columnas para las tablas de bases de datos es un factor
importante en el desempeño de las consultas analíticas, ya que reduce notablemente los
requisitos globales de E/S del disco, así como la cantidad de datos que hay que cargar
desde el mismo.
20. Tipos de bases de datos NoSQL
4.- Bases de datos en columnas
Ejemplos:
• Cassandra: incluida en esta sección, aunque en realidad sigue un modelo híbrido
entre orientada a columnas y clave-valor. Es utilizada por Facebook y Twitter
(aunque dejaron de usarla para almacenar tweets).
• HBase. Escrita en Java y mantenida por el Projecto Hadoop de Apache, se utiliza
para procesar grandes cantidades de datos. La utilizan Facebook, Twitter o Yahoo.
21. Retos de seguridad en bases de datos NoSQL
Dada la amplia variedad de bases de datos NoSQL, es necesario prestar atención a las
debilidades genéricas de estos modelos y, en cada caso particular aplicar las medidas
necesarias para su implementación.
Comparando con las bases de datos relacionales podemos resumir los siguientes campos de
seguridad:
Autenticación.
La fortaleza de la autenticación es uno de los campos de batalla donde muchas
implementaciones NoSQL muestran debilidad. Es común encontrar que las bases de datos
NoSQL incorporen credenciales por defecto, o incluso sin autenticación necesaria o
deshabilitada (por ejemplo, Redis).
En muchos casos se basan en entornos de confianza en lugar de autenticación de usuario.
Dependiendo del software siempre será un punto fundamental a chequear.
Integridad de los datos.
Siguiendo una filosofía donde prima la disponibilidad y el rendimiento, se penaliza en la
integridad de los datos. Por ello es necesario utilizar frecuentemente mecanismos
complementarios ajenos al motor de la base de datos para asegurar la integridad.
22. Retos de seguridad en bases de datos NoSQL
Confidencialidad y cifrado en el almacenamiento.
Por lo general, el almacenamiento de los datos se realiza en texto plano y salvo
escasas excepciones como por ejemplo Cassandra y su tecnología Transparent data
encryption, no se incorporan mecanismos de cifrado integrados.
En la mayoría de los casos sigue siendo necesario delegar el cifrado a procesos en
la capa de aplicación o del propio sistema de ficheros.
Auditoría de datos
La mayoría de bases de datos NoSQL carecen de mecanismos propios y robustos de
auditoría de datos, de gran peso a la hora de detectar posibles ataques mediante la
observación de eventos sobre registros concretos tal y como se hace en bases de
datos relacionales.
Seguridad en las comunicaciones.
El uso de cifrado y protocolo SSL es habitual en bases de datos relaciones, en
cambio en sistemas NoSQL generalmente se encuentra deshabilitado por defecto, es
opcional (por ejemplo Cassandra), o bien es necesaria una configuración específica
en la instalación (como en MongoDB).
23. En las bases de datos NoSQL, las peticiones y llamadas se ejecutan invocando la
API correspondiente formateada según una convención común, habitualmente
JSON o XML. En este punto, una incorrecta verificación de los parámetros de
entrada puede permitir la ejecución de comandos al evaluarse y tratarse en la
llamada a la API correspondiente. Las posibilidades de inyección y los riesgos, al
utilizarse una API con lenguaje de programación procedimental, son aún mayores
que en el caso de bases de datos relaciones donde se usa el lenguaje SQL
típicamente declarativo y mucho más acotado.
Inyección NoSQL y de código javascript son nuevos vectores que amplían la
superficie de ataques sobre estas bases de datos.
NoSQL está cada vez más presente en las tecnologías actuales de bases de datos
y afronta grandes retos para lidiar con los problemas de seguridad que tarde o
temprano deberá reforzar.
Vulnerabilidades clásicas en base de datos: Aún
más inyección.
24. CONCLUSIONES
Dada la amplia variedad de bases de datos NoSQL, es necesario prestar atención a las
debilidades genéricas de estos modelos y, en cada caso particular aplicar las medidas
necesarias en cada implementación particular.
Existen diferentes bases de datos NoSQL, cuyas características y formatos de
almacenamiento varían, haciendo que el modelado para cada una de ellas tenga que ser
distinto. A la hora de elegir un sistema NoSQL frente a uno SQL habrá que plantearse
previamente si realmente se necesita, después elegir uno en concreto en base a nuestras
necesidades, olvidarnos de las formas normales y guardar los datos de distinta manera en
función de cómo va a ser el acceso a éstos.
Las bases de datos NoSQL nos permiten almacenar información en aquellas situaciones en
las que las bases de datos relacionales generan ciertos problemas debido principalmente a
problemas de escalabilidad y rendimiento donde se dan cita miles de usuarios concurrentes
y con millones de consultas diarias.
Las bases de datos NoSQL son sistemas de almacenamiento de información que no
cumplen con el modelo relacional. No utilizan una estructura de datos en forma de tabla,
no utilizan las operaciones JOIN.