Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
ÍNDICE
2
3
1.- OBJETIVOS DEL BLOQUE
1. Objetivos generales:
En este módulo se expondrá el concepto de NoSQL y cómo han evolucionado
históricamente las bases de datos hasta llegar a nuestros días. Se explicarán los
distintos tipos de bases de datos NoSQL.
2. Objetivos específicos:
- Comprender el concepto de NoSQL.
- Distinguir las tipologías de bases de datos presentes dentro del
paradigma NoSQL.
- Entender que tipología es útil para un problema de procesamiento en
particular.
- Conocer herramientas que dotan de comportamiento NoSQL a bases de
datos SQL.
4
datos masivos (Big Data).
Se presentan en contraposición a las bases de datos tradicionales, que utilizan
la mayor parte de las empresas, que no fueron diseñadas para enfrentarse a los
retos de escalabilidad y agilidad que presentan las aplicaciones modernas, ni
tampoco para aprovechar las ventajas ofrecidas por sistemas de
almacenamiento económico y potencia de procesamiento disponibles
actualmente.
No obstante, las bases de datos relacionales se han ganado esta posición
predominante por buenas razones, no han dejado de ser útiles. Aunque, por
motivaciones técnicas, como puede ser la necesidad de escalado rápido en las
capacidades de sus sistemas de procesamiento y almacenamiento, por
motivaciones económicas, consistentes en buscar alternativas económicas
viables, no sólo en lo que a licencias se refiere, sino también en lo relacionado
con almacenamiento y procesamiento, o bien debido a la necesidad de rápida
adaptación a los requisitos del mercado en forma de desarrollos ágiles que
requieren otro tipo de metodologías, se está tendiendo al empleo de técnicas
NoSQL que permitan lidiar con los datos.
Por regla general, las bases de datos NoSQL se han convertido en la primera
alternativa a las bases de datos relacionales, ya que cumplen requisitos cada
vez más necesarios como son escalabilidad, disponibilidad y tolerancia ante
fallos.
5
bases de datos relacionales ha sido desplazado a las aplicaciones que corren
sobre ellas. En cualquier caso, lo que cumplen este tipo de modelos es que no
requieren esquema, no que necesariamente carezcan de él.
Supongase el ejemplo de una base de datos que almacenase los mismos en un
fichero de texto con la sintaxis clave-valor. Además, dichos elementos son
propiedades de un determinado objeto mayor, que será unívocamente
determinado por un identificador. Así, el fichero seres.txt podría contener algo
como lo siguiente:
Arquitectura Distribuida
En una arquitectura distribuida cada componente de la misma se aloja en
diferentes nodos que se comunican a través de una red lo que permite que la
localización de cada nodo puede ser geográficamente distinta. No es necesario
que los nodos de la red sean idénticos, cada uno puede tener diferentes
recursos. En este tipo de arquitecturas cada nodo del conjunto puede llevar a
cabo o bien una subtarea de otra mayor, es decir, procesar paralelamente una
operación concreta, o bien pueden realizar la suya propia, independiente de
las de los demás.
Ventajas:
● Arquitectura redundante, si falla parte del sistema el resto sigue
funcionando (fiable)
● Es escalable, si se necesitan más nodos solo hay que incluirlos
● Mejor rendimiento, ya que la carga de trabajo se puede distribuir mejor
● Se pueden tomar decisiones locales de forma independiente a la lógica
del negocio.
7
● El ancho de banda no es tan crítico como en un sistema centralizado
● Rapidez de respuesta ya que los datos están en la red local.
● Es más consistente con la estructura de la organización, dando mayor
flexibilidad. Si un grupo de usuarios quiere modificar parte de su sistema
lo puede hacer sin afectar al resto.
Desventajas:
● Se necesita más personal para mantener los nodos locales. Es más
complicado saber por qué se produce un fallo.
● Problemas para localizar la información, compatibilidad e
interoperabilidad.
● Mayor costo y complejidad del SW.
● Costo en llevar los cambios del SW a cada lugar, en caso de
mantenimiento.
● Integridad de los datos es más difícil de controlar, así como la
redundancia, inconsistencia, seguridad, etc.
8
por lo que es un cuello de botella. Además sobrecarga la red al tener
que transmitir más datos.
En modelos de cliente pesados, en cambio, el servidor solo tiene la
gestión de datos. Se emplea en los cajeros automáticos, el servidor lo es
de transacciones (no se comunica con la base de datos, sino con un
intermediario llamado monitor de proceso). Ventaja: distribuye carga de
trabajo y mejora el rendimiento. Desventaja: si hay cambios de software
hay que reinstalar todos los clientes.
También tenemos el Modelo Cliente servidor con tres capas. Se utiliza
en banca electrónica en Web. El servidor realiza la gestión de datos, un
segundo servidor (web) procesa el servicio de cuentas (transferir dinero,
estados de cuenta, pagar facturas, ...) y finalmente está el cliente
● Peer2Peer: Los sistemas P2P son aquellos en los que las tareas se
distribuyen entre todos los componentes del sistema. Todos los
componentes pueden jugar un papel diferente en cada momento de
forma que se comparten los recursos de memoria y procesamiento.
Ventajas: Es redundante, por lo que es tolerante a problemas como
nodos desconectados
Desventajas:
● Sobrecarga porque la misma búsqueda la pueden procesar varios
nodos, alternativa, sistema semicentralizado en que algunos
nodos sirven de servidores (p.e. Servidor buscador de servicios),
o nodos que sirvan de distribución de trabajo y de comprobación.
● Tiene problemas de seguridad y autenticidad, por lo que es mejor
en sistemas de información no críticos o dentro de una
organización
● Flujos de control complicados que pueden llegar a punto muerto.
Se necesita sincronizar las peticiones
9
Arquitectura distribuida cliente-servidor frente a arquitectura P2P
Escalabilidad horizontal
El concepto de escalado horizontal se entiende con mayor facilidad si se
compara con la escalado vertical. En general, en cualquier conjunto de recursos
disponibles, el escalado vertical implica que, para aumentar el conjunto total
de recursos, se debe aumentar cada uno de ellos individualmente, mientras
que, en el caso del escalado horizontal, el aumento total viene dado por la
adición de recursos individuales.
10
Desde el punto de vista de las bases de datos, el escalado horizontal se refiere
al particionamiento de los datos. Cada nodo del conjunto de recursos contiene
únicamente parte de los datos de forma que, en este esquema, al aumentar
recursos los datos quedarán distribuidos entre más nodos. En el caso del
escalado vertical, los datos quedarán en el mismo nodo, sólo que ese nodo
tendrá más capacidad para manejarlos.
11
es posible porque, como se ha comentado, cada nodo de la red puede
disponer de diferentes recursos. Sin embargo, en el caso del escalado
vertical la limitación es mucho mayor, ya que las restricciones en
ampliación de hardware también lo son.
Hadoop
Pero es imposible hablar de todas estas ventajas de la escalabilidad horizontal
sin mencionar Hadoop. Y es que sin este software de código abierto resulta
difícil concebir tanto un almacenamiento, como un procesamiento y extracción
de valor de los grandes datos a un bajo coste.
12
La arquitectura de Hadoop permite llevar a cabo un análisis eficaz de grandes
datos no estructurados, añadiéndoles un valor que puede ayudar a tomar
decisiones estratégicas, a mejorar los procesos de producción, ahorrar costes,
etc. Lo hacen posible su tecnología escalable, su velocidad (no en tiempo real,
al menos no sin ayuda, como la que proporciona Spark), flexibilidad, entre otros
puntos fuertes. Si tenemos que señalar sus cinco principales ventajas, serían
las siguientes:
● Tecnología altamente escalable: Un clúster de Hadoop puede crecer
simplemente añadiendo nuevos nodos. No es necesario hacer ajustes que
modifiquen la estructura inicial. Por lo tanto, nos permite un
crecimiento fácil, sin estar atados a las características iniciales del
diseño, haciendo uso de decenas de servidores de bajo coste que, a
diferencia de la base de datos relacional, no puede escalar. Gracias al
procesamiento distribuido de MapReduce, los archivos se dividen en
bloques de forma sencilla.
● Almacenamiento a bajo coste: La información no se almacena de forma
predefinida, en filas y columnas, como ocurre con las bases de datos
tradicionales, sino que Hadoop asigna datos categorizados a través de
miles de computadoras baratas, y ello supone un gran ahorro. Sólo así se
convierte en factible. De otro modo, no podríamos trabajar con grandes
volúmenes de datos, pues el coste sería altísimo, inasumible para la gran
mayoría de las empresas.
● Flexibilidad: Al incrementar el número de nodos del sistema también
ganamos en capacidad de almacenamiento y procesamiento. A su vez,
es posible agregar o acceder a nuevas y diferentes fuentes de datos
(estructurados, semiestructurados y no estructurados), al tiempo que
existe la posibilidad de adaptar herramientas accesorias que funcionan
en el entorno Hadoop y ayudan en el diseño de procesos, la integración
o mejorar otros aspectos.
● Velocidad: De poco nos servirán su bajo coste, escalabilidad y
flexibilidad si el resultado no es razonablemente rápido.
13
Afortunadamente, Hadoop también permite ejecutar procesamientos y
realizar análisis muy rápidos.
● Tolerancia a fallos: Hadoop es una tecnología que facilita almacenar
grandes volúmenes de información, lo que a su vez permite recuperar
datos de forma segura. Si un equipo se cae, siempre hay otra copia
disponible, con lo que es posible la recuperación de datos en caso de
producirse fallos.
Capacidades transaccionales
Teorema de CAP
En un sistema distribuido, no es posible proveer simultáneamente las siguientes
garantías:
15
2. Disponibilidad: Garantía de que cada petición a un nodo reciba una
respuesta sobre su correcta resolución o fracaso.
3. Tolerancia al particionamiento: Garantía de que el sistema completo
pueda continuar funcionando en condiciones normales a pesar de que se
produzca un fallo que implique la desconexión de una parte de la red de
nodos.
Así pues, aunque las bases de datos NoSQL cumplen con las siglas AID de ACID,
la consistencia se asegura en un sentido diferente debido a la propia naturaleza
de un sistema distribuido.
16
datos. No obstante, esta visión se relaciona más con la Historia que con las
bases de datos.
1960
En los años 60 el precio de los ordenadores disminuyó de tal forma que hizo
posible que las empresas pudiesen adquirir este tipo de dispositivos. Además,
se popularizó el uso de discos que, además de ser capaces almacenar
17
información como las cintas magnéticas, permitían el acceso aleatorio a la
información contenida, resultando mucho más adecuados para tareas de
búsqueda que requerían acceso rápido a los datos sin necesidad de conocer la
ubicación exacta de su grabación en el dispositivo.
Fue en esta década también cuando aparecieron las primeras bases de datos
jerárquicas, que relacionaban las entidades que formaban el modelo de datos
en una estructura de árbol padre-hijos. También surgieron las bases de datos
de red, muy similares a las jerárquicas con la salvedad de que permitían
relacionar las entidades con un mayor número de enlaces, es decir, un hijo
podía tener muchos padres, de manera que se podían crear estructuras de grafo
más complejas. No obstante, a pesar de que el segundo tipo fue ampliamente
utilizado, su popularidad descendió debido a que IBM eligió el modelo
jerárquico para su Information Management System (IMS).
También fue en esta época cuando IBM junto con la American Airlines,
desarrolló SABRE (Semi-Automatic Business Research Environment). Se trataba
de un sistema central de gestión de vuelos pionero en las transacciones online.
Los ordenadores que componían el sistema fueron conectados a través de una
red que permitía que usuarios de todo el mundo accediesen a la información
sobre los vuelos y realizasen peticiones de información sentando las bases del
comercio electrónico.
18
programación estándar. De sus esfuerzos surgió, entre otras cosas, el lenguaje
COBOL.
1970
En la década de los 70 el hito más relevante lo proporcionó Edgar Frank Codd
definiendo el modelo de datos relacional (RDBMS - Relational Data Base Model
System). Publicó sus estudios en el paper "A Relational Model of Data for Large
Shared Data Banks", pilar de las bases de datos relacionales.
Fue en esta misma época cuando Larry Ellison fundó la Oracle System
Corporation, debido al nombre de su producto principal, la base de datos
Oracle. Ellison había oído hablar System R y quiso compatibilizar ambos
sistemas, pero no le fue posible debido al rechazo de IBM de proporcionarle el
código de System R.
1980
El modelo relacional conoció en esta época su principal crecimiento, debido a
la comercialización de sistemas relacionales y, en 1986, la publicación del
lenguaje Structured Query Language (SQL) se convirtió en el estándar de la
industria.
19
al Sistema de Gestión de Bases de Datos Orientadas Objetos o System
Management Object Oriented Databases (SGBDOO). En estas bases de datos la
información se representa siguiendo el paradigma de programación orientada a
objetos.
1990
Como consecuencia de la investigación de las bases de datos orientadas a
objetos surgieron distintos softwares de gestión de datos como Excel y Acces
de la empresa Microsoft. Es lo que se considera la tercera generación de
sistemas de gestión de bases de datos. Además, el lenguaje SQL evolucionó en
su estándar para permitir el uso de nuevas expresiones regulares, consultas
recursivas y triggers.
Clave-valor
Este tipo de base de datos provee modelo más simple de modelado consistente
en una clave y un valor asociado a dicha clave. Las consultas de búsqueda sobre
los datos así almacenados se deben hacer por medio de su clave, los valores
aparecen opacos frente al motor de búsqueda. Si se compara con el modelo
relacional, cada clave se corresponde con una columna, pero en este caso sólo
existen registros independientes, no hay estructura. En la Figura 7 se muestra
un ejemplo de modelado del conjunto de datos seres. En este caso, cada uno
de los seres sólo podría ser accedido mediante su clave y el motor de la base
de datos no entendería qué significa cada valor, así no sería posible, por
ejemplo, obtener los nombres o las edades de los seres sin recuperar el registro
completo.
21
Esquema de registros en una base de datos NoSQL de tipo clave-valor
La ventaja que presentan estas bases de datos es que son muy rápidas en lo que
a lectura/escritura se refiere, únicamente supone un acceso a disco.
Por otra parte, existen tipos de bases de datos clave-valor diferenciadas por la
forma en la que almacenan los datos y mantienen su consistencia, en particular:
22
Teorema de CAP definido en la sección ¿Qué es NoSQL?. Una definición
informal sobre su significado es la proporcionada por Doug Terry et. al.*
Algunos ejemplos de bases de datos NoSQL eventualmente consistentes
son Amazon Dynamo, Voldemort y Dynomite, entre otras.
*Base de datos eventualmente consistentes: "All replicas eventually receive all writes (assuming sufficient
network connectivity and reasonable reconciliation schedules), and any two replicas that have received
the same set of writes have identical databases." (Doug Terry et. al.)
Orientadas a documento
Las bases de datos orientadas a documento son una extensión del modelo
anterior. Los datos se almacenan en un formato estructurado más complejo,
denominado documento, cuyos elementos son entendidos por el software que
compone la base de datos. Debido a ello no existe una limitación tan estricta
sobre la forma de búsqueda, en estos casos es posible analizar los datos
almacenados haciendo queries sobre más campos, no únicamente la clave.
Gracias a esta característica se trata de bases de datos adecuadas para
aplicaciones orientadas a contenido (Facebook, blogs, etc.).
23
El elemento central de este tipo de bases de datos es el documento. Se trata
de una estructura, más o menos compleja, que encapsula información siguiendo
un determinado formato estandarizado. No obstante, este estándar puede
variar notablemente entre implementaciones. Cada documento se almacena en
disco codificado siguiendo un formato que, de nuevo, depende de la
implementación. Los más comunes son JSON/BSON, XML y YAML. Algunos de
estos formatos serán estudiados en secciones posteriores.
24
plenamente consistentes.
Operacionalmente MongoDB funciona con replicación maesto-esclavo e
implementa un sistema de recuperación ante fallos automático y escalado
horizontal vía particionamiento basado en rango.
Como otros noRel, se orienta a un almacenamiento no estructurado:
● Cada ocurrencia (individuo) se almacena en un documento BSON
(correspondiente al concepto de fila de una base relacional)
● Las generalidades de objetos son colecciones de documentos
(correspondiente al concepto de relación o tabla)
● Al ser no estructurado, carece de diseño previo:
○ La colección no se define: sus documentos pueden tener cualquier
conjunto de campos (incluso el mismo nombre de campo con
distintos tipos de datos)
○ El esquema global (diseño de BD) no se define: se crea la colección
al ingresar el primer elemento en ella.
25
consola de administración o cualquier aplicación que permita realizar este tipo
de peticiones.
Soporta índices, combinación y transformación de documentos vía JavaScript y
se adapta a las características actuales de la Web así como de las aplicaciones
móviles.
Implementa además replicación incremental y comunicaciones maestro-
maestro con detección automática de conflictos en la modificación de datos.
Se trata de una base de datos altamente escalable y tolerante a particiones y,
a pesar de ser sólo eventualmente consistente, es una base de datos
comprometida con la seguridad y veracidad de la información.
Orientadas a columna
26
Esquema de registros en una base de datos NoSQL orientada a columna
27
Cassandra es una base de datos altamente escalable, eventualmente
consistente, distribuida y de almacenamiento tipo clave-valor. Surge como el
producto de la fusión de las tecnologías distribuidas de Dynamo y el modelo de
datos Big Table de Google.
Debido a que está basada en Big Table, el modelo de datos que presenta es
orientado a familias de columnas (ColumnFamilies) lo que proporciona mayor
flexibilidad que el tipo clave-valor exclusivo.
El código fuente de Cassandra fue liberado por Facebook en 2008 y es la base
de datos que esta empresa utiliza en producción. Sus principales características
son:
● Alta disponibilidad.
● Escalado horizontal.
● Consistencia eventual (es un ejemplo de que sacrificar consistencia
permite ganar rendimiento)
● Configuración del equilibrio entre consistencia y latencia.
● Modelo de distribución P2P, lo que evita puntos de fallo únicos.
Por tanto, según sus principales características, se trata de una base de datos
pensada para funcionar en un sistema distribuido. Cada nodo del sistema juega
el mismo papel, no hay arquitectura maestro-esclavo sino P2P. La arquitectura
distribuida de Cassandra se presenta como un anillo en el que cada nodo del
cluster almacena cierta parte de los datos automáticamente, sin necesidad de
configuración.
Al igual que otras bases de datos, Cassandra proporciona un mecanismo de
replicación en el que la información se almacena de forma redundante
distribuida en distintos nodos de la red. De esta forma es como se proporciona
alta disponibilidad, ya que si un nodo falla la información persiste en otros
nodos del anillo.
Por otra parte, como consecuencia de la sencillez en la arquitectura, la
escalabilidad que se proporciona es lineal, es decir, crece linealmente con la
adhesión de nodos al anillo.
28
El modelo de datos de Cassandra tiene su origen en las BigTable de Google. El
esquema se estructura de la siguiente forma, por orden de jerarquía:
● Espacio de claves (Keyspace): Primer nivel de contenido, almacena
familias de columnas. Es una práctica habitual que contenga todos los
datos de una aplicación. Se podría equiparar a una base de datos en un
modelo relacional.
● Familia de columnas (Column Family): Segundo nivel de la jerarquía,
contiene claves de filas y otras familias de columnas. Este nivel sería
equiparable a las tablas del modelo relacional.
● Clave de fila (Row Key): Identificador único de un dato almacenado
dentro de una Column Family.
● Súper columna (Super Column): Estructura tipo diccionario de columnas
identificadas por una Row Key.
● Columna (Column): Par nombre-valor con un campo adicional que
contiene el timestamp del dato.
29
En la figura anterior se muestra un diagrama con la estructura general de
almacenamiento en Cassandra. En primer lugar, se encuentra el keyspace que,
a su vez, aglutina varias column families. Estas a su vez enlazan con una serie
de claves, las row keys, que apuntan a grupos de columnas, que contienen el
propio valor del dato identificado por un nombre y un timestamp.
La arquitectura de Cassandra está orientada a solventar problemas debidos a
fallos hardware. Este tipo de fallos son mitigados empleando un sistema P2P
distribuido a través de nodos homogéneos donde todos ellos se encargan de
almacenar los datos. Por otra parte se realiza un proceso de escritura
secuencial en unos ficheros denominados commitlogs presentes en cada nodo
que almacenan toda la información sobre la actividad local asegurando así la
durabilidad de las acciones. Tras ser escritos en los commitlogs los datos son
indexados y almacenados en memoria en unas tablas denominadas memtables.
Una vez que la memoria dedicada a dichas tablas está llena, esta información
es almacenada en disco en lo que se denominan Sorted String Tables (SSTables).
Orientadas a grafo
Las bases de datos orientadas a grafos son aquellas que emplean estructuras de
tipo grafo para almacenar la información. Los elementos que la componen son
nodos, propiedades y enlaces:
● Nodos: Son los elementos centrales del grafo, cada uno de ellos se
corresponde con un objeto determinado, por ejemplo un usuario, una
Web, una empresa, etc.
● Propiedades: Son atributos que caracterizan permanentemente a los
nodos.
● Enlace: Los enlaces definen las relaciones entre nodos, dos nodos
pueden o no estar conectados por un enlace, de forma bidireccional o
no y con unos determinados atributos.
30
Esquema de registros en una base de datos NoSQL orientada a grafo
31
Una de las más conocidas es Neo4j, un servicio implementado en Java que
utiliza este último tipo de grafos que acabamos de describir.
Neo4j usa grafos para representar datos y las relaciones entre ellos. En
concreto, utiliza grafos de propiedad para extraer valor añadido de los datos
de cualquier empresa con gran rendimiento y de una forma ágil, flexible y
escalable. Sus principales ventajas son:
Rendimiento: Las bases de datos orientadas a grafos como Neo4j tienen mejor
rendimiento que las relacionales (SQL) y las no relacionales (NoSQL). La clave
es que, aunque las consultas de datos aumenten exponencialmente, el
rendimiento de Neo4j no desciende, frente a lo que sí sucede con las BD
relacionales como MySQL.
32
Las BDOG responden a las consultas actualizando el nodo y las relaciones de esa
búsqueda y no todo el grafo completo. Eso optimiza mucho el proceso.
Este tipo de almacenamiento suele ser una buena solución cuando la aplicación
únicamente requiere o genera un tipo concreto de objeto y las búsquedas sobre
esos objetos se realizan mediante un único atributo. En ese caso el uso de bases
de datos tipo clave-valor resultan muy convenientes por simplicidad y rapidez.
Supóngase, por ejemplo, una web que se adapta según el usuario conectado y,
para ello, se deben realizar un gran número de consultas a una base de datos
RDBMS. Supongamos, además, que la información de un mismo usuario cambia
en pocas ocasiones, y que, cuando lo hace, el cambio se refiere directamente
a ese mismo usuario, es decir, es un cambio controlado. En ese caso, el sistema
se puede modelar tomando el identificador de usuario como clave y el resto de
información contenida como valor, de forma que se pueda agilizar la etapa de
recuperación de datos.
Un ejemplo de este caso podría ser una aplicación similar a una parte de
Facebook, la parte en la que el usuario actualiza su propio estado y,
posiblemente, incluso en relación con actualizaciones de otros usuarios.
34
No obstante, es necesario plantearse las restricciones en la consistencia de los
datos, es decir, la importancia del factor concurrencia. Si la aplicación puede
tolerar consistencia eventual en los datos, con atomicidad y aislamiento
limitados, entonces las bases de datos orientadas a documento son una buena
opción. Sin embargo, si los datos deben cumplir completa atomicidad y
consistencia, por ejemplo si se desean bloquear usuarios en función de los
intentos de acceso fallido, entonces la alternativa del modelo relacional resulta
más adecuada.
En aplicaciones de este tipo, por tanto, puede ser conveniente implementar un
sistema mixto que incluya ambas opciones.
Los casos de uso de este tipo de base de datos son similares a los orientados a
documento, es decir, muchos tipos de objetos con requerimientos de búsquedas
variadas y flexibles.
Sin embargo, en estos casos, debido a la forma de almacenar la información en
disco, son bases de datos más orientadas a proyectos con un alto flujo de datos
que, además, pueden proporcionar garantías más fuertes en lo que a
consistencia se refiere a cambio de una mayor complejidad.
35
orientado a documento, mediante el uso de múltiples colecciones de diferentes
dimensiones, el particionamiento es más sencillo en el caso orientado a
columna.
Debido a las características de estas bases datos su uso es muy concreto y fácil
de determinar. En este caso los elementos cambiantes son las relaciones entre
nodos, no los nodos en sí mismos y por eso suelen ser muy adecuadas para
caracterizar redes de comunicaciones.
36
servicios a su público objetivo y personalizar las recomendaciones en
función de los perfiles. Eso es lo que permite que se aumente la precisión
comercial y el compromiso del cliente.
● Gestión de centros de datos: Las bases de datos gráficas son el antídoto
perfecto ante el crecimiento desbordante de los datos. La gran cantidad
de información, dispositivos y usuarios hacen que las tecnologías
tradicionales no puedan gestionar tantos datos. La flexibilidad,
rendimiento y escalabilidad de Neo4j permite gestionar, monitorizar y
optimizar todo tipo de redes físicas y virtuales pese a la gran cantidad
de datos.
● Gestión de sistemas de datos maestros: La gestión de datos maestros
(Master Data Management) es un auténtico quebradero de cabeza en las
empresas. La creación de un sistema de información centralizado y fiable
siempre es una cuestión compleja. El objetivo final es que cada miembro
de una organización use los mismos formatos y aplicaciones para los
datos. Eso genera un protocolo de trabajo que es aprovechable por el
resto. Este tipo de bases de datos ayudan a crear sistemas de ese tipo
con velocidad, agilidad, rendimiento y todo eso sin perder flexibilidad y
escalabilidad con los datos. Tendríamos un sistema de creación de
insights en 360º: empleados, clientes y productos.
Modelo RDBMS
37
que, además, se deban realizar búsquedas sobre cumplimiento de leyes,
matrículas, fechas concretas, números de licencias, etc. Dichas búsquedas son
más susceptibles del cumplimiento de ACID, de forma que la elección de una
base de datos RDBMS es más adecuada.
Las bases de datos SQL requieren una estructura que implica atributos bien
definidos que deben cumplir los datos. Las bases de datos NoSQL son más
flexibles en lo que a estructura se refiere y, por tanto, aceptan una amplia
variedad de tipos almacenados en cada registro.
38
Así, las bases de datos SQL resultan más adecuadas cuando la aplicación sigue
la máxima “Structure First”, es decir, no se puede esperar que cada registro
contenga cualquier cosa y los datos siempre deben ser correctos. NoSQL, por
su parte, sigue la máxima “Store First”, se trata de casos en los que lo que
prime sea la velocidad y la capacidad de almacenamiento más que el
mantenimiento de la estructura.
A pesar de las licencias que rijan cada base de datos SQL, todas ellas siguen en
mayor o menor medida el estándar Structured Query Language (SQL), de forma
que es muy sencillo adaptar la sintaxis de una determinada aplicación que pase
a consultar de una base de datos a otra.
SQL NoSQL
Almacenamiento Modelo relacional (filas y Modelo no relacional, diferente
columnas) según la BBDD.
39
Flexibilidad Esquema fijo, cada columna Esquema dinámico, los datos se
tiene establecido qué puede pueden añadir al vuelo y cada
almacenar y cada fila debe entrada no necesariamente
cumplir las restricciones. cumple los mismos requisitos.
Escalabilidad (0:1)
Fiabilidad (1:0)
40
Soporte (1:0)
ACID (1:0)
La mayor parte de las bases de datos SQL cumplen las propiedades ACID
(Atomicidad, Consistencia, Aislamiento, Durabilidad) mientras que las NoSQL
únicamente siguen el Teorema de CAP. En este sentido, las bases de datos SQL,
de nuevo, aseguran integridad y fiabilidad de los datos almacenados, mientras
que las NoSQL proporcionan velocidad.
Así pues, si se contabilizan los “puntos” que cumple cada tipo de base de datos,
SQL gana 6 a 3. No obstante, en función de que lo que se requiera de cada base
de datos, será conveniente emplear una u otra o, incluso, ambas.
41
7.- BBDD RELACIONALES CON COMPORTAMIENTOS
NoSQL
Como se ha comentado el término NoSQL no se refiere únicamente a bases de
datos no relacionales, aunque es posible que en algún momento se haya
empleado una relación directa. De hecho, el término NoSQL se define, en
muchas ocasiones como “Not Only SQL”.
42
PostgreSQL: JSON y HSTORE
43
Postgres proporciona un soporte robusto para JSON, contiene un tipo de dato
JSON que valida y almacena datos en formato JSON y que permite extraer
elementos de un objeto JSON, de forma que las aplicaciones que trabajan de
forma nativa en JSON (la mayoría en Web) puede utilizar Postgres para obtener
datos directamente formateados en su propio lenguaje.
Por otra parte, además del tipo de dato nativo JSON, Postgres incorpora un
parseador JSON y funciones JSON. Este hecho implica que los desarrolladores
web no necesitan implementar capas de traducción entre la base se datos y la
aplicación ya que hablan el mismo lenguaje. Además, en el caso de trabajar
nativamente con datos JSON y prescindir así de la capa de traducción, permite
acelerar los procesos de lectura/escritura a la base de datos.
44
MySQL: Memcached
Una caché es un tipo de memoria que mantiene duplicados algunos o todos los
datos almacenados en una o más bases de datos que permite que las
aplicaciones accedan de forma escalable y rápida a los mismos. Resulta, por
tanto, particularmente útil cuando el acceso a una determinada parte de la
base de datos resulta complicado por limitaciones producidas por los recursos
del sistema. En bases de datos distribuidas dichas limitaciones pueden
centrarse en los recursos de red.
Así, introducir una capa de cacheo de datos hace más accesible el sistema
completo, disminuyendo el tiempo de acceso y mejorando la capacidad de la
base de datos de escalar en el sentido de cumplir los requerimientos de
consistencia cuando se sufren picos de carga. Normalmente esta forma de
caché se implementa de manera distribuida, haciendo más eficiente la
disponibilidad de memoria, red y otros recursos necesarios para el acceso a la
misma. MySQL implementa este tipo de arquitectura de memoria de forma
distribuida en lo que denomina Memcached, de código abierto.
45
Además de las ventajas de acceso rápido, Memcached ha sido diseñado para
poder escalar hasta cientos de servidores, de forma que se adquiere la
característica de escalado horizontal, al menos en esta tecnología, para una
base de datos MySQL distribuida. La forma de localizar la información en las
memorias distribuidas es mediante tablas hash. Una transformación hash es un
procedimiento en el que transforma un determinado dato a un entero que
utilizan los servidores como índice de un array.
Batch Processing
47
reduce significativamente el tiempo de procesamiento (al reducirse el uso de
la red de datos), ofreciendo fiabilidad ante fallos.
Streaming Processing
48
Apache Storm es una plataforma de procesamiento streaming que se basa en
los siguientes elementos: spouts, bolts y topologies. Un spout representa la
entrada de datos directamente de la fuente (por ejemplo, Twitter streaming
API o bróker de mensajes como Apache Kafka o RabbitMQ). Un bolt se encarga
de procesar (filtrar, agregar…) la información de uno o varios flujos de entrada
y producir un flujo de salida. Ambos, spouts y bolts se conectan entre sí
construyendo una red que se denomina topology.
49
Para conseguir reducir la latencia del procesamiento, este sistema trabaja
directamente en memoria (sin necesidad de operaciones de escritura y lectura
en el disco excepto para la carga inicial de datos y el almacenamiento de los
resultados) y se basa en DAGs (Directed Acyclic Graphs) para reducir el tiempo
de procesamiento y por tanto garantizar un uso eficiente de los recursos de
computación.
Arquitectura Lambda
50
Arquitectura Kappa
Una de las motivaciones más importantes para crear la arquitectura Kappa, fue
el evitar dar mantenimiento a dos sistemas separados (la capa batch y la capa
de velocidad). La idea principal es administrar ambos, el procesamiento de
datos y el procesamiento continuo de datos usando un único motor de
procesamiento en línea.
Partiendo de ese objetivo, la arquitectura Kappa, sólo cuenta con dos capas:
capa de tiempo real y capa de servicios. La capa de procesamiento en línea
ejecuta las actividades de procesamiento en línea y las actualizaciones de
código que permiten reprocesar los datos y visualizar los cambios en los
resultados. Normalmente, una tarea de procesamiento en línea es ejecutada
para habilitar el procesamiento de información en tiempo real. Una tarea de
procesamiento de datos en línea en particular, es la encargada de replicar toda
la información previa una vez ejecutados los códigos que modifican
información. Estas tareas son creadas bajo demanda, es decir, las instancias de
streaming que deberán reprocesar información son ejecutadas
51
simultáneamente con las instancias que ejecuta la capa de streaming con
regularidad, posteriormente, deben replicar su ejecución sobre toda la
información previa, para conservar la integridad de la misma y mantener las
reglas de procesamiento actualizadas para cada instancia.
Cuando se desea reprocesar, se inicia una segunda instancia de la tarea que se
encuentra ejecutando el procesamiento en línea (streaming processing)
comenzando a procesar en el inicio de la información ya “retenida” pero
enviando su resultado a una nueva tabla de salida. Cuando la segunda instancia
de la tarea haya terminado de procesar la información se debe cambiar la
aplicación para leer la información de la nueva tabla de salida.
Ventajas:
● Es una simplificación de la arquitectura Lambda, ya que se suprime el
uso de la capa de batch.
● La información es almacenada utilizando un log inmutable de sólo
almacenamiento, del cual se envía a almacenamientos auxiliares para la
capa de serving.
● La arquitectura Kappa permite que la migración y la reorganización de
la información a partir de diversas fuentes de información se ejecuten
de manera eficiente proporcionando la información de manera rápida a
través de la capa de streaming.
● Dada la ausencia de la capa de batch, sólo un código debe de ser
actualizado en caso de necesitar mantenimiento.
● No utiliza un esquema de base de datos relacional o un almacenamiento
basado en valores clave, como SQL o Cassandra, respectivamente.
52
Desventajas:
● Requiere del doble de espacio de almacenamiento en el sistema de base
de datos de salida temporalmente, mientras exista la posibilidad de
reprocesar la información.
● Los sistemas de bases de datos deben de soportar escritura de grandes
volúmenes de registros para el reprocesamiento.
● Las características del hardware requerido para realizar el
reprocesamiento de la información deben considerar un pequeño
porcentaje adicional para los jobs que estarán reprocesando
activamente la información en cualquier momento dado.
LIBROS:
55
20. Use MySQL to store NoSQL and SQL data in the same database using memcached
and InnoDB. ScriptingMySQL.
21. PostgreSQL 9.4beta2 Documentation. The PostgreSQL Global Development
Group, 2014.
1. https://blogs.gartner.com/doug-laney/files/2012/01/ad949-3D-Data-
Management-Controlling-Data-Volume-Velocity-and-Variety.pdf
2. Ericsson, “Ericsson Mobility Report.” http://www.ericsson.com/news/ 1925907
(visited March 2016).
3. https://www.digitalocean.com/community/tutorials/hadoop-storm-samza-
spark-and-flink-big-data-frameworks-compared
4. https://www.digitalocean.com/community/tutorials/an-introduction-to-big-
data-concepts-and-terminology
5. NoSQL Databases Explained. http://www.mongodb.com/nosql-explained
6. NoSQL Databases Defined and Explained. http://planetcassandra.org/what-is-
nosql/#nosql-explained
7. https://dzone.com/articles/lambda-architecture-with-apache-spark
8. Apache Spark: spark.apache.org
9. Apache Hadoop: hadoop.apache.org
10. Apache Storm: storm.apache.org
11. MySQL and Memcached. MySQL: http://www.mysql.com/why-
mysql/memcached/
12. HDFS Architecture Guide.
https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html
13. Controlling Data Volume, Velocity and Variety. https://blogs.gartner.com/doug-
laney/files/2012/01/ad949-3D-Data-Management-Controlling-Data-Volume-
Velocity-and-Variety.pdf
56
14. An Introduction to Big Data Concepts and Terminology.
https://www.digitalocean.com/community/tutorials/an-introduction-to-big-
data-concepts-and-terminology
15. Apache Hadoop. http://hadoop.apache.org
16. Apache Storm. http://storm.apache.org
17. Apache Spark. http://spark.apache.org
18. Spark in Action - Petar Zecevic, Marko Bonaci – ISBN: 978-1617292606
19. Apache Spark - An Engine for Large-Scale Data Processing.
https://dzone.com/refcardz/apache-spark
20. Hadoop, Storm, Samza, Spark, and Flink: Big Data Frameworks Compared.
https://www.digitalocean.com/community/tutorials/hadoop-storm-samza-
spark-and-flink-big-data-frameworks-compared
21. https://dzone.com/articles/lambda-architecture-with-apache-spark
22. Ericsson Mobility Report. http://www.ericsson.com/news/1925907
23. Traffic Data Monitoring Using IoT, Kafka and Spark Streaming.
https://www.infoq.com/articles/traffic-data-monitoring-iot-kafka-and-spark-
streaming
24. IoT Use Case: https://www.infoq.com/articles/traffic-data-monitoring-iot-
kafka-and-spark-streaming
25. Couch DB - The Definitive Guide, http://guide.couchdb.org/index.html
26. Long list of NoSQL papers: http://nosqlsummer.org/papers
57