Maestría en Visual Analytics y Big Data
Bases de Datos para
Datos Masivos
Tema 1
Bases de Datos para el Big Data
Tema 1. Métodos de captura
de información
Índice
Esquema
Ideas clave
1.1. Introducción y objetivos
1.2. Origen y calidad de los datos
1.3. Organización de los datos
1.4. Casos de estudio
1.5. Referencias bibliográficas
A fondo
How do scientists collect data?
Introduction to JSON data
The relational model
Well-formed XML
Introducción a SQL
Introducción a MySQL
7 command-line tools for data science
SQL for Web Nerds
[Link]
Research-Quality Data Sets
[Link]
Bibliografía
Test
Esquema
Bases de Datos para el Big Data 3
Tema 1. Esquema
Ideas clave
1.1. Introducción y objetivos
Este tema realiza una introducción a la asignatura y presenta las definiciones
necesarias sobre las que se basarán los temas posteriores. Para estudiar este tema
se deben leer las Ideas clave y, si se desea información adicional sobre un
concepto específico, se debería consultar las lecturas sugeridas en la bibliografía
(sección A fondo).
La lectura de los casos de estudio también será de ayuda, ya que proporcionan
información de las decisiones tomadas para la captura de datos en un entorno
determinado. Este capítulo servirá tanto de introducción como de repaso de los
conceptos básicos sobre bases de datos en general y bases de datos relacionales en
específico.
En tiempos pasados, la obtención de datos solía ser un proceso costoso y a menudo
requería del trabajo humano para la digitalización de documentos físicos. El continuo
avance de la tecnología permite que los métodos disponibles para la captura de
datos sean cada vez más diversos. Esto, en adición a la disminución del coste por
unidad de almacenamiento, ha resultado en la posibilidad de almacenar grandes
cantidades de datos provenientes de distintas fuentes.
A raíz de esta diversidad, es necesario contar con tres elementos que conforman la
base para capturar datos de forma eficiente y adecuada al uso que se le brindará a
dichos datos:
▸ El primer elemento es la definición y distinción de los términos dato, información y
conocimiento.
▸ El segundo, las dimensiones o criterios de calidad que se analizan en un conjunto de
datos.
Bases de Datos para el Big Data 4
Tema 1. Ideas clave
Ideas clave
▸ El último elemento es la experiencia de analizar casos verdaderos en los que ha
sido necesario capturar datos y almacenarlos.
El aprendizaje de formatos de ficheros de texto como CSV y JSON será de utilidad
en los próximos temas, ya que son formatos utilizados por el sistema de
almacenamiento.
Después de capturar información y poder utilizarla de forma eficiente, será necesario
almacenarla de forma permanente. Así, la información obtenida no residirá
únicamente en la memoria volátil del ordenador, sino que estará disponible para
futuras ocasiones.
El método más básico para almacenar datos es mediante el uso del sistema de
ficheros del sistema operativo. Los ficheros pueden tener un formato plano, donde
toda la información es legible para una persona; o un formato binario, donde la
información puede escribirse y leerse de forma directa por una aplicación, pero no
puede ser analizada directamente de forma manual.
Este tema proporciona un repaso de los mecanismos comúnmente utilizados para el
almacenamiento de información. Se hablará de dos aproximaciones: la utilización
de ficheros planos, que son comúnmente utilizados para el almacenamiento y
compartición de datos, y las bases de datos, que dan un paso más allá y
proporcionan una consistencia en la información y el hecho de poder consultar y
modificar de manera eficiente un conjunto de datos en específico. Es por esto por
lo que se revisará el concepto de base de datos y, en particular, las bases de datos
relacionales.
Además de ser una de las herramientas más comunes en la actualidad, se puede
hacer una analogía entre estas herramientas y el sistema que se utilizarán en otros
temas de la asignatura.
Bases de Datos para el Big Data 5
Tema 1. Ideas clave
Ideas clave
1.2. Origen y calidad de los datos
Datos, información y conocimiento
En situaciones informales es común usar indiscriminadamente los términos dato,
información y conocimiento. En ámbitos profesionales y académicos, es
conveniente distinguir estos conceptos para evitar malinterpretaciones durante las
distintas fases de la analítica de datos.
Existen varias aproximaciones para la distinción de estos términos. En el contexto de
esta asignatura se utilizará la definición descrita por Davenport y Prusak (2000).
Un dato puede definirse como un hecho concreto y discreto acerca de un evento. La
característica de ser discreto significa que, semánticamente, es la unidad mínima
que puede comunicarse o almacenarse. Por sí solos, los datos no brindan detalles
significantes del entorno del que fueron obtenidos. Ejemplos de datos pueden ser:
▸ 2010.
▸ 443.
▸ DE.
L a información puede distinguirse simplemente como un mensaje formado por la
composición de varios datos. Esto significa que, a diferencia del dato, la
información sí posee un significado para un receptor u observador. Por ejemplo,
utilizando los datos anteriores se podría obtener la siguiente información:
▸ El año de establecimiento de la empresa ACME fue el 2010.
▸ La altura del edificio Empire State es de 443 metros.
▸ DE es el código ISO que identifica al idioma alemán.
Bases de Datos para el Big Data 6
Tema 1. Ideas clave
Ideas clave
Los datos deben ser transformados para añadirles valor y convertirlos en
información. Estas transformaciones incluyen métodos como:
▸ Contextualización: conocer el propósito del dato obtenido.
▸ Categorización: conocer la unidad de medida y los componentes del dato.
▸ Cálculo: realizar una operación matemática sobre el dato.
▸ Corrección: eliminar errores del dato.
▸ Agregación: resumir o minimizar un dato de forma más concisa.
El conocimiento implica una combinación de experiencias, información contextual y
relevancia sobre cierta información. Así como la información se genera a partir de
datos, el conocimiento surge de la agregación de información. Ejemplos de métodos
que generan esta transformación son:
▸ Comparación: relación entre información obtenida en distintas experiencias.
▸ Repercusión: implicación de la información en decisiones y acciones.
▸ Conexión: relación entre distintos tipos de información.
▸ Conversación: opinión de otras personas sobre la información.
La jerarquía del conocimiento suele representarse gráficamente por una pirámide,
siendo los datos la base y el conocimiento la cima.
Figura 1. Jerarquía del conocimiento.
Bases de Datos para el Big Data 7
Tema 1. Ideas clave
Ideas clave
Distinguir estos conceptos básicos proporciona un nivel de abstracción útil para la
separación de características en el proceso de análisis. El hecho de que un dato sea
inválido o erróneo debe distinguirse fácilmente de que la información que se
obtiene de dicho conjunto de datos sea adecuada o no al problema que se intenta
resolver.
Por ejemplo, es importante conocer si la malinterpretación de un análisis de datos se
debe a un error en la fuente de datos, a un problema al combinar los datos en el
proceso de análisis o a una confusión por parte del usuario final, debido a
experiencias en otros contextos.
Evaluación de la calidad
Las métricas o dimensiones utilizadas para describir la calidad de un conjunto de
datos pueden agruparse con base en los actores que interactúan con los datos. Los
diseñadores y administradores de almacenes de datos tratan con métricas que
afectan el diseño o esquema de los datos obtenidos y no con los datos directamente.
Entre estas métricas se podría mencionar la completitud de los datos obtenidos y el
minimalismo del conjunto de datos, el cual se interpreta como la eliminación de
redundancias en el diseño del almacén de datos.
Los desarrolladores de software tratan con métricas específicas de la producción
de productos informáticos. Si bien en esta categoría entran métricas que no están
relacionadas con los datos directamente, es importante tener en cuenta que estas
métricas afectan al proceso de almacenaje, acceso y manipulación de los datos.
El último actor que interactúa con los datos es el usuario final, es decir, quien
utilizará los datos presentados para crear una conclusión y tomar una decisión
acorde. Las métricas relevantes para este actor pueden ser el nivel de disponibilidad
de los datos y el nivel de interpretación requerido para entender los datos
presentados.
Bases de Datos para el Big Data 8
Tema 1. Ideas clave
Ideas clave
A partir de estas perspectivas, Jarke et al. (1998) presentan un conjunto de
dimensiones para evaluar las propiedades de un conjunto de datos:
▸ La completitud o cobertura describe el porcentaje de datos disponibles respecto a
la población total que representa dichos datos. Por ejemplo, un conjunto de datos
con información de 90 de 100 tratamientos médicos realizados en un hospital
presenta una cobertura de 90 %. Esto también se aplica a subconjuntos de los datos
obtenidos, por ejemplo, el 5 % de los tratamientos médicos no incluyen la fecha de
finalización del tratamiento, lo cual disminuiría la cobertura debido a esta
característica.
▸ La credibilidad representa la fiabilidad que se le brinda al organismo que
proporciona el conjunto de datos. Esta métrica puede reflejarse en el conjunto de
datos por aquellas características que presenten un valor por defecto. Por ejemplo,
si se habla de postres, es fácil ver que, si incluye valores por defecto como tarta,
helado, fruta, etc., el dato es fiable, pero nunca lo será si se habla de pincho
moruno.
▸ La precisión indica el porcentaje de datos correctos respecto al total disponible.
También se representa por medio de un porcentaje.
▸ La consistencia describe el nivel con el que los datos son coherentes entre ellos.
Un ejemplo de la aplicación de esta métrica se da en datos geográficos: se puede
concluir que si una misma entidad tiene asociada una ciudad y un país que no tienen
relación, existe un problema de consistencia.
▸ La interpretabilidad define el grado en el que los datos pueden ser entendidos
correctamente por una persona. Entre los atributos que definen la interpretabilidad
de un conjunto de datos se puede mencionar la documentación de elementos
importantes y si el formato en el que se proporcionan los datos es entendible.
Bases de Datos para el Big Data 9
Tema 1. Ideas clave
Ideas clave
A continuación, se proporciona un conjunto de datos de fuente desconocida
representadas en la siguiente tabla:
Tabla 1. Datos de ejemplo.
Si analizamos estos datos con respecto a los indicadores de calidad antes
mencionados:
▸ Completitud: 75 % respecto a los datos de consumo, o el mismo porcentaje con
respecto a las revoluciones por minuto del motor del coche.
▸ Credibilidad: al tratarse de una fuente desconocida, la credibilidad es baja debido a
que no se puede comprobar la fuente. Además, por defecto, se sabe que Ferrari
solo hace motores de gasolina y que, por defecto, no existen motores diésel de ese
caballaje.
▸ Precisión: es claro ver que los datos no son precisos, ya que el precio de un súper
deportivo no puede ser de 15 000€ y las revoluciones de algunos coches son
demasiado redondas. Además, un consumo «alto» no es una cifra de consumo.
▸ Consistencia: la consistencia de los datos es baja porque a poco que se entienda
algo de coches, el modelo de Ferrari nunca puede pertenecer a la marca Audi, sino a
Ferrari.
Bases de Datos para el Big Data 10
Tema 1. Ideas clave
Ideas clave
▸ Interpretabilidad: podría mejorarse, puesto que hay muchos datos que no incluyen
unidades o que ofrecen un conjunto de números que si no se está familiarizado con
el entorno no se conocerá su significado, como ocurre con los 3 valores de consumo.
Fuentes de información
Los métodos para la captura de información se pueden clasificar con base en las
características del elemento que genera el conjunto de datos. Las cinco categorías
más utilizadas en la actualidad son:
▸ La captura manual de datos es la categoría más tradicional y también una de las
más frecuentes en el contexto de investigación en ámbitos sociales y naturales.
Entre los métodos que encajan en esta categoría se encuentra el uso de encuestas y
las mediciones a través de observaciones.
Si bien esta es la única categoría que no tiene una dependencia directa de las
tecnologías de información, para su utilización es necesario que la información se
digitalice, ya sea en el momento de la captura o en un procesado posterior.
▸ El procesado de documentos estructurados consiste en la obtención directa de
datos disponibles en documentos, cuyo fin inicial no es ser consultados como fuente
de datos. Uno de los métodos más comunes en esta categoría es el procesado de
páginas HTML en un sitio web, conocido como web scraping.
Otro ejemplo es el análisis de logs o ficheros que contienen un listado secuencial de
los eventos ocurridos dentro de un sistema y son creados con el objetivo de tener
una bitácora y no para ser accedido por otras aplicaciones.
▸ La salida de aplicaciones es una de las categorías más triviales. Los métodos de
este tipo involucran el acceso a almacenes de datos tradicionales, tales como bases
de datos relacionales, ficheros con valores separados por comas ( CSV), etc.
▸ Los datos obtenidos a través de sensores. En este conjunto se pueden mencionar
ejemplos como sensores meteorológicos, sensores de ambiente (ruido o luz),
Bases de Datos para el Big Data 11
Tema 1. Ideas clave
Ideas clave
sensores corporales (ritmo cardíaco o conductividad de la piel) y sensores de
dispositivos móviles (acelerómetro o giroscopio).
Actualmente existe un gran interés en el uso de sensores para la captura de datos en
el contexto personal; este movimiento es conocido como quantified self.
▸ El acceso a datos públicos, ya sea mediante la descarga de conjuntos de datos o
a través de interfaces de programación de aplicaciones (API, por sus siglas en
inglés). Por un lado, muchas de las entidades públicas (como gobiernos centrales y
locales) publican catálogos de datos para que sean analizados y se desarrollen
nuevas aplicaciones a partir de ellos.
La publicación de estos datos de carácter público suele realizarse en un portal
dedicado, por ejemplo [Link] en España, [Link] en Reino
Unido y [Link] en Estados Unidos. Por otro lado, algunas empresas brindan
acceso a datos de forma pública, siendo uno de los fines el formar parte de una
plataforma de desarrollo, como, por ejemplo, los servicios de redes sociales
(Facebook o Twitter) que suelen brindar un API tanto para obtener información sobre
un usuario en particular, como para alterar dicha información.
Bases de Datos para el Big Data 12
Tema 1. Ideas clave
Ideas clave
1.3. Organización de los datos
Ficheros planos
L o s ficheros planos suelen ser un mecanismo utilizado para el intercambio de
información entre sistemas. Una de sus ventajas es que es posible ver y editar el
contenido del fichero con una herramienta de edición de texto.
Estos ficheros suelen ser mucho más verbosos que los ficheros en formato binario, lo
cual implica que su tamaño en el sistema de ficheros será mayor, así como las
operaciones necesarias para procesar el contenido desde un programa de software.
Entre los formatos de fichero plano más comunes se pueden mencionar CSV, JSON
y XML. A continuación, se describen los detalles básicos de cada uno de ellos.
El formato CSV (Comma Separated Values o valores separados por coma), se
documenta en la RFC 4180 y presenta las siguientes características:
▸ Cada registro se delimita por un cambio de línea (combinación de dos caracteres:
CR y LF).
▸ Como su nombre indica, los valores de cada registro se separan mediante el uso de
comas. Es requerido que el número de valores sea constante para todos los
registros disponibles en el fichero.
▸ Los valores pueden estar encapsulados con comillas dobles. Esto es obligatorio en
aquellos casos donde el valor incluye un cambio de línea, una coma o comillas
dobles.
▸ Si un valor contiene comillas dobles, estas deben escaparse precediéndolas con otro
carácter de comillas dobles. Por ejemplo: «Encargado de ""Business Model""»
▸ Opcionalmente, puede incluir una primera línea con los nombres de los campos
que se incluyen en el fichero.
Bases de Datos para el Big Data 13
Tema 1. Ideas clave
Ideas clave
A continuación, se muestra un ejemplo de datos en formato CSV. Se puede apreciar
que el fichero tiene 4 registros, con 3 valores cada uno. Este ejemplo incluye los
títulos de cada valor en la primera fila.
Nombre, Edad, Cargo Juan, 45, Director Antonio, 35, "Gestor de
proyectos" Pablo, 34, "Analista" Pedro, 32, "Administrador de bases de
datos"
El siguiente formato, JSON (JavaScript Object Notation o notación de objetos en
JavaScript) se basa en el lenguaje de programación JavaScript y organiza su
notación en dos estructuras:
▸ Un objeto o registro, definido como un conjunto de pares nombre/valor.
▸ Un array o lista ordenada de valores.
Al ser estructuras de datos muy genéricas, suelen estar soportadas por la mayoría de
los lenguajes de programación modernos. La definición de las estructuras sigue las
siguientes condiciones:
▸ Un objeto se delimita por llaves ({ }) y los pares nombre/valor se separan por medio
de comas, y entre el nombre y el valor se coloca el carácter dos puntos (:).
▸ Un array se delimita por corchetes ([ ]) y los valores se separan por comas.
▸ Cada valor, tanto dentro de un objeto como de un array, puede ser una cadena de
texto delimitada por comillas dobles, un número, un valor booleano (true/false), el
valor nulo (null), un objeto o un array.
Bases de Datos para el Big Data 14
Tema 1. Ideas clave
Ideas clave
La representación de los primeros dos registros del ejemplo en CSV sería la
siguiente en formato JSON:
[{ "Nombre": "Juan", "Edad": 45, "Cargo": "Director" }, { "Nombre":
"Antonio", "Edad": 35, "Cargo": "Gestor de proyectos" }]
Puede observarse que el formato JSON es más verboso, lo cual permite que los
objetos en un documento contengan información heterogénea, al contrario que en un
documento CSV.
Finalmente, el formato XML (eXtended Markup Language o lenguaje de marcas
extensible) es el más verboso de los tres que se representan en este tema. Como su
nombre lo indica, utiliza marcas o etiquetas como parte de la estructura y formato de
los datos que contiene.
Entre las condiciones que debe cumplir un documento que siga el formato XML se
encuentran las siguientes:
▸ El documento inicia con la línea: <?xml version=”1.0”>.
▸ Un documento XML tiene solamente un elemento raíz.
▸ Un elemento en XML se abre mediante una etiqueta delimitada por los signos menor
que y mayor que (<etiqueta>) y se cierra con la misma etiqueta, pero incluyendo una
barra (/) inmediatamente después del menor que (</etiqueta>).
Bases de Datos para el Big Data 15
Tema 1. Ideas clave
Ideas clave
▸ Los elementos pueden tener atributos. Estos se incluyen como pares nombre/valor,
separados por el carácter de igualdad (=) dentro de la etiqueta del elemento. El valor
debe delimitarse por comillas simples o dobles.
▸ El contenido de un elemento puede ser texto, uno o varios elementos, o la
combinación de ambos.
Siguiendo con el mismo ejemplo que en los formatos anteriores, la información de los
dos primeros registros podría representarse con el siguiente contenido:
<empleados> <empleado> <Nombre>Juan</Nombre>
<Edad>45</Edad> <Cargo>Director</Cargo>
</empleado> <empleado> <Nombre>Antonio</Nombre>
<Edad>35</Edad> <Cargo>Gestor de
proyectos</Cargo> </empleado> <empleados>
Aunque las condiciones para crear los ficheros son claras, estas no siempre
garantizan que el fichero XML quede bien formado. Un fichero XML estará bien
formado cuando cumpla todas las características de formato, las cuales podrán
analizarse mediante alguna herramienta de análisis sintáctico, que incluya la norma
correspondiente.
Validación de ficheros XML
Recuerda que todo fichero XML cumple con una jerarquía de etiquetas que garantiza
su estructura. Para ello, las etiquetas estarán contenidas adecuadamente unas
dentro de otras, con su cierre correspondiente. Recuerda también que el fichero XML
debe incluir un único elemento raíz que contendrá las otras etiquetas que existan. El
valor de los atributos, por su parte, deben estar entre comillas simples o dobles; y en
lo que respecta a las etiquetas, estas son sensibles a mayúsculas y minúsculas.
Cuando un XML cumple con estas consideraciones, se dice que este está «bien
Bases de Datos para el Big Data 16
Tema 1. Ideas clave
Ideas clave
formado». Para que se pueda asegurar que el documento XML es «válido», será
necesario validarlo mediante algún otro documento que garantice dicha validez.
Validación de ficheros XML mediante DTD
Uno de esos documentos se llama DTD (Document Type Definition o definición de
tipo de documento). Este documento recoge las reglas que debe cumplir el contenido
del XML (estructura, elementos y atributos que sí puede incluir el fichero), de ahí que
sea útil para garantizar la validez de todo fichero XML que haga referencia a él.
Veamos un ejemplo práctico con el siguiente fichero XML:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mail
SYSTEM "[Link]"> <mail> <to>Pepe</to>
<from>Boss</from> <ubject>Empty Stock</subject>
<body>Remember to buy supplies!</body> </mail>
Observa cómo en la sentencia DOCTYPE se hace referencia al fichero DTD llamado
[Link]. Este fichero es el encargado de definir la estructura correcta para el
documento llamado «mail» y para las etiquetas que este contiene.
Bases de Datos para el Big Data 17
Tema 1. Ideas clave
Ideas clave
Ejemplo del fichero [Link]:
<!DOCTYPE mail [ <!ELEMENT mail (to,from,subject,body)>
<!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)>
<!ELEMENT subject (#PCDATA)> <!ELEMENT body
(#PCDATA)> ]>
La forma de interpretar el DTD es el siguiente:
▸ : establece que el elemento raíz es mail.
▸ : indica los elementos que deben estar contenidos dentro del raíz, esto son to, from,
subject y body.
▸ : indica el tipo del elemento to, en este caso es #PCDATA.
▸ : establece que el elemento from es de tipo #PCDATA.
▸ : establece que el elemento subject es de tipo #PCDATA.
▸ : establece que el elemento body es de tipo #PCDATA.
Para la DTD, #PCDATA significa de tipo texto.
Aunque los DTD son documentos que se usan cada vez menos, es importante que
sepas que estos existen y cuál es su papel de cara a formar y validar ficheros XML.
Validación de ficheros XML mediante esquemas (SCHEMA)
Otra alternativa que existe para validar la estructura y el contenido de los ficheros
XML es mediante esquemas. Un esquema, al igual que un DTD, indica la estructura
que debe llevar un documento XML. Un fichero esquema lleva la extensión XSD y
está definido como un fichero XML, a diferencia de la DTD que utiliza su propio
metalenguaje.
Bases de Datos para el Big Data 18
Tema 1. Ideas clave
Ideas clave
Los XSD ofrecen muchas más opciones para declarar la estructura de los ficheros
XML. De dichas opciones se puede destacar la extensa lista de tipos de datos
predefinidos para elementos y atributos, los cuales a su vez pueden ampliarse o
restringirse para crear nuevos tipos.
Asimismo, permiten indicar con gran precisión la cardinalidad de un elemento (las
veces que dicho elemento puede aparecer en un documento XML). Otra ventaja que
tienen es que, gracias a los espacios de nombres, soportan la mezcla de distintos
conjuntos de etiquetas (vocabularios).
Siguiendo con el ejemplo anterior, un SCHEMA ideal para nuestro fichero XML de
ejemplo podría ser el siguiente:
Ejemplo de fichero [Link]:
<xs:element name="mail"> <xs:complexType>
<xs:sequence> <xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/> <xs:element
name="subject" type="xs:string"/> <xs:element name="body"
type="xs:string"/> </xs:sequence> </xs:complexType>
</xs:element>
Aprovecha este punto para repasar con la clase «Revisión de formatos CSV, XML y
JSON». En ella se presenta un screencast con la revisión en detalle de ficheros con
los formatos vistos en el tema.
Bases de Datos para el Big Data 19
Tema 1. Ideas clave
Ideas clave
Accede al vídeo:
[Link]
499d-ab79-adbe00e8519e
Vídeo 1. Revisión de formatos CSV, XML y JSON.
Bases de datos
Una base de datos es un conjunto de datos persistente utilizado por un sistema de
software. Siguiendo con las definiciones, y tal y como se menciona en la bibliografía,
un sistema de base de datos es un sistema computarizado para el almacenamiento
de registros. Se pueden mencionar cuatro componentes de un sistema de esta
categoría:
▸ Datos. Los datos en un sistema de base de datos pueden definirse como
integrados, en aquellos casos en que todos los datos se mantienen unificados y
comúnmente serán accedidos por una sola persona, así como compartidos, para
aquellos casos en los que se desea mantener los conjuntos de datos separados y
otorgar privilegios de acceso distintos a varias personas.
Bases de Datos para el Big Data 20
Tema 1. Ideas clave
Ideas clave
▸ Hardware. Como en otros métodos de almacenamiento, los componentes de
hardware que intervienen en un sistema de base de datos son los volúmenes de
almacenamiento, así como los procesadores y memoria principal.
▸ Software. La capa de software entre el usuario y la base de datos física se conoce
como DBMS (Database Management System o sistema gestor de la base de datos).
▸ Usuarios. Existen tres clases de usuarios en un sistema de bases de datos:
• Programadores: encargados de crear aplicaciones que permitan la interacción con
la base de datos.
• Usuarios finales: utilizan las distintas aplicaciones y herramientas para interactuar
con la base de datos.
• Administrador de base de datos: también conocido como DBA por sus siglas en
inglés, se encarga de gestionar la estructura, disponibilidad y eficiencia del sistema
de base de datos.
En el contexto de bases de datos se utiliza el término entidad para describir a
cualquier objeto que puede almacenarse en el sistema. Por ejemplo, en una base de
datos utilizada por un almacén se puede tener una entidad producto para describir
los productos disponibles en el almacén y el término bodega para describir las
bodegas con las que cuenta.
Además, se utilizan los términos vínculo o relación para representar las relaciones
entre las entidades. En el ejemplo del almacén, puede haber una relación bodega-
producto para indicar que un producto se almacena en una bodega específica.
Los datos almacenados en una base de datos se pueden categorizar de forma
jerárquica. La unidad más pequeña es el campo, el cual suele tener un tipo (número,
fecha, etc.) y la base de datos tendrá muchas ocurrencias.
Bases de Datos para el Big Data 21
Tema 1. Ideas clave
Ideas clave
Al conjunto de datos que tienen relación entre sí se le denomina registro. Por
ejemplo, un registro de tipo producto puede tener campos como «nombre», «precio»
y «descripción». Finalmente, al conjunto de registros del mismo tipo se le denomina
archivo almacenado.
Bases de datos relacionales y SQL
En un sistema de base de datos relacional, los archivos de datos son representados
por tablas. Cada columna de la tabla representa un campo del archivo, mientras
que cada fila representa un registro de datos. Además, cuando un usuario realiza
una operación sobre una tabla, el resultado de dicha operación también será una
tabla.
Para ejemplificar estos sistemas se ha utilizado el ejemplo de los productos en un
almacén. En este caso, la información de los productos puede almacenarse en una
tabla productos cuyo contenido podría ser el siguiente:
Para interactuar con una base de datos de manera programática, se utiliza el
estándar SQL. Los comandos para la manipulación de datos se pueden resumir en
cuatro:
▸ SELECT: utilizado para obtener un conjunto de datos a partir de una o varias tablas
en un DBMS relacional.
▸ INSERT: comando para agregar un conjunto de registros dentro de una tabla.
▸ UPDATE: permite la modificación de un conjunto de campos sobre un conjunto de
registros en una tabla específica.
Bases de Datos para el Big Data 22
Tema 1. Ideas clave
Ideas clave
▸ DELETE: como su nombre indica, permite eliminar un conjunto de registros de una
tabla.
En general, las funciones básicas que se pueden llevar a cabo sobre una base de
datos se conocen con el acrónimo CRUD, que significa Create, Read, Update and
Delete.
Después de leer gran parte del tema, el reto siguiente es que repases los aspectos
más relevantes de los métodos de captura de información con la clase «Resumen de
los métodos de captura de información». También será útil recordar las principales
características de las bases de datos relacionales y NoSQL.
Accede al vídeo:
[Link]
47fa-93be-aca700e29a9e
Vídeo 2. Resumen de los métodos de captura de información.
Bases de Datos para el Big Data 23
Tema 1. Ideas clave
Ideas clave
1.4. Casos de estudio
Análisis de logs de un servidor web
En este caso de uso se cuenta con un sitio web en el que un equipo de trabajo puede
descargar varios documentos. Los documentos se descargan directamente, los
usuarios se autentican en el servidor y no existe ninguna aplicación web
intermediaria que pueda mantener un registro de los documentos descargados por
cada persona.
Se plantea el problema de generar un informe sobre a qué documentos se accede
con mayor frecuencia y qué usuarios han tenido mayor actividad con estos
documentos. Al no contar con ningún almacenamiento de datos con esta
información, se plantea la solución de capturar los datos necesarios mediante el
procesamiento de logs en el servidor web.
Un ejemplo del contenido de los logs en un servidor web, en este caso el Servidor
HTTP Apache, puede ser el siguiente:
[Link] - juan [21/Nov/[Link] +0100] "GET /resource/152
HTTP/1.1" 200 1368023 "-" "Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107
Safari/537.36" [Link] - juan [21/Nov/[Link] +0100] "GET
/resource/601 HTTP/1.1" 200 92349 "-" "Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107
Safari/537.36" [Link] - juan [21/Nov/[Link] +0100] "GET
/resource/34 HTTP/1.1" 200 5928327 "-" "Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107
Safari/537.36"
Bases de Datos para el Big Data 24
Tema 1. Ideas clave
Ideas clave
Puede observarse que el fichero almacena varios datos sobre la conexión HTTP
realizada hacia el servidor: dirección IP, usuario de autenticación, fecha y hora,
recurso descargado y el agente o navegador utilizado para la conexión. Todos estos
datos pueden capturarse mediante el procesado del fichero y ser almacenados en
una base de datos relacional para realizar el análisis correspondiente y generar el
informe solicitado.
Web scraping de listado de cursos online
El requisito presentado en este caso es capturar la información relacionada a un
conjunto de cursos masivos en línea (MOOCs) disponible en el sitio web Class
Central. La información de estos cursos se presenta en una serie de tablas.
Figura 2. Listado de cursos MOOCs WebScraping.
Al no contar con un API que brinde acceso a los datos, la solución ha sido utilizar la
herramienta de web scraping Scraper. Esta herramienta es una extensión del
navegador Google Chrome y permite capturar los datos presentados de forma
estructurada en formato HTML. Después de capturados, los datos se pueden
exportar a una hoja de cálculo del servicio Google Docs.
Acceso a transacciones bancarias mediante API
Bases de Datos para el Big Data 25
Tema 1. Ideas clave
Ideas clave
La tarea solicitada en este caso es crear un conjunto de visualizaciones sobre los
patrones de compras de un conjunto de personas. Para esto, se dispone de acceso a
información agregada sobre las compras realizadas con tarjeta de débito o crédito en
una ciudad.
Con el fin de evitar dar información personal de los clientes del banco, los datos
publicados se agrupan por código postal, tipo de establecimiento (alimentación,
supermercados, ocio, etc.), día de la semana y hora del día. Los datos disponibles
son:
▸ Número total de compras.
▸ Suma total de las transacciones realizadas dentro de un código postal y por tipo de
establecimiento.
▸ Diez códigos postales asociados a la tarjeta utilizada y que presentan la mayor
frecuencia de aparición.
Los datos se publican a través de un API con servicios web, por lo que el método
utilizado se cae en la categoría acceso a datos públicos. El primer paso necesario
para capturar estos datos ha sido crear una cuenta en el portal de acceso que
contiene el catálogo de datos. A continuación, se ha desarrollado una serie de scripts
para la captura de datos, siguiendo la documentación proporcionada por el mismo
portal.
Productos en formato CSV
En este caso, se cuenta con información de un inventario de productos. Los datos
capturados de cada producto son el identificador (de tipo numérico), el nombre (de
tipo cadena de texto) y la cantidad (de tipo numérico).
Bases de Datos para el Big Data 26
Tema 1. Ideas clave
Ideas clave
Se plantea el problema de definir el formato de un fichero CSV que almacene los
datos del inventario. Una de las condiciones presentadas es incluir el nombre de los
campos para que no se genere ninguna confusión al procesar el fichero.
Un ejemplo del formato y el contenido del fichero CSV, siguiendo los requisitos
planteados, es el siguiente:
identificador, nombre, cantidad 1, Plato, 150 2, Sartén, 100 3, Jarra, 200 4,
Vaso, 150
Como puede observarse, ninguno de los valores incluidos en el campo «nombre»
incluye caracteres especiales tales como las comillas dobles, el cambio de línea o la
coma. Por esta razón estos valores no están delimitados por comillas dobles.
Información geolocalizada en formato JSON
En esta situación se cuenta con información de la actividad geolocalizada de una
persona. Esta característica de geolocalización implica que entre los datos
disponibles se encuentra la ubicación del usuario en términos de longitud y latitud,
los cuales se representan por un número decimal. Además de la ubicación, se ha
capturado un identificador de usuario y el momento de la captura, en formato de
fecha y hora.
El requisito en este caso es especificar el formato de un fichero JSON que incluya
esta información. Una posible solución es la siguiente:
[{ "usuario": 1, "ubicacion": { "longitud": 40, "latitud": -3 }, "timestamp":
"2012-12-01 13:00" }, { "usuario": 2, "ubicacion": { "longitud": 40.1, "latitud":
-3.2 }, "timestamp": "2012-12-03 10:30" }]
Puede observarse que la ubicación del usuario se ha definido como un objeto
Bases de Datos para el Big Data 27
Tema 1. Ideas clave
Ideas clave
perteneciente al de la actividad del usuario. Esta estructura toma ventaja de la
recurrencia brindada por el formato JSON.
Información de clientes en una base de datos relacional
Este último caso contempla el almacenamiento de información sobre clientes en una
base de datos relacional. La información para almacenar consiste en un identificador
de cliente, el primer nombre, los apellidos y la fecha en la que se suscribieron al
servicio.
Al tratarse de una base de datos relacional, la información capturada se representará
en la forma de tabla. Así, un ejemplo de esta tabla se puede visualizar en la siguiente
estructura.
Tabla 2. Información de clientes, datos de ejemplo.
Bases de Datos para el Big Data 28
Tema 1. Ideas clave
Ideas clave
En la lección «Captura de información a través de Web Scraping» se presenta un
screencast de la captura de datos desde una página web utilizando la herramienta
Scraper.
Accede al vídeo:
[Link]
4a7b-9edf-adbe00e851aa
Vídeo 3. Captura de información a través de Web Scraping.
Bases de Datos para el Big Data 29
Tema 1. Ideas clave
Ideas clave
En este último vídeo podrás hacer un repaso general de lo visto en este tema,
especialmente lo que concierne al origen, la calidad y la organización de los datos.
Accede al vídeo:
[Link]
47a2-b2cb-aca700d73945
Vídeo 4. Repaso general del primer tema de la asignatura.
Bases de Datos para el Big Data 30
Tema 1. Ideas clave
Ideas clave
1.5. Referencias bibliográficas
Davenport, T., y Prusak, L. (2000). Working knowledge: how organizations manage
what they know. Harvard Business Review Press.
Jarke, M., Jeusfeld, M. A., Quix, C., y Vassiliadis, P. (1998). Architecture and quality
of data warehouses: an extended repository approach. Advanced Information
Systems Engineering, Lecture Notes in Computer Science, 1413, 243-260.
Bases de Datos para el Big Data 31
Tema 1. Ideas clave
A fondo
How do scientists collect data?
Genoino, C. (5 de diciembre de 2012). How do scientists collect data? [Archivo de
vídeo]. [Link]
Este breve vídeo describe los datos obtenidos por un grupo de científicos
especializados en biología marina. Es interesante observar la cantidad de datos
contextuales que serán utilizados en el análisis.
Bases de Datos para el Big Data 32
Tema 1. A fondo
A fondo
Introduction to JSON data
Stanford Dbclass. (26 de diciembre de 2013). 04 01 json intro part1 [Archivo de
vídeo]. [Link]
Este vídeo explica detalladamente los aspectos básicos del formato JSON. El vídeo
forma parte del curso abierto masivo «Introducción a Base de Datos», ofrecido por la
Universidad de Stanford.
Bases de Datos para el Big Data 33
Tema 1. A fondo
A fondo
The relational model
Stanford Dbclass. (4 de enero de 2013). 02-01-relational-model.mp4 [Archivo de
vídeo]. [Link]
Otro vídeo del curso «Introducción a Base de Datos» de la profesora Jennifer Widom.
En este caso se presenta una explicación muy detallada del modelo de base de
datos relacional.
Bases de Datos para el Big Data 34
Tema 1. A fondo
A fondo
Well-formed XML
Stanford Dbclass. (4 de enero de 2013). 03-01-well-formed-xml.mp4 [Archivo de
vídeo]. [Link]
Un último vídeo del curso «Introducción a Bases de Datos» con relación al contenido
de este tema. Este vídeo brinda una introducción muy ilustrativa al estándar XML,
además de analizar las características de un documento con sintaxis correcta.
Bases de Datos para el Big Data 35
Tema 1. A fondo
A fondo
Introducción a SQL
Exitae Informática. (25 de abril de 2013). Introducción a SQL [Archivo de vídeo].
[Link]
Este vídeo presenta de forma muy guiada el uso de SQL a través de una consola. Se
muestran ejemplos tanto de comandos para la creación y modificación de tablas, así
como consultas, actualización y eliminación de datos.
Bases de Datos para el Big Data 36
Tema 1. A fondo
A fondo
Introducción a MySQL
edureka! (23 de octubre de 2018). MySQL Tutorial For Beginners | Introduction to
MySQL | Learn MySQL | MySQL Training | Edureka [Archivo de
vídeo].[Link]
Este vídeo hace un recorrido por las principales características de uno de los
motores de bases de datos SQL gratuitos, muy usado tanto en la industria como en
la investigación.
Aunque no es una base de datos que veas en la asignatura, es recomendable que
hagas el ejercicio de instalarla e intentar usarla con alguna aplicación para que
asimiles su uso de cara a futuros retos profesionales.
Bases de Datos para el Big Data 37
Tema 1. A fondo
A fondo
7 command-line tools for data science
Janssens, J. (19 de septiembre de 2013). 7 Command-Line Tools for Data
S c i e n c e . Data Science Workshops [Página
w e b ] . [Link]
[Link]
Post en el blog de Jeroen Janssens con una recopilación de herramientas para el
tratamiento de ficheros JSON y CSV desde la línea de comando de Unix. Aun si Unix
no es la plataforma que utilizas regularmente, es interesante analizar el uso de estos
ficheros en un entorno real de analítica de datos (nunca pasan de moda).
Bases de Datos para el Big Data 38
Tema 1. A fondo
A fondo
SQL for Web Nerds
Greenspun, P. (s.f.). SQL for Web Nerdsweb [Página
web].[Link]
Completo tutorial sobre bases de datos relacionales y SQL. El autor, Philip
Greenspun, profesor del Instituto Tecnológico de Massachusetts, describe de forma
muy detallada las razones por las que los desarrolladores de aplicaciones web tienen
la necesidad de utilizar bases de datos relacionales.
Bases de Datos para el Big Data 39
Tema 1. A fondo
A fondo
[Link]
Open Knowledge Foundation. (s.f.). Data Portals [Página web]. [Link]
Listado de catálogos de datos abiertos. Los catálogos están organizados por nivel
(local, estatal, nacional, etc.) y por grupos.
Bases de Datos para el Big Data 40
Tema 1. A fondo
A fondo
Research-Quality Data Sets
Kaggle. (2019). Página web. [Link]
Listado de conjuntos de datos abiertos y con la calidad requerida como para
utilizarlos con fines de investigación.
Bases de Datos para el Big Data 41
Tema 1. A fondo
A fondo
[Link]
JSON. (s.f.). Introducción a JSON [Página web]. [Link]
Página oficial de la especificación del formato JSON.
Bases de Datos para el Big Data 42
Tema 1. A fondo
A fondo
Bibliografía
Chakrabarti, S. (2003). Mining the web: discovering knowledge from hypertext data
(pp. 17-43). Morgan Kaufmann.
Debenham, J. (1998). Knowledge engineering. Unifying knowledge base and
database design (pp. 15-22). Springer.
Matallah, H., Belalem, G., & Bouamrane, K. (2021). Comparative study between the
MySQL relational database and the MongoDB NoSQL database. International Journal
of Software Science and Computational Intelligence (IJSSCI), 13(3), 38-63.
Meier, A., & Kaufmann, M. (2019). SQL & NoSQL databases. Springer Fachmedien
Wiesbaden.
de Oliveira, V. F., Pessoa, M. A. D. O., Junqueira, F., & Miyagi, P. E. (2021). SQL
and NoSQL Databases in the Context of Industry 4.0. Machines, 10(1), 20.
Redman, T. C. (1996). Data quality for the information age (pp. 245-267). Artech
House.
Shafranovich, Y. (2005). Common format and MIME type for Comma-Separated
Values (CSV) files. Internet Engineering Task Force IETF RFC 4180.
Sumalatha, A., Vookanti, R., & Vannala, S. (2021). Study on Applications of SQL and
Not only SQL Databases used for Big Data Analytics. International Journal For
Research & Development In Technology, 15, 127-130.
Wanumen, L. F. (2018). Bases de datos en SQL server. Ecoe Ediciones. Disponible
en la Biblioteca Virtual de UNIR.
Bases de Datos para el Big Data 43
Tema 1. A fondo
Test
1. ¿Cuál es la unidad semántica mínima que puede almacenarse o comunicarse?
A. Dato.
B. Información.
C. Conocimiento.
D. Las respuestas A y B son correctas.
2. ¿Qué métodos pueden utilizarse para la transformación de información a
conocimiento?
A. Contextualización, agregación y cálculo.
B. Repercusión, conexión y conversación.
C. Categorización, corrección y agregación.
D. Análisis, investigación y discusión.
3. ¿Qué métrica de calidad describe la proporción en la que un conjunto de datos
contiene a la población que representa?
A. Precisión.
B. Consistencia.
C. Completitud.
D. Interpretabilidad.
4. ¿Cuál de los siguientes es un ejemplo de método de captura manual?
A. Web scraping.
B. Encuestas.
C. Acceso a bases de datos relacionales.
D. Lectura de termómetro digital.
Bases de Datos para el Big Data 44
Tema 1. Test
Test
5. ¿En qué categoría de captura de datos entra la lectura de información del
acelerómetro y giroscopio de un teléfono móvil?
A. Captura manual.
B. Procesamiento de documentos.
C. Acceso a datos públicos.
D. Sensores.
6. ¿Qué elemento es utilizado para delimitar valores en un fichero CSV?
A. Coma.
B. CRLF.
C. Comillas dobles.
D. Espacio.
7. ¿Sobre qué estructuras se basa el formato JSON?
A. Objetos y diccionarios.
B. Tablas hash.
C. Objetos y arrays.
D. Listas enlazadas.
8. ¿Cuál de las siguientes condiciones sobre XML es verdadera?
A. Un documento solo puede tener un elemento raíz.
B. El contenido de un elemento debe ser otro elemento.
C. Todo elemento debe tener un atributo llamado «id».
D. Los atributos deben de ser de tipo numérico.
Bases de Datos para el Big Data 45
Tema 1. Test
Test
9. ¿Qué nombre recibe un conjunto de datos persistente utilizado por un sistema de
software?
A. Archivo.
B. Base de datos.
C. Registro.
D. Las respuestas A y B son correctas.
10. ¿Cuál es la instrucción de SQL para consultar información?
A. SELECT.
B. INSERT.
C. UPDATE.
D. DELETE.
Bases de Datos para el Big Data 46
Tema 1. Test
Tema 2
Bases de Datos para el Big Data
Tema 2. NoSQL
Índice
Esquema
Ideas clave
2.1. Introducción y objetivos
2.2. Descripción y tipos de bases de datos NoSQL
2.3. Teorema CAP
2.4. Elección de base de datos: NoSQL vs. SQL
2.5. Bases de datos NoSQL
A fondo
Building your first MongoDB application
Entendiendo MongoDB
[Link]
Introducción a Apache Cassandra
Introducción a No4j y modelo de datos
Comparativa NoSQL vs. SQL
Bibliografía
Test
Esquema
Bases de Datos para el Big Data 3
Tema 2. Esquema
Ideas clave
2.1. Introducción y objetivos
Para estudiar este tema se deben leer las Ideas clave que se encuentran a
continuación. La mayoría de la literatura relacionada con este sistema se encuentra
en inglés, por lo que no es necesario que leas la bibliografía recogida en la sección A
fondo, pero sí se sugiere revisarla.
Este tema sirve de introducción a las bases de datos categorizadas como NoSQL.
Además de explicar algunos de los conceptos básicos de NoSQL, se introducen
algunos de los motores de bases de datos más importantes actualmente. Se
recomienda acceder a los enlaces del fabricante si se quiere tener un conocimiento
mayor de cada uno de ellos.
Como en la mayoría de las asignaturas relacionadas con herramientas de desarrollo,
la mejor manera de estudiar este tema es mediante la realización de ejercicios. La
generación de grandes cantidades de datos en varias industrias se ha manifestado
en el movimiento y término big data. Entre las implicaciones de este movimiento se
encuentra la creciente demanda de sistemas de gestión de bases de datos, que
permita manejar grandes cantidades de datos.
Hasta hace algunos años, esta demanda se satisfacía mediante el uso de DBMS
relacionales en arquitecturas distribuidas, además de un constante análisis de
rendimiento. Esta solución se ha quedado corta en algunos casos, por lo que han
empezado a surgir nuevas propuestas que se alejan de los típicos sistemas de bases
de datos relacionales. En temas posteriores se estudiará con mayor detalle el uso de
diferentes bases de datos comúnmente llamadas NoSQL.
Los objetivos que se cubren con en este tema son los siguientes:
▸ Comprender los conceptos que describen las bases de datos NoSQL.
Bases de Datos para el Big Data 4
Tema 2. Ideas clave
Ideas clave
▸ Diferenciar una base de datos NoSQL y una SQL.
▸ Entender el teorema CAP y usarlo como parte del argumento para elegir una base
de datos NoSQL como parte de una solución.
▸ Diferenciar las bases de datos NoSQL por su tipología.
▸ Conocer las principales bases de datos NoSQL del mercado.
Bases de Datos para el Big Data 5
Tema 2. Ideas clave
Ideas clave
2.2. Descripción y tipos de bases de datos NoSQL
El término NoSQL se definió en 2009 con el fin de agrupar todas aquellas bases de
datos no relacionales que estaban ganando popularidad en ese momento. El término
NoSQL hace alusión a métodos de almacenamiento no necesariamente
estructurados, cuyo lenguaje de consulta «no es SQL» o «no solo es SQL», «Not
only SQL».
Historia del paradigma NoSQL
Aunque se habla mucho de NoSQL actualmente, no es una tecnología tan nueva
como la gente se piensa. El nombre NoSQL fue utilizado por Carlo Strozzi en 1998
como nombre de la base de datos basada en archivos que estaba desarrollando.
Irónicamente, esta base de datos relacional era solo una interfaz SQL, por lo que no
forma parte del movimiento NoSQL actual.
El término volvió a surgir en 2009, cuando Eric Evans lo utilizo para referirse al
continuo aumento de bases de datos no relacionales. Aunque el nombre naciera en
2009, las bases de datos NoSQL se remontan a la época de las bases de datos de
red y jerárquicas y una serie de productos no relacionales que resolvían problemas
que nada tienen que ver con los de Amazon, YouTube, Facebook, Twitter, Netflix o
Yahoo.
Las bases de datos MultiValue fueron desarrolladas por TRW en 1965. En 1966 se
desarrolló en el Hospital Mass General un lenguaje de programación que incorpora
una base de datos jerárquica con almacenamiento de árbol B+. En ese mismo año,
IBM IMS con Rockwell y Caterpillar desarrollaron una base de datos jerárquica para
el programa espacial Apolo.
A lo largo de los años, son muchas las bases de datos que han ido surgiendo, pero si
algo ha contribuido al desarrollo de los productos NoSQL, ha sido la serie de papers
Bases de Datos para el Big Data 6
Tema 2. Ideas clave
Ideas clave
publicados por Google entre 2003 y 2006 sobre cómo construir una infraestructura
escalable para el procesamiento paralelo de grandes volúmenes de datos, que
originó Hadoop (y luego Hadoop MapReduce de Yahoo). Más tarde, en 2007
Amazon liberó su servicio de base de datos NoSQL, DynamoDB, con un modelo de
datos clave-valor de alta disponibilidad.
En 2012, la cantidad de bases de datos NoSQL ha llegado a ser superior a 120 y
cada año están saliendo más y más, con el fin de ocupar su lugar en el mercado o
creándose con la necesidad de suplir unas características específicas.
Categorías conocidas
Las bases de datos NoSQL pueden clasificarse en cuatro grandes categorías:
▸ Almacenes de clave-valor simples. Como su nombre indica, utilizan una clave
para acceder a un valor en específico. Los valores almacenados se manejan como
arrays de bytes, es decir, sin ningún esquema específico asignado. Su aplicación es
común en sistemas de caché. Uno de los sistemas más conocidos en esta categoría
es memcached, el cual es el sistema de facto para la gestión de caché de datos en
aplicaciones web.
▸ Almacenes de clave-valor sofisticados. Estos sistemas son un refinamiento de la
categoría anterior con el objetivo de permitir operaciones de lectura y escritura más
complejas, así como un modelo de datos ligeramente más elaborado. Ejemplos de
sistemas en esta categoría son Cassandra, Dynamo, Voldemort y Riak.
▸ Almacenes de documentos. Los sistemas dentro de esta categoría permiten
almacenar estructuras de datos relativamente complejas. Las implementaciones más
conocidas en este grupo son CouchDB y MongoDB, la cual se estudiará con más
detalle.
Bases de Datos para el Big Data 7
Tema 2. Ideas clave
Ideas clave
▸ Almacenes de grafos. Las bases de datos que entran en esta categoría son las que
almacenan la información en estructuras de grafos, cuyos nodos representan la
información y las aristas, sus relaciones. Las bases de datos de grafos brindan la
facilidad de consultar su información aplicando teoría de grafos.
Dicha teoría comprende un gran número de algoritmos conocidos, que optimizan el
recorrido de todos los elementos del grafo (la base de datos), ofreciendo así una
navegación mucho más eficiente que las bases de datos relacionales. Algunas
implementaciones conocidas son InfoGrid, Virtuoso y Neo4j.
Existe otro tipo de bases de datos llamadas multimodelos, las cuales combinan
características de los cuatro tipos antes descritos. Esta unión de características les
permite ofrecer una variedad de funcionalidades muy útiles de cara a la explotación
de la información.
El hecho de que soporten varios modelos amplía la forma de interactuar con los
datos, independientemente del modelo de datos que se esté utilizando. Esto último
brinda a los desarrolladores flexibilidad a la hora de construir sus aplicaciones dentro
de la compañía, sin preocuparse de las características del dato.
Dentro de este tipo de bases de datos se encuentra Redis. Redis es una base de
datos NoSQL multimodelo que permite búsquedas, mensajería, transmisión, grafos y
otras capacidades más allá de las que ofrece un simple almacén de datos.
Bases de Datos para el Big Data 8
Tema 2. Ideas clave
Ideas clave
2.3. Teorema CAP
En el apartado anterior se describieron las cuatro grandes categorías que engloban a
las bases de datos NoSQL, según la forma de almacenar la información. Existen
también otras características que describen aspectos claves del motor de base de
datos, tales como que sea escalar (que pueda crecer sin mayores contratiempos) y
que además trabaje en entornos distribuidos.
Las bases de datos NoSQL fueron diseñadas precisamente para ser escalables y
distribuidas, es por ello por lo que al mencionarlas no se debe pasar por alto un
teorema importante que las define según sus capacidades y limitaciones.
Teorema CAP
El teorema CAP, o también llamado teorema Brewer, indica que todos los sistemas
distribuidos no pueden garantizar a la vez que haya consistencia, disponibilidad y
tolerancia a particiones (consistency-availability-partition tolerance). Estas tres
características se definen a continuación:
▸ Consistencia: sin importar qué servidor reciba la petición, cuando se realiza una
consulta o se hace una inserción, el sistema siempre debe devolver la misma
información de respuesta.
▸ Disponibilidad: la caída de uno o más nodos no debe ser un impedimento para que
los clientes puedan leer y escribir peticiones.
▸ Tolerancia a particiones: hace referencia al hecho de que el sistema tiene que
seguir funcionando, aunque existan fallos o caídas parciales que dividan el sistema.
La división por particiones es una característica de los sistemas distribuidos que
permite canalizar grandes flujos de peticiones.
Bases de Datos para el Big Data 9
Tema 2. Ideas clave
Ideas clave
Un ejemplo común de ello son las grandes organizaciones como Netflix, Amazon y
Google, entre otras, las cuales crean divisiones geográficas con las que reparten las
peticiones de determinas regiones. Si una región de estas cae, el sistema no debe
caer en su totalidad.
Bases de datos NoSQL según el teorema CAP
Las bases de datos NoSQL utilizan diferentes mecanismos para conseguir ser
escalables y distribuidas. La variedad de estos mecanismos hace que no todas
cumplan los principios del teorema CAP.
Figura 1. Las bases de datos NoSQL y su relación con el Teorema CAP.
Según sus capacidades, es posible ver cómo las distintas bases de datos cumplen al
menos dos de los criterios indicados por el teorema CAP.
▸ CA: garantizan la consistencia y la disponibilidad en la base de datos, pero no
suelen ser óptimas al manejar la tolerancia a particiones. Para cubrir esta
deficiencia, lo que suelen hacer es replicar los datos.
Bases de Datos para el Big Data 10
Tema 2. Ideas clave
Ideas clave
▸ AP: garantizan la disponibilidad y la tolerancia a particiones, pero no suelen ser
buenas tratando la consistencia. Determinados motores logran una consistencia
parcial mediante técnicas de replicación y verificación.
▸ CP: garantizan la consistencia y la tolerancia a particiones, pero sacrifican la
disponibilidad al replicar los datos entre los distintos nodos con el fin de asegurar la
consistencia.
Esta clasificación no siempre será igual para todas las bases de datos NoSQL. Cada
cierto tiempo, las actualizaciones de estos productos mejoran las funcionalidades y
ofrecen mayores ventajas al usuario con el fin de poder acompañarle en distintas
áreas de negocio.
Bases de Datos para el Big Data 11
Tema 2. Ideas clave
Ideas clave
2.4. Elección de base de datos: NoSQL vs. SQL
Uso de NoSQL vs. usos de SQL
Se puede decir que las bases de datos tradicionales son las bases de datos
relacionales, que usan un lenguaje estándar para su manipulación y gestión. Su éxito
se basa en que es una solución para los problemas de gestión y estructuración de la
información de las organizaciones, con un fundamento matemático muy fuerte,
lenguaje estandarizado con metodologías estructuradas para el diseño de los
sistemas de información y con principios de diseño como la regla ACID (Atómica
Consistente Aislada y Durable). Estas plataformas tienen muchas herramientas
desarrolladas.
Las NoSQL son un conjunto de bases de datos que no se ajustan al modelo de base
de datos relacional y se caracterizan por no tener esquema, por no utilizar SQL ni
permitir joins, por no garantizar la propiedad ACID, por escalar horizontalmente, por
hacer uso amplio de la memoria principal del ordenador, por resolver el problema de
los altos volúmenes de información y la inmensa cantidad de consultas y
transacciones diarias; en resumen, no son relacionales.
Una de las características de NoSQL, como ya se ha dicho antes, es la flexibilidad
que proporciona para el uso de modelos de datos, la cual permite tener registros con
modelos diferentes. Se puede disponer de registro en el que el atributo «color»
aparezca o exista y de registros similares que no contengan dicho atributo, y en otros
casos que el atributo sea un array o una cadena de caracteres, sin que ocasione
ningún tipo de error en base de datos.
El gran problema que tiene esta flexibilidad es la capacidad de introducir errores
tanto de desarrollo como de insertado, por lo que el programador tiene una alta
responsabilidad al lidiar con los datos, ya que de no hacerlo correctamente dará lugar
a alteraciones del modelo que generen errores en la aplicación.
Bases de Datos para el Big Data 12
Tema 2. Ideas clave
Ideas clave
Como punto a favor de esta y otras características, mejoran mucho el rendimiento,
principal característica de las arquitecturas NoSQL, pero esto no significa que los
datos no respondan a un modelo fijo si así se quiere.
A continuación, se enumeran una serie de ventajas de las bases de datos NoSQL:
▸ Responden a la necesidad de escalabilidades horizontal demandada cada vez por
más empresas y, además, de manera sencilla.
▸ No generan cuellos de botella.
▸ Permiten manejar grandes volúmenes de datos.
▸ Se pueden tener diferentes bases de datos NoSQL para diferentes proyectos.
▸ Equipos económicos para la puesta en marcha.
Por el contrario, tiene una serie de desventajas que según la necesidad hacen de su
utilización más o menos conveniente:
▸ Aunque esté cambiando esta premisa, no ofrecen tanto soporte y nombre como lo
hacen bases de datos como Oracle, IBM o Microsoft. Generalmente un vendedor de
código abierto no tiene el alcance global, servicios de soporte y la credibilidad de
Oracle o IBM.
▸ No están lo suficientemente maduras para algunas empresas.
▸ Limitaciones de inteligencia de negocios. Por el momento, las bases de datos
NoSQL no tienen buena aceptación con las herramientas de BI, lo que origina que
una consulta ad hoc y su análisis implica conocimientos avanzados de
programación. Sin embargo, esta tendencia está cambiando, por ejemplo, Quest
Software ha creado Toad para bases de datos en la nube, que proporciona
capacidades de consulta ad hoc para algunas bases de datos NoSQL.
Bases de Datos para el Big Data 13
Tema 2. Ideas clave
Ideas clave
▸ La falta de experiencia. Debido a que NoSQL es una tecnología novedosa, no hay
una gran cantidad de desarrolladores y administradores que la dominen. Esto hace
difícil a las empresas encontrar personas con los conocimientos técnicos apropiados.
▸ Problemas de compatibilidad. A diferencia de las bases de datos relacionales, que
comparten ciertos estándares, las bases de datos NoSQL tienen pocas normas en
común. Cada base de datos NoSQL tiene su propia API, las interfaces de consultas
son únicas y tienen peculiaridades. Esta falta de normas hace difícil el cambio de
unos proveedores a otros.
Bases de Datos para el Big Data 14
Tema 2. Ideas clave
Ideas clave
2.5. Bases de datos NoSQL
Cassandra
Apache Cassandra es una base de datos NoSQL distribuida de código abierto escrita
en Java. Está basada en un modelo de almacenamiento clave-valor y se caracteriza
en que los nodos que componen el sistema de datos actúan por igual agrupándose
en un anillo o clúster. La escalabilidad es lineal y basta con añadir un nuevo nodo al
anillo. Permite configurar un sistema de réplicas creando redundancia en sus nodos.
El modelo de datos de Cassandra se compone de:
▸ Esquema: se encarga del control de acceso y es equivalente a una base de datos.
▸ Tablas: se compone de un mapa de filas. Una primera tabla define los nombres de
las columnas y el tipo de datos que almacenan y las aplicaciones cliente
proporcionan las filas siguiendo el esquema de la tabla.
▸ Tipos de datos: ascii, boolean, blob (contenido de bytes arbitrario), composite,
counter, timestamp, decima, double, float, int, variant, bigint, text, carchar, uuid.
▸ Filas: la primera columna una clave de partición.
▸ Columnas: están compuestas de un timestamp y un par clave-valor.
Cassandra Query Language (CQL) es el lenguaje utilizado para proporcionar acceso
a datos y es una simplificación del lenguaje SQL. Se puede interactuar con los datos
a través de Shell, con herramientas gráficas como devCenter o a través de drivers
disponibles para la mayoría de los lenguajes de programación.
Bases de Datos para el Big Data 15
Tema 2. Ideas clave
Ideas clave
A continuación, se detallan algunas características que reporta el fabricante:
▸ Probado: Cassandra es utilizado en empresas como Constant Contact, CERN,
Comcast, eBay, GitHub, GoDaddy, Hulu, Instagram, Intuit, Netflix, Reddit, The
Weather Channel y más de 1500 empresas más que tienen conjuntos de datos
grandes y activos.
▸ Tolerante a fallo: los datos se replican automáticamente en varios nodos para
tolerancia a fallos. Se admite la replicación en varios centros de datos. Los nodos
fallidos se pueden reemplazar sin tiempo de inactividad.
▸ Rendimiento: una de las principales ventajas son sus resultados en benchmarks y
aplicaciones reales, principalmente debido a las opciones arquitectónicas
fundamentales.
▸ Descentralizado: no hay puntos únicos de fracaso. No hay cuellos de botella en la
red. Cada nodo del clúster es idéntico.
▸ Escalable: algunos de los mayores despliegues en entornos de producción son el
de Apple, con más de 75 000 nodos almacenando más de 10 PB de datos, Netflix
(2500 nodos, 420 TB, más de 1 billón de solicitudes por día), Easou (270 nodos, 300
TB, más de 800 millones de solicitudes por día) y eBay (más de 100 nodos, 250 TB).
▸ Durable: Cassandra es adecuado para aplicaciones que no pueden darse el lujo de
perder datos, incluso cuando se cae un centro de datos entero.
▸ Control: se puede elegir entre replicación síncrona o asíncrona para cada
actualización. Las operaciones asíncronas altamente asequibles se optimizan con
funciones como Hinted Handoff y Read Repair.
▸ Elástico: El rendimiento de lectura y escritura aumenta de forma lineal a medida que
se agregan nuevas máquinas, sin interrupciones ni interrupciones en las
aplicaciones.
Bases de Datos para el Big Data 16
Tema 2. Ideas clave
Ideas clave
▸ Apoyado profesionalmente: los contratos y servicios de soporte de Cassandra
están disponibles a través de terceros.
Neo4j
Es un sistema de gestión de base de datos basada en grafos, desarrollado por Neo
Technology, Inc en Java lanzada en febrero del 2010. Descrito por sus
desarrolladores como una base de datos transaccional compatible con ACID con
almacenamiento y procesamiento de grafos nativos.
Un grafo se compone de dos elementos: un nodo y una relación. Cada nodo
representa una entidad (una persona, un lugar, una cosa, una categoría u otra pieza
de datos) y cada relación representa cómo se asocian dos nodos. Esta estructura de
propósito general permite modelar todo tipo de escenarios, desde un sistema de
carreteras hasta una red de dispositivos, la historia médica de una población o
cualquier otra cosa definida por las relaciones.
Una base de datos de grafos es un sistema de gestión de bases de datos en línea
con operaciones Create, Read, Update y Delete (CRUD) que trabajan en un modelo
de datos de grafos. A diferencia de otras bases de datos, las relaciones tienen
prioridad en las bases de datos de grafos. Esto significa que su aplicación no tiene
que inferir conexiones de datos usando cosas como claves externas o procesamiento
fuera de banda, como MapReduce.
El modelo de datos para una base de datos de grafos también es significativamente
más simple y expresivo que los de bases de datos relacionales u otras bases de
datos NoSQL. Las bases de datos de grafos están diseñadas para utilizarse con
sistemas transaccionales (OLTP) y están diseñadas teniendo en cuenta la integridad
transaccional y la disponibilidad operativa.
Bases de Datos para el Big Data 17
Tema 2. Ideas clave
Ideas clave
Dos de las propiedades más importantes de esta tecnología son:
▸ Almacenamiento de grafos: algunas bases de datos de grafos utilizan
almacenamiento nativo diseñado específicamente para almacenar y administrar
grafos, mientras que otros utilizan bases de datos relacionales u orientados a objetos
en su lugar. El almacenamiento no nativo suele ser mucho más latente.
▸ Motor de procesamiento de grafos: el procesamiento del grafo nativo (también
conocido como «adyacencia libre de índice») es el medio más eficiente de procesar
los datos de los grafos, ya que los nodos conectados se «apuntan» físicamente
entre sí en la base de datos. El procesamiento de grafos no nativos usa otros
medios para procesar operaciones CRUD.
Una base de datos de grafos está diseñada específicamente para manejar datos
altamente conectados y el aumento en el volumen y la conexión de los datos
actuales presenta una tremenda oportunidad para una ventaja competitiva sostenida.
Algunas de las principales ventajas de esta base de datos son las siguientes:
▸ Actuación: para el manejo intensivo de la relación de datos, las bases de datos de
grafos mejoran el rendimiento en varios órdenes de magnitud. Con las bases de
datos tradicionales, las consultas relacionadas aumentan el tiempo de búsqueda
según aumenta el número y la profundidad de las relaciones. Por el contrario, el
rendimiento de la base de datos de grafos permanece constante, a medida que sus
datos crecen año tras año.
▸ Flexibilidad: con bases de datos de grafos, los equipos de TI y de arquitectos de
datos se mueven a la velocidad de los negocios, porque la estructura y el esquema
de un modelo de grafos se amolda a medida que cambian las aplicaciones y las
industrias. En lugar de tener que modelar un dominio con antelación, los equipos de
datos se pueden agregar a la estructura de grafos existente, sin poner en peligro la
funcionalidad actual.
Bases de Datos para el Big Data 18
Tema 2. Ideas clave
Ideas clave
▸ Agilidad: el desarrollo con bases de datos de grafos se alinea perfectamente con las
prácticas de desarrollo ágiles y probadas de hoy, permitiendo que su base de datos
evolucione de acuerdo con el resto de la aplicación y con cualquier cambio en los
requisitos del negocio.
Algunas de sus principales aplicaciones son:
▸ Detección de fraude.
▸ Motores de recomendación en tiempo real.
▸ Gestión de datos maestros (MDM).
▸ Operaciones de red y de TI.
▸ Gestión de identidad y acceso (IAM).
Es utilizada en empresas como Walmart, eBay y el Grupo Adidas. Por startups como
Cobrain, Zephyr Health y Wanderu e incluso sin fines de lucro como el ICIJ y el Foro
Económico Mundial, los estudios de casos con bases de datos de grafos abundan
con diversidad y profundidad de uso.
Neo4j está disponible en una «edición comunitaria» de código abierto con licencia de
GPL3, con copia de seguridad en línea y extensiones de alta disponibilidad con
licencia bajo los términos de la Licencia Pública General de Affero. Neo también
licencia Neo4j con estas extensiones bajo términos comerciales de código cerrado.
MongoDB
MongoDB (que proviene de humongous) es una de las bases de datos NoSQL
orientada a documentos desarrollada bajo el concepto de código abierto. Es una de
las bases de datos NoSQL más utilizadas en todo el mundo.
Bases de Datos para el Big Data 19
Tema 2. Ideas clave
Ideas clave
El desarrollo de MongoDB empezó en octubre de 2007 por la compañía de software
10gen. Ahora MongoDB es una base de datos lista para su uso en producción y con
muchas características.
Es una base de datos ágil, que permite a los esquemas cambiar rápidamente cuando
las aplicaciones evolucionan, proporcionando siempre la funcionalidad que los
desarrolladores esperan de las bases de datos tradicionales, tales como índices
secundarios, un lenguaje completo de búsquedas y consistencia estricta.
MongoDB ha sido creado para brindar escalabilidad, rendimiento y gran
disponibilidad, escalando de una implantación de servidor único a grandes
arquitecturas complejas de centros multidatos, mediante la inclusión de más nodos
en una red de servidores. Es muy compatible con aplicaciones web.
MongoDB proporciona alto rendimiento, tanto para lectura como para escritura,
potenciando la computación en memoria. La replicación nativa de MongoDB y la
tolerancia a fallos automática ofrece gran fiabilidad y flexibilidad operativa.
En MongoDB, los datos se almacenan en forma de un documento, el cual es una
estructura con pares clave-valor, muy similares a los objetos JSON, con la salvedad
de que MongoDB almacena los datos en formato BSON (representación binaria de
JSON). Un documento posee un atributo especial llamado _id, el cual indica el valor
que identifica de forma inequívoca al documento.
A su vez, los documentos se almacenan en collections, formando así un conjunto
de documentos con atributos similares. Podría decirse que una collection equivale a
una tabla en una base de datos relacional. Así, se puede definir una base de datos
en MongoDB como un conjunto de collections.
Bases de Datos para el Big Data 20
Tema 2. Ideas clave
Ideas clave
Patrones de diseño en MongoDB
Los patrones de diseño en MongoDB pueden agruparse en dos categorías. La
primera incluye aquellos patrones que soportan relaciones entre documentos:
▸ Patrón de relación uno-a-uno con documentos embebidos: en este patrón se
embebe un documento dentro de otro con el cual tiene relación. Por ejemplo, se
puede contar con un documento de información de un usuario y embeber un
subdocumento con información de la dirección del usuario:
{ _id: "1", nombre: "Juan", direccion: { ciudad: "Madrid" } }
▸ Patrón de relación uno-a-muchos con documentos embebidos: en este patrón
se embebe a varios documentos dentro de otro con el cual tiene relación. Siguiendo
con el ejemplo anterior, es probable que el usuario tenga más de una dirección, por
lo que se tiene una relación de uno (usuario) a varios (direcciones).
{ _id: "1", nombre: "Juan", direcciones: [ { ciudad: "Madrid" }, { ciudad:
"Toledo" } ] }
Bases de Datos para el Big Data 21
Tema 2. Ideas clave
Ideas clave
▸ Patrón de relación uno-a-muchos con documentos referidos: este patrón se
suele utilizar para evitar repetición en aquellos casos en que un mismo documento
se desee embeber en otros varios. Un ejemplo de su aplicación es el siguiente:
{ _id: address1, ciudad: "Madrid" }, { _id: address2 ciudad: "Toledo" }, { _id:
"1", nombre: "Juan", direcciones: [address1, address2] }
▸ Patrón de relación uno-a-uno con documentos referidos: igual que el anterior,
pero solo a un documento. No es aconsejable su utilización, debido a que es más útil
utilizar documentos embebidos.
{ _id: address ciudad: "Toledo" }, { _id: "1", nombre: "Juan", direcciones:
address }
El siguiente grupo de patrones está relacionado con modelos basados en estructura
de árbol.
Bases de Datos para el Big Data 22
Tema 2. Ideas clave
Ideas clave
▸ Patrón de modelo de estructura de árbol con referencias al nodo padre . Tal
como indica el nombre, se mantiene un atributo que almacena el _id del nodo padre.
A continuación, se muestra un ejemplo con documentos representando carpetas de
un sistema de ficheros.
{ _id: folder1, nombre: "Raíz", parent: null }, { _id: folder2, nombre: "Folder
2", parent: folder1 } { _id: folder3, nombre: "Folder 3", parent: folder1 }
Bases de Datos para el Big Data 23
Tema 2. Ideas clave
Ideas clave
▸ El modelo de estructura de árbol con referencia a nodo hijo. Como indica el
nombre, implica una aproximación inversa al caso de referencias al nodo padre. El
ejemplo anterior se vería representado de la siguiente manera.
{ _id: folder1, nombre: "Raíz", children: [folder2, folder3] }, { _id: folder2,
nombre: "Folder 2", children: [ ] } { _id: folder3, nombre: "Folder 3",
children: [ ] }
Bases de Datos para el Big Data 24
Tema 2. Ideas clave
Ideas clave
Después de leer todo el tema, el reto siguiente es que repases los aspectos más
relevantes de las bases de datos NoSQL con el vídeo «Aspectos relevantes de las
bases de datos NoSQL».
Accede al vídeo:
[Link]
496b-9124-aca70108f754
Vídeo 1. Aspectos relevantes de las bases de datos NoSQL.
En esta otra lección, «Documentos de MongoDB y patrones de diseño», se presenta
un screencast de la consola de MongoDB, incluyendo ejemplos de documentos y de
patrones de diseño.
Bases de Datos para el Big Data 25
Tema 2. Ideas clave
Ideas clave
Accede al vídeo:
[Link]
4427-9218-adbe00e85197
Vídeo 2. Documentos de MongoDB y patrones de diseño.
Bases de Datos para el Big Data 26
Tema 2. Ideas clave
A fondo
Building your first MongoDB application
Informática DP. (20 de abril de 2020). 1/3 - MongoDB 2020 - Introducción e
Instalación [Archivo de vídeo]. [Link]
Una serie de tres vídeos con una introducción a MongoDB. En el primero se brinda
una introducción a los conceptos principales de MongoDB y sus conceptos
equivalentes en una base de datos relacional.
Bases de Datos para el Big Data 27
Tema 2. A fondo
A fondo
Entendiendo MongoDB
Kane, F. (28 de mayo de 2020). Understanding MongoDB (2020 Update) [Archivo de
vídeo]. [Link]
Durante 17 minutos este vídeo te muestra los aspectos más relevantes de MongoDB,
así como las características que presenta MongoDB a nivel de arquitectura. También
te cuenta dónde está posicionado MongoDB con respecto al teorema CAP.
Bases de Datos para el Big Data 28
Tema 2. A fondo
A fondo
[Link]
MongoDB. (2021). Documentation [Página web]. [Link]
Sitio oficial del sistema MongoDB.
Bases de Datos para el Big Data 29
Tema 2. A fondo
A fondo
Introducción a Apache Cassandra
jumpstartCS. (29 de diciembre de 2019). Apache Cassandra - Tutorial 1 - Introduction
to Apache Cassandra [Archivo de vídeo]. [Link]
v=s1xc1HVsRk0
Introducción a la base de datos NoSQL de Apache Cassandra donde se hace una
descripción breve de la tecnología y sus características, acompañada con ejemplos
básicos de su tecnología de acceso a datos.
Bases de Datos para el Big Data 30
Tema 2. A fondo
A fondo
Introducción a No4j y modelo de datos
Neo4j. (22 de junio de 2020). Neo4j Introducción y Modelo de Datos [Archivo de
vídeo]. [Link]
Introducción a la base de datos NoSQL de Neo4j, donde se hace una descripción
amplia de la tecnología y sus características, acompañada con ejemplos básicos del
modelado de datos.
Bases de Datos para el Big Data 31
Tema 2. A fondo
A fondo
Comparativa NoSQL vs. SQL
Be A Better Dev. (10 de febrero de 2020). SQL vs NoSQL Explained [Archivo de
vídeo]. [Link]
Este vídeo oficial de FullStack hace una comparación entre las bases de datos
NoSQL y SQL, además de mostrar algunos ejemplos de bases de datos NoSQL.
Bases de Datos para el Big Data 32
Tema 2. A fondo
A fondo
Bibliografía
Abed, A. H. (2020). Big Data with Column Oriented NOSQL Database to Overcome
the Drawbacks of Relational Databases. Int. J. Advanced Networking and
Applications, 11(05), 4423-4428.
Banker, K. (2012). MongoDB in action (pp. 3-22, 23-28, 76-126, 241-248). Manning
Publications.
Chodorow, K., y Dirolf, M. (2010). MongoDB: the definitive guide (pp. 23-64, 83-92).
O’Reilly.
Contreras Bárcena, D., Gahete Díaz, J. L., Pérez Ferrer, O. L., & Yagüe Juárez, D.
(2021). Sistemas de almacenamiento NoSQL.
Copeland, R. (2013). MongoDB applied design patterns (pp. 3-15, 37-73). O’Reilly
Media.
Faridoon, A., & Imran, M. (2021). Big Data Storage Tools Using NoSQL Databases
and Their Applications in Various Domains: A Systematic Review. Computing and
Informatics, 40(3), 489-521.
Meier, A., & Kaufmann, M. (2019). SQL & NoSQL databases. Springer Fachmedien
Wiesbaden.
Moko, A., & Asagba, P. O. (2020). Big Data and NoSQL Databases Architecture: A
Review. IIARD—International Institute of Academic Research and Development.
MUS, M. (2019). Comparison between SQL and NoSQL databases and their
relationship with big data analytics.
Tiwari, S. (2011). Professional NoSQL (pp. 3-20, 97-135, 217-232). John Wiley &
Sons.
Bases de Datos para el Big Data 33
Tema 2. A fondo
A fondo
Bases de Datos para el Big Data 34
Tema 2. A fondo
Test
1. ¿Qué tipo de base de datos NoSQL se caracteriza por operaciones de lectura y
escritura básicas, además de ser apropiados para entornos de gestión de caché?
A. Almacén clave-valor simple.
B. Almacén clave-valor sofisticado.
C. Base de datos relacional.
D. Almacén de documentos.
2. ¿En qué categoría de base de datos NoSQL se clasifica a MongoDB?
A. Almacén clave-valor simple.
B. Almacén clave-valor sofisticado.
C. Base de datos relacional.
D. Almacén de documentos.
3. ¿Cuál de las siguientes afirmaciones es correcta?
A. Cassandra se caracteriza porque todos sus nodos actúan por igual y se
agrupan en anillo.
B. Cassandra y Neo4j están desarrolladas en Java.
C. Neo4j es una base de datos transaccional compatible con ACID y que
almacena y procesa grafos nativos.
D. Todas las afirmaciones anteriores son correctas.
4. ¿Cuál es el equivalente a un registro en MongoDB?
A. Base de datos.
B. Collection.
C. Tabla.
D. Documento.
Bases de Datos para el Big Data 35
Tema 2. Test
Test
5. ¿Cuál es el término equivalente a una tabla en MongoDB?
A. Base de datos.
B. Collection.
C. Registro.
D. Documento.
6. ¿Cuándo se detalla el uso de la primera base de datos NoSQL?
A. En 2007, cuando Amazon liberó DynamoDB.
B. Con Carlo Strozzi en 1998.
C. En 1965 con MultiValue.
D. Eric Evans en 2009.
7. ¿Cuál de las siguientes es una ventaja de las bases de datos NoSQL?
A. No generan cuellos de botella.
B. Tecnología madura.
C. Responden a la necesidad de escalabilidades horizontal demandada cada
vez por más empresas y, además, de manera sencilla.
D. Las respuestas A y C son correctas.
8. ¿Cuál de las siguientes afirmaciones es correcta?
A. Todo sistema distribuido no puede garantizar a la vez que haya
consistencia, disponibilidad y tolerancia a particiones.
B. Un sistema distribuido garantiza al menos disponibilidad y consistencia.
C. Un sistema distribuido que garantiza la consistencia y la tolerancia a
particiones no sacrifica por ello la disponibilidad.
D. Todas las afirmaciones anteriores son correctas
Bases de Datos para el Big Data 36
Tema 2. Test
Test
9. ¿Qué patrón de diseño de MongoDB permite incluir un documento dentro de
otro?
A. Uno-a-uno con documentos embebidos.
B. Uno-a-uno con documentos referidos.
C. Uno-a-varios con documentos referidos.
D. Las respuestas B y C son correctas.
10. ¿Qué patrón de diseño de MongoDB permite incluir una lista de referencias a
otros documentos dentro de un documento principal?
A. Uno-a-uno con documentos embebidos.
B. Uno-a-uno con documentos referidos.
C. Uno-a-varios con documentos referidos.
D. Las respuestas B y C son correctas.
Bases de Datos para el Big Data 37
Tema 2. Test
Tema 3
Bases de Datos para el Big Data
Tema 3. MongoDB
Índice
Esquema
Ideas clave
3.1. Introducción y objetivos
3.2. Descarga e instalación
3.3. Software de apoyo
3.4. Flexibilidad del modelo de datos
3.5. Inserción de datos
3.6. Lectura de datos
3.7. Actualización de datos
3.8. Caso práctico
3.9. Referencias bibliográficas
A fondo
MongoDB: the definitive guide
Bases de datos en MongoDB Compass
MongoDB: bases de datos, colecciones y documentos
Documentación oficial de MongoDB
A cookbook for MongoDB
MongoBooster
MongoDB Compass
Bibliografía
Test
Esquema
Bases de Datos para el Big Data 3
Tema 3. Esquema
Ideas clave
3.1. Introducción y objetivos
Este tema se centra en los comandos básicos para manipular datos en MongoDB. La
lectura de las Ideas clave te ayudará a conocer la sintaxis de los comandos utilizados
para crear, listar y modificar datos.
Al tratarse de un tema muy práctico, la mejor forma de estudiarlo es a través de la
realización de los trabajos asignados. Además de los trabajos, es recomendable que
trabajes de forma proactiva con MongoDB, lo cual ayudará a familiarizarse con el
funcionamiento del sistema, los comandos más relevantes y, especialmente, con los
aspectos relacionados con su instalación.
Los objetivos que cubrirás con este tema son los siguientes:
▸ Conocer cómo funciona MongoDB dentro del ámbito de las bases de datos NoSQL.
▸ Entender la forma en que MongoDB almacena los datos.
▸ Aprender las funciones necesarias para la manipulación de los datos.
▸ Hacer uso de MongoDB dentro de soluciones de persistencia, aplicando conceptos
generales en el modelado de los datos.
Primeros pasos con MongoDB
Para interactuar con el sistema de base de datos MongoDB se utiliza la consola o
terminal, la cual se inicia ejecutando el programa Mongo. Es necesario que antes de
iniciar la consola se inicie el demonio o servicio mongod. El demonio es el encargado
de escuchar y servir las peticiones. El lenguaje de programación utilizado en la
consola es JavaScript.
Bases de Datos para el Big Data 4
Tema 3. Ideas clave
Ideas clave
Al arrancar la consola, se podrá ver información similar a la siguiente:
Figura 1. Consola de MongoDB.
El mensaje de bienvenida de la consola muestra la versión de la aplicación (en el
ejemplo es 4.4.2), seguida de la base de datos a la que se ha conectado. La versión
de Mongo que se recomienda para este curso es la 3.6.21.
No hay ningún inconveniente en que instales la versión actual en tu propio
ordenador, de esta forma podrás trabajar o bien con la versión Community (más
ligera) o bien con la Enterprise (más robusta e ideal para las empresas que requieran
de soporte con coste).
En las versiones recientes de MongoDB, además de tener la clásica consola para
manipular las bases de datos, estas incorporan una interfaz gráfica web que permite
manipular las bases de datos de forma más intuitiva llamada Compass.
Bases de Datos para el Big Data 5
Tema 3. Ideas clave
Ideas clave
Figura 2. Interfaz MongoDB Compass.
Como se mencionó anteriormente, es muy intuitiva y de forma rápida te podrás hacer
al uso de dicha herramienta. Recuerda que Compass necesita conectarse a tu server
local (o remoto) de MongoDB. El server se instalará e iniciará cuando ejecutes el
instalador correspondiente.
En el caso de la consola, por defecto esta se conecta a la base de datos llamada
test. Para cambiar la base de datos sobre la que trabajamos, utilizaremos el
comando . Así, en el siguiente ejemplo indicamos a la consola que deseamos
utilizar la base de datos tienda.
use tienda
Bases de Datos para el Big Data 6
Tema 3. Ideas clave
Ideas clave
Figura 3. Uso de base de datos desde MongoDB.
También es posible indicar un nombre de base de datos como argumento del
ejecutable mongo. Por ejemplo, para obtener el mismo resultado que en el ejemplo
anterior se ejecutaría el comando siguiente desde la línea de comandos del sistema
operativo.
mongo tienda
Es conveniente aclarar que no es necesario que la base de datos tienda exista para
poder utilizarla. MongoDB se encargará de crear la base de datos y las collections
apropiadas cuando el usuario añada nuevos documentos en la misma. Este detalle
va en la línea de naturaleza dinámica de este sistema de bases de datos.
Bases de Datos para el Big Data 7
Tema 3. Ideas clave
Ideas clave
3.2. Descarga e instalación
MongoDB ofrece una versión Enterprise y Community de su base de datos de
documentos distribuidos. La versión comunitaria ofrece el modelo de documento
flexible junto con consultas ad hoc, indexación y agregación en tiempo real.
Como sistema distribuido, ofrece una alta disponibilidad a través de la replicación
integrada y la conmutación por error junto con la escalabilidad horizontal con
fragmentación nativa.
MongoDB Enterprise Server, además de ofrecer todo lo anterior, incluye más
funcionalidades relacionadas con la seguridad y distribución de los datos, ideal para
entornos profesionales que demanden un servicio con coste por parte del fabricante.
La instalación de MongoDB puede realizarse en el sistema operativo Windows
mediante los siguientes pasos:
▸ Paso 1: descarga el fichero de instalación, en formato zip o msi, desde la siguiente
dirección web: [Link]
▸ Paso 2: en la pestaña Community Server habrá que descargar el archivo msi de
instalación. Si el sistema operativo que va a soportar la instalación es de 64 bits, se
recomienda elegir la versión de Windows. Esta versión funciona en casi todas las
versiones de Windows de 64 bits.
▸ Paso 3: en el caso de no tener un sistema operativo de 64 bits o querer una versión
anterior, en el enlace All Version Binaries se pueden encontrar todas las versiones
de la base de datos.
▸ Paso 4: instalar la aplicación siguiendo los pasos. Es recomendable utilizar un
directorio de instalación conocido, por ejemplo, C:/MongoDB/
Bases de Datos para el Big Data 8
Tema 3. Ideas clave
Ideas clave
▸ Paso 5: inicia el servidor de MongoDB ejecutando el programa [Link], ubicado
en la subcarpeta bin.
▸ Ten presente: a partir de la versión 3.x.x de MongoDB, el instalador sobre Windows
crea el servicio y lo incluye en la lista de procesos o servicios que ejecutará el
sistema operativo. Esto quiere decir que Mongo ya estará funcionando después de
instalarlo, solo tendréis que conectaros con su consola o con Compass, el cual viene
disponible también y se inicia una vez acaba la instalación.
Figura 4. Listado de servicios de Windows, entre ellos el de MongoDB.
Directorios de la instalación
Una vez instalado, en el directorio de instalación podréis encontrar los siguientes
subdirectorios:
▸ bin: todos los programas que necesita Mongo para ejecutarse.
▸ data: el directorio donde por defecto se crearán las bases de datos.
▸ log: un fichero con todas las trazas de log del motor y de los accesos al servidor
mondodb.
▸ snmp: ficheros de configuración para una instancia de mongod como un subagente
SNMP. Esto es útil en la versión Enterprise.
Bases de Datos para el Big Data 9
Tema 3. Ideas clave
Ideas clave
Figura 5. Directorio de instalación de MongoDB.
Algunos programas importantes de la instalación se describen brevemente a
continuación.
Figura 6. Ejecutables principales de MongoDB.
▸ Servidor no como servicio: [Link]
Bases de Datos para el Big Data 10
Tema 3. Ideas clave
Ideas clave
▸ Servidor como servicio: [Link], lo utiliza Windows para crear el servicio.
▸ Router: [Link]
▸ Cliente: [Link]
▸ Herramientas de monitorización: [Link], [Link]
▸ Herramienta para importar y exportar bases de datos: [Link],
[Link], [Link], [Link]
▸ Otras herramientas: [Link], [Link]
Como recomendación general, la instalación de MongoDB es preferible
que se haga sobre un directorio conocido destinado para ello. En
Windows se instalará por defecto en Archivos de Programa; esto no es
un error, pero es recomendable hacerlo sobre otro directorio menos
general.
DB Tools: algunos ejecutables son herramientas de administración de la
base de datos que no vienen en la instalación por defecto. Es
recomendable descargar dichas herramientas de la web de MongoDB.
Algunos enlaces útiles:
▸ Installation Windows - DB Tools
▸ Download Database-Tools
Bases de Datos para el Big Data 11
Tema 3. Ideas clave
Ideas clave
3.3. Software de apoyo
Para interactuar con MongoDB, no solo se dispone de la consola o terminal clásica
(ventana negra) para poder manipular la base de datos. Existe un grupo de
aplicaciones con entorno gráfico, tanto propietarias de MongoDB como externas, que
facilitan enormemente el uso de esta base de datos, llegando a cubrir muchas de sus
funcionalidades.
MongoBooster
MongoBooster es una herramienta GUI multiplataforma basada en shell para
MongoDB a partir de la versión 2.4, que permite la construcción de consultas fluidas,
soporte de sintaxis ES6, una experiencia IntelliSense y un gran número de
herramientas útiles para el manejo de la base de datos.
El servicio de traducción incorporado conoce todas las posibles compleciones,
métodos, propiedades, variables, palabras clave, incluso los nombres de la colección
MongoDB, nombres de campo y operadores. Las sugerencias de IntelliSense
aparecen mientras se escribe. Siempre se puede activar manualmente con Ctrl-Shift-
Space.
MongoBooster incluye un lector Shell para hacer MongoDB un poco más fácil.
También tiene una utilidad para crear colecciones de forma aleatoria. Posee
herramientas de monitorización y estadísticas entre otras.
Schema Analyzer es una herramienta de compilación muy útil. Debido a la
característica sin esquema, las colecciones en MongoDB no tienen un documento de
esquema para describir el tipo de datos del campo, la estructura de la colección y las
validaciones. Con la herramienta Analizador de Esquemas, se puede obtener un
documento para describir el esquema de cierto conjunto de registros probados (al
azar, el primero, el último, etc.).
Bases de Datos para el Big Data 12
Tema 3. Ideas clave
Ideas clave
MongoBooster tiene varias versiones de pago, pero dispone de una gratuita con
ciertas limitaciones:
▸ La característica de autocompletar se restringe a la base de datos de «test» o
«demo» después de expirar la prueba de 60 días.
▸ Schema Analyzer está restringido a la base de datos de test.
▸ Deshabilitada la importación de tablas de bases de datos externas.
▸ Desactivada la exportación de colecciones a un archivo SQL.
▸ Enterprise Auth (X.509, Kerberos, LDAP) se desactiva después de los 60 días de
prueba.
MongoDB Compass
MongoDB también posee un software propio para la manipulación externa de su
base de datos a través de una GUI. Esta aplicación permite ejecutar consultas ad
hoc en segundos, interactuar con sus datos con funcionalidad CRUD completa y ver
y optimizar el rendimiento de la consulta. Está disponible para la mayoría de los
sistemas operativos. Compass permite tomar decisiones más inteligentes sobre la
indexación, la validación de documentos y mucho más.
MongoDB Compass analiza los documentos y muestra sus estructuras dentro de sus
colecciones a través de una GUI intuitiva. Permite visualizar y explorar rápidamente
el esquema para comprender la frecuencia, tipos y rangos de campos en su conjunto
de datos.
Ofrece estadísticas del servidor en tiempo real, permitiendo conocer las métricas del
servidor y las operaciones de la base de datos. Explora las operaciones de la base
de datos y ayuda a detectar las colecciones más activas.
Bases de Datos para el Big Data 13
Tema 3. Ideas clave
Ideas clave
Permite construir fácilmente consultas complejas solo pulsando un botón y
mostrando los resultados, tanto gráficamente como en documentos JSON. También
permite modificar, insertar y borrar documentos a través de un editor visual intuitivo.
Se pueden ejecutar las consultas a través de una interfaz gráfica, fácil de entender
que ayuda a identificar y resolver problemas de rendimiento. Ayuda a comprender el
tipo y el tamaño de los índices, su utilización y propiedades especiales.
Permite crear y modificar las reglas de validación de datos, usando una simple
interfaz. El soporte CRUD permite corregir problemas de calidad de datos en
documentos individuales.
Bases de Datos para el Big Data 14
Tema 3. Ideas clave
Ideas clave
3.4. Flexibilidad del modelo de datos
MongoDB tiene un esquema flexible, donde no es necesario que las colecciones
tengan una estructura idéntica para todos los documentos. Esto significa que los
documentos de la misma colección no necesitan tener el mismo número de campos
o estructura. Cada documento solo necesita contener un número relevante de
campos de la entidad u objeto que el documento representa.
En el siguiente ejemplo se pueden ver los datos de 2 pilotos de Fórmula 1. El primero
de ellos tiene 2 campeonatos mundiales en esta competición mientras que el
segundo ninguno, de ahí que se haya omitido este campo.
Bases de Datos para el Big Data 15
Tema 3. Ideas clave
Ideas clave
"_id" : ObjectId("632c5d85cd35c62d58e36378"),
"name" : "Fernado Alonso",
"age" : 35,
"deportes" : [
"Forumula 1",
"Indi"
],
CampeonatosMundiales: 2,
"hobbies": [
"Ciclismo",
"Fútbol"
},
"_id" : ObjectId("632c5d85cd35c62d58e11254"),
"name" : "Mark Webber",
"age" : 40,
"deportes" : [
"Fórumula 1",
"Prototipos"
],
"hobbies": [
"Cine",
"Montañismo"
Bases de Datos para el Big Data 16
Tema 3. Ideas clave
Ideas clave
En la práctica, la mayoría de los documentos de una colección comparte una
estructura similar, pero la flexibilidad del esquema aporta una capacidad de
modelado de los documentos independientes.
Bases de Datos para el Big Data 17
Tema 3. Ideas clave
Ideas clave
3.5. Inserción de datos
La creación de documentos en una collection se realiza con el comando insert. La
sintaxis del comando es la siguiente:
db.<nombre de Collection>.insert(<documento a almacenar>)
Por ejemplo, si se desea crear un nuevo documento con información sobre un
producto en específico, dentro de la collection llamada productos, el comando sería
el siguiente:
[Link]({nombre: “Jabón líquido”, precio: 5.50})
Este documento creado por este comando tiene dos atributos: nombre y precio.
Además, MongoDB crea un atributo especial llamado _id de tipo ObjectId , el cual es
un tipo especial de 12 bytes. _id es utilizado para garantizar la unicidad de los
documentos en una collection.
La siguiente captura muestra la creación de cinco documentos más dentro de la
collection productos.
[Link]({nombre: "Barra de Pan", precio: 0.75})
[Link]({nombre: "Zumo de naranja", precio: 1.00})
[Link]({nombre: "Leche", precio: 1.20})
[Link]({nombre: "Queso", precio: 2.00})
[Link]({nombre: "Mantequilla", precio: 1.50})
Bases de Datos para el Big Data 18
Tema 3. Ideas clave
Ideas clave
Figura 7. Ejecución de instrucciones de Insert.
Otra alternativa es la inserción múltiple de documentos. Para ello, utilice la
instrucción inserMany([…]) con un array de documentos a insertar como argumento.
[Link]([{nombre: "Barra de Pan", precio: 0.75},
{nombre: "Zumo de naranja", precio: 1.00},
{nombre: "Leche", precio: 1.20},
{nombre: "Queso", precio: 2.00},
{nombre: "Mantequilla", precio: 1.50}])
Figura 8. Ejecución de instrucción en MongoDB.
Bases de Datos para el Big Data 19
Tema 3. Ideas clave
Ideas clave
Recuerda que MongoDB utiliza de base JavaScript, por lo tanto, lo siguiente es
correcto:
try {
[Link]( [
...
] );
} catch (e) {
print (e);
Consulta los documentos creados con el siguiente comando:
> [Link]()
Figura 9. Ejecución de instrucción búsqueda en MongoDB.
El _id también puede indicarse como parte del documento a crear. En el caso de que
el identificador ya exista, el comando insert retornará un error, como se muestra en el
siguiente ejemplo.
> [Link]({ "_id" : ObjectId("5fc9a0cc3cb2c79952e59f80"),
"nombre" : "Barra de Pan", "precio" : 0.75 })
Bases de Datos para el Big Data 20
Tema 3. Ideas clave
Ideas clave
Bases de Datos para el Big Data 21
Tema 3. Ideas clave
Ideas clave
Figura 10. Ejecución de instrucción en MongoDB.
Inserta nuevamente el documento anterior, pero sin incluir el _id .
> [Link]({"nombre" : "Barra de Pan", "precio" : 0.75 })
Figura 11. Ejecución de instrucción de insert en MongoDB.
¿Qué ocurre?
Figura 12. Ejecución de instrucción de búsqueda en MongoDB.
Otro comando para crear documentos es el comando save , con la siguiente sintaxis:
db.<nombre de Collection>.save(<documento a almacenar>)
El comando save tiene un comportamiento similar al del comando insert . La
principal diferencia es que si el documento enviado como argumento contiene un
atributo _id y existe un documento con dicho _id , ese documento será reemplazado
Bases de Datos para el Big Data 22
Tema 3. Ideas clave
Ideas clave
por el nuevo. En la siguiente captura, el documento previo se reemplaza
completamente por el nuevo contenido.
> [Link]({nombre: "Mantequilla", precio: 3.50})
Figura 13. Ejecución de instrucción save en MongoDB.
Realiza nuevamente la prueba de insertar el documento indicando el _id y observa
el error, ¿o no hay error?
> [Link]({ "_id" : ObjectId("5fc9a0cc3cb2c79952e59f80"),
"nombre" : "Barra de Pan", "precio" : 0.75 })
Figura 14. Ejecución de instrucción de búsqueda en MongoDB.
Usando save , cambia el precio del documento anterior y repite el proceso.
> [Link]({ "_id" : ObjectId("5fc9a0cc3cb2c79952e59f80"),
"nombre" : "Barra de Pan", "precio" : 1.75 })
Bases de Datos para el Big Data 23
Tema 3. Ideas clave
Ideas clave
Figura 15. Ejecución de instrucción save en MongoDB.
¿Qué ha ocurrido ahora? Sería interesante que lo comentes en el foro.
Ten en cuenta que, a partir de MongoDB 4.2, el método [Link]() está en
desuso, en versiones inferiores sí podrás seguir utilizándolo.
Bases de Datos para el Big Data 24
Tema 3. Ideas clave
Ideas clave
3.6. Lectura de datos
Las consultas son los mecanismos utilizados en bases de datos para leer u obtener
datos. En el caso de MongoDB, las consultas solamente pueden obtener datos de
una sola collection.
El comando utilizado en MongoDB para realizar consultas es find , con la siguiente
sintaxis:
db.<nombre de Collection>.find(<criterios de búsqueda>, <proyección>)
Ambos argumentos son opcionales y, en caso de definirlos, deben seguir el formato
JSON. Los criterios de búsqueda son las condiciones, que los documentos
resultantes deben cumplir. Las condiciones se estructuran en pares clave-valor,
donde el valor puede ser de tipo primitivo (número, cadena de texto, etc.) o un objeto
para el uso de tres operadores de comparación:
▸ $gt, $gte, $lt, $lte, $ne: para la evaluación de condiciones «mayor que», «mayor o
igual que», «menor que», «menor o igual que» y «es diferente a».
▸ $in, $nin: evalúan la pertenencia y ausencia respectivamente de un atributo en un
array dado.
▸ $exists: evalúa que exista el atributo indicado.
▸ $type: evalúa que el campo sea de un tipo específico.
▸ $all: evalúa arrays que coincidan completamente con el parámetro dado.
▸ $elemMatch: permite evaluar arrays a nivel de elementos, de forma muy específica.
Además, pueden utilizarse los operadores lógicos $or, $and, $not y $nor, los cuales
reciben un array de expresiones a evaluar en conjunto. MongoDB también brinda
Bases de Datos para el Big Data 25
Tema 3. Ideas clave
Ideas clave
operadores para búsquedas de información geoespacial.
El argumento de proyección indica los atributos. La estructura de este argumento es
una lista de pares clave-valor, donde la clave es el atributo y el valor es 1, para
mostrarlo, y 0, para ocultarlo. Por defecto, se muestran todos los atributos de los
documentos, y el atributo _id se incluye siempre que no es omitido.
En ambos argumentos, se pueden incluir atributos de subdocumentos. Esto se lleva
a cabo utilizando el operador punto (.) para separar el subdocumento del atributo.
La siguiente imagen muestra el ejemplo básico del comando find , mostrando todos
los atributos de los documentos en la collection productos.
> [Link]()
Figura 16. Ejecución de instrucción de búsqueda en MongoDB.
El siguiente ejemplo muestra todos los productos con el atributo precio exactamente
igual a 1.
> [Link]({precio:1})
Figura 17. Ejecución de instrucción de búsqueda en MongoDB.
Mientras que en el siguiente ejemplo se muestran tres consultas. La primera muestra
los productos con precio menor o igual que 1. La segunda muestra los productos que
Bases de Datos para el Big Data 26
Tema 3. Ideas clave
Ideas clave
cumplen la condición de tener precio mayor que 1 y menor que 2. La tercera consulta
retorna el mismo resultado que la segunda, pero utilizando el operador $and.
[Link]({precio: {$lte: 1} })
[Link]({precio: {$gt: 1, $lt: 2} })
[Link]({ $and: [{precio: {$gt: 1}}, {precio: {$lt: 2}} ]})
Figura 18. Ejecución de instrucción de búsqueda en MongoDB.
Todos los ejemplos previos han mostrado los documentos completos. El siguiente
ejemplo muestra solamente el atributo nombre para la última consulta.
> [Link]({ $and: [{precio: {$gt: 1}}, {precio: {$lt: 2}} ]},
{_id: 0, nombre: 1})
Figura 19. Ejecución de instrucción de búsqueda con proyección en MongoDB.
Los resultados obtenidos a partir de una consulta pueden transformarse mediante
cualquier combinación de tres operaciones:
▸ limit: indica la cantidad máxima de documentos a mostrar.
▸ skip: indica la cantidad de documentos a omitir al inicio en un inicio.
▸ sort: indica, a través de pares clave-valor donde la clave es el atributo sobre el que
Bases de Datos para el Big Data 27
Tema 3. Ideas clave
Ideas clave
se ordenará y el valor es 1 para un orden ascendente y -1 para un orden
descendente.
El siguiente ejemplo muestra el uso de sort y limit para mostrar el producto con
mayor precio en la collection.
> [Link]().sort({precio: -1}).limit(2)
Figura 20. Ejecución de instrucción de búsqueda ordenada en MongoDB.
Además de find , MongoDB brinda el comando findOne para la búsqueda de un solo
documento en una consulta. Los argumentos son los mismos que en el comando find
Bases de Datos para el Big Data 28
Tema 3. Ideas clave
Ideas clave
3.7. Actualización de datos
En el subtema sobre inserción de datos se menciona que el comando puede
utilizarse para reemplazar un documento específico en una collection. Si lo deseado
es modificar documentos que coinciden con un criterio de búsqueda, puede utilizarse
el comando .
Antes de la versión 2.2:
db.<nombre de collection>.update(<criterios de búsqueda>, <documento con
cambios>, <valor de upsert>, <valor de multi>)
A partir de la versión 2.2:
db.<nombre de collection>.update(<criterios de búsqueda>, <documento con
cambios>, <opciones de modificación>)
Los criterios de búsqueda del comando update siguen las reglas indicadas para el
comando fi n d . Por defecto, el documento que cumpla con esos criterios se
reemplaza por el documento enviado como segundo argumento. Si lo deseado es
realizar un cambio específico, se pueden utilizar los siguientes operadores:
▸ $set: permite crear o cambiar un atributo en específico.
▸ $unset: permite eliminar un atributo.
▸ $inc: incrementa un número.
▸ $rename: cambia el nombre de un atributo.
Las opciones de modificación pueden ser dos:
▸ multi: por defecto, update solamente modifica un documento. Si el modificador
multi tiene el valor true , se modificarán todos los documentos que cumplan con las
condiciones de búsqueda.
Bases de Datos para el Big Data 29
Tema 3. Ideas clave
Ideas clave
▸ upsert: si ningún documento cumple con las condiciones de búsqueda y upsert se
define con el valor true , el comando update creará un documento.
En cualquier modificación, el atributo _id se mantiene constante siempre que no se
modifique directamente.
El siguiente ejemplo muestra el uso del comando para cambiar el precio de todos los
productos con precio mayor o igual a 2 a un fijo de 3.
> [Link]({ precio: { $gte: 2}}, {$set: {precio: 3}}, {multi:
true})
Figura 21. Ejecución de instrucción de actualización en MongoDB.
Realiza ahora la siguiente prueba:
> [Link]({ precio: { $gte: 2}}, {$set: {precio: 7.5}})
Figura 22. Ejecución de instrucción de actualización masivo en MongoDB.
Y ahora esta otra prueba:
> [Link]({ precio: { $gte: 7}}, {$set: {precio: 8.555}})
Figura 23. Ejecución de instrucción de actualización única en MongoDB.
Bases de Datos para el Big Data 30
Tema 3. Ideas clave
Ideas clave
> [Link]()
Figura 24. Ejecución de instrucción de búsqueda en MongoDB.
La eliminación de documentos se realiza a través del comando r emove, deleteMany y
deleteOne .
El primer argumento se comporta de la misma manera que los criterios de búsqueda
en el comando find , mientras que el segundo es un valor booleano para indicar si se
desea eliminar solamente un documento de la collection.
Inserta los siguientes documentos:
[Link]([
{item : "revista" , cantidad : 25 , estado : "A" },
{item : "libro" , cantidad : 50 , estado : "B" },
{item : "postal" , cantidad : 45 , estado : "A" }
]);
Bases de Datos para el Big Data 31
Tema 3. Ideas clave
Ideas clave
Figura 25. Ejecución de instrucción de actualización masivo en MongoDB.
Ahora ejecuta la instrucción siguiente y borra todos los documentos cuyo estado sea
“B” .
[Link]({ estado : "B" })
Figura 26. Ejecución de instrucción de borrado masivo en MongoDB.
Consulta los documentos y comprueba que solo quedan los documentos con estado
igual a “ A ”.
Figura 27. Ejecución de instrucción de borrado masivo en MongoDB.
Ahora ejecuta el otro comando de borrado y observa cómo se borra solo un único
documento.
Bases de Datos para el Big Data 32
Tema 3. Ideas clave
Ideas clave
[Link]({ estado : "A" })
Figura 28. Ejecución de instrucción de borrado masivo en MongoDB.
¿Has podido comprender cuándo conviene usar un comando antes que otro?
Bases de Datos para el Big Data 33
Tema 3. Ideas clave
Ideas clave
3.8. Caso práctico
Para este caso, descarga e importa con MongoDB Compass el fichero JSON con
datos de prueba. Si el fichero no está disponible, escribe al profesor para que os lo
publique en el aula virtual.
Una vez cargado en MongoDB, se realizarán una serie de ejercicios prácticos con los
que es posible aprender muchas de las funcionalidades descritas anteriormente. Se
va a partir de una colección que almacene datos de libros. Un ejemplo de registro es
el que se puede ver a continuación:
{
"_id": 3,
"title": "Specification by Example",
"isbn": "1617290084",
"pageCount": 0,
"publishedDate": { "$date": "2011-06-03T[Link].000Z"},
"thumbnailUrl": "[Link]
"shortDescription": "…",
"longDescription": "…",
"status": "PUBLISH",
"authors": ["Gojko Adzic"],
"categories": ["Software Engineering"]
}
Nota: los campos en rojo se irán omitiendo en las consultas debido a su amplio
contenido.
Para iniciar las consultas se va a mostrar los 3 primeros registros con un simple
comando find para buscar y limit(3) para restringir el número de búsquedas a
3. Para ello ejecutamos [Link].find().limit(3) . El resultado es el que se puede ver a
continuación.
> [Link]({}, {thumbnailUrl: 0, longDescription: 0, shortDescription:
0 }).limit(3)
Bases de Datos para el Big Data 34
Tema 3. Ideas clave
Ideas clave
Figura 29. Ejecución de instrucción de búsqueda con proyección en MongoDB.
Antes de trabajar con los filtros, se van a recuperar todos los autores que tiene
disponible la base de datos. Para ello se utiliza el comando distinct .
> [Link]("authors")
Como se puede ver, no se repite ninguno de ellos:
Figura 30. Función distinct en MongoDB.
Para realizar búsquedas utilizando el comando distinct , hay que aplicar el filtro en el
segundo parámetro de la función como se puede ver a continuación:
> [Link]("title", {authors: "Vlad Landres"})
Bases de Datos para el Big Data 35
Tema 3. Ideas clave
Ideas clave
Figura 31. Función distinct con parámetros en MongoDB.
Obtenidos los autores, se va a filtrar por uno de ellos y se van a mostrar los campos
«ISBN», «title» y «authors». Nótese que la opción a 0 de ocultado se utiliza solo para
el campo _id y la opción a 1 para los campos que se quieren mostrar.
> [Link]({authors:"Vlad Landres"},{_id:0, isbn:1, author:1,
title:1})
Figura 32. Función de búsqueda con proyección en MongoDB.
Si se quiere realizar un filtro utilizando los operadores de comparación:
> [Link]({pageCount: {$gt:100} }, {_id:0, isbn:1, author:1, title:1,
pageCount:1}).limit(3)
Figura 33. Función de búsqueda en MongoDB.
Se puede ver que es muy sencillo realizar una búsqueda con contenido exacto, pero
si se quiere hacer una búsqueda con contenido parcial, es necesario utilizar el
operador $regex (regular expression).
Bases de Datos para el Big Data 36
Tema 3. Ideas clave
Ideas clave
A continuación, se realiza una búsqueda con aquellos títulos que tengan contenida la
palabra Internet:
> [Link]({title: {$regex: ".*Internet"} }, {_id:0, isbn:1, author:1,
title:1})
Figura 34. Función de búsqueda en MongoDB.
También se puede contar el número de elementos encontrados en la búsqueda con
la función .count( ):
> [Link]({title: {$regex: ".*Internet"}}).count()
Figura 35. Función de búsqueda con expresión regular en MongoDB.
Si se quiere insertar un nuevo atributo, se utiliza el operador $set como segundo
parámetro de un update , y si el campo es un array, se utiliza el $addToSet . A la
búsqueda anterior se va a añadir el tag Internet . Es muy importante no olvidarse de
añadir en el tercer parámetro la opción multi: true: , para que la modificación se haga
en más de un documento.
> [Link]({title: {$regex: ".*Internet"}}, {$addToSet: {tags:
"Internet"}}, {multi: true})
> [Link]({title: {$regex: ".*Internet"} }, {_id:0, isbn:1, author:1,
title:1, tags:1})
Bases de Datos para el Big Data 37
Tema 3. Ideas clave
Ideas clave
Figura 36. Función de búsqueda con expresión regular en MongoDB.
Se comprueba que todo ha funcionado. Para ello, es necesario realizar una nueva
consulta buscando un elemento dentro de un array. Para realizar este tipo de
búsquedas se utiliza el operador $in , el cual realiza una búsqueda por los elementos
especificados como parámetros en un array, como se puede ver a continuación para
aquellos libros que tenga el tag Internet:
Figura 37. Función de búsqueda en MongoDB.
Para volver a dejar todo como estaba en un principio, se utiliza el operador $unset
para borrar el atributo especificado, que en este caso será tags :
> [Link]({}, {$unset: {tags: ""}}, {multi: true})
Figura 38. Función de búsqueda en MongoDB.
Consulta los documentos nuevamente para ver el resultado.
> [Link]({title: {$regex: ".*Internet"} }, {_id:0, isbn:1, author:1,
title:1, tags:1})
Bases de Datos para el Big Data 38
Tema 3. Ideas clave
Ideas clave
Para terminar, si se quiere realizar una búsqueda en la que se pretende buscar los
libros de dos categorías diferentes, es necesario especificarlos dentro de un array
inicializado por el operado $or , como se puede ver a continuación:
> [Link]({$or: [ {cetegories: "PowerBuilder"}, {categories: "Client-
Server"}]}, {_id:0, title:1, isbn:1, categories:1})
Figura 39. Función de búsqueda en MongoDB.
Después de leer todo el tema, el reto siguiente es que hagas un repaso sobre el uso
de MongoDB y sus principales comandos. Para ello, accede al vídeo «Uso de
MongoDB» que acompaña este tema.
Bases de Datos para el Big Data 39
Tema 3. Ideas clave
Ideas clave
Accede al vídeo:
[Link]
46e2-8062-aca701508b4e
Vídeo 1. Uso de MongoDB.
Bases de Datos para el Big Data 40
Tema 3. Ideas clave
Ideas clave
En esta otra lección titulada «Documentos de MongoDB y patrones de diseño», se
presenta un screencast de la consola de MongoDB, incluyendo ejemplos de
documentos y de patrones de diseño.
Accede al vídeo:
[Link]
4427-9218-adbe00e85197
Vídeo 2. Documentos de MongoDB y patrones de diseño.
Bases de Datos para el Big Data 41
Tema 3. Ideas clave
Ideas clave
Finalmente, en «Ejemplos de consultas en MongoDB» se presenta un screencast
sobre varios ejemplos de consultas realizadas en la consola de MongoDB.
Accede al vídeo:
[Link]
4e25-8a21-adbe00e865a9
Vídeo 3. Ejemplos de consultas en MongoDB.
Bases de Datos para el Big Data 42
Tema 3. Ideas clave
Ideas clave
3.9. Referencias bibliográficas
MongoDB. (s. f.). Documentación MongoDB. MongoDB Manual. Recuperado 14 de
junio de 2022, de [Link]
Bases de Datos para el Big Data 43
Tema 3. Ideas clave
A fondo
MongoDB: the definitive guide
Chodorow, K., y Dirolf, M. (2019). MongoDB: the definitive guide.
O’Reilly. [Link]
Este libro contiene información detallada sobre la creación, eliminación y
modificación de documentos en MongoDB. El capítulo 4 se centra en la realización
de consultas.
Bases de Datos para el Big Data 44
Tema 3. A fondo
A fondo
Bases de datos en MongoDB Compass
Ávila, J. (22 de junio de 2020). Como crear Bases de Datos en MongoDB Compass
Creación de Colecciones, Documentos y Vistas [Archivo de
vídeo]. [Link]
En este vídeo encontrarás un tutorial muy detallado de operaciones en MongoDB
muy usuales, tales como creación de bases de datos utilizando MongoDB Compass,
creación de colecciones, documentos, vistas, importar colecciones desde archivos
CSV y la forma de establecer agrupación y/o relaciones entre colecciones.
Bases de Datos para el Big Data 45
Tema 3. A fondo
A fondo
MongoDB: bases de datos, colecciones y
documentos
Informática DP. (21 de abril de 2020). 2/3 - MongoDB 2020 - Bases de datos,
Colecciones y Documentos [Archivo de vídeo]. [Link]
v=Fk5Kq-zhcJo
En este vídeo encontrarás una guía práctica para aprender a manipular MongoDB
desde cero. El IDE utilizado te dará otra visión de herramientas que puedes integrar
al uso diario de esta base de datos.
Bases de Datos para el Big Data 46
Tema 3. A fondo
A fondo
Documentación oficial de MongoDB
MongoDB. (2021). Documentation [Página web]. [Link]
Dentro del sitio oficial con la documentación del sistema MongoDB, el contenido
relevante para este tema es la sección MongoDB CRUD Operations.
Bases de Datos para el Big Data 47
Tema 3. A fondo
A fondo
A cookbook for MongoDB
MongoDB. (2021). Página web. [Link]
Este sitio web contiene una serie de recetas de soluciones a escenarios comunes en
el desarrollo de aplicaciones. Por ejemplo, una de las recetas indica cómo contar
los tags asociados a posts en un sitio web, utilizando el método Map-Reduce.
Bases de Datos para el Big Data 48
Tema 3. A fondo
A fondo
MongoBooster
MongoDB Admin GUI. (2021). Downloads. NoSQL Booster [Página
web]. [Link]
Enlace de descarga, documentación y características de esta GUI para MongoDB.
Bases de Datos para el Big Data 49
Tema 3. A fondo
A fondo
MongoDB Compass
MongoDB. (2021). MongoDB Compass [Página
web]. [Link]
Dentro del sitio oficial se puede acceder a la solución Compass y descargar la
aplicación gratuitamente.
Bases de Datos para el Big Data 50
Tema 3. A fondo
A fondo
Bibliografía
Banker, K. (2016). MongoDB in action. Manning Publications.
Bradshaw, S., Brazil, E., y Chodorow, K. (2019). MongoDB: the definitive guide:
powerful and scalable data storage. O'Reilly Media.
Copeland, R. (2013). MongoDB applied design patterns (pp. 37-73). O’Reilly Media.
Dayley, B., Dayley, B., y Dayley, C. (2017). [Link], MongoDB and Angular web
development: the definitive guide to using the MEAN stack to build web applications.
Addison-Wesley.
Giamas, A. (2017). Mastering MongoDB 3.x: an expert's guide to building fault-
tolerant MongoDB applications. Packt Publishing.
Mukasheva, A., Yedilkhan, D., & Zimin, I. (2021, abril). Uploading Unstructured Data
to MONGODB Using the NoSQLBooster Tool. En 2021 IEEE International
Conference on Smart Information Systems and Technologies (SIST) (pp. 1-4). IEEE.
Tiwari, S. (2011). Professional NoSQL (pp. 97-135, 217-232). John Wiley & Sons.
Bases de Datos para el Big Data 51
Tema 3. A fondo
Test
1. ¿Qué comando de la consola de MongoDB se utiliza para indicar la base de
datos con la que se trabajará?
A. select.
B. find.
C. use.
D. Las respuestas A y C son correctas.
2. ¿Cuál de las siguientes afirmaciones es correcta?
A. MongoBooster es una herramienta GUI multiplataforma que facilita la
construcción de consultas.
B. MongoDB Compass es una herramienta no propietaria para la
manipulación externa de bases de datos MongoDB.
C. MongoBooster y MongoDB Compass proporcionan información estadística
y de rendimiento de una base de datos MongoDB.
D. Todas las afirmaciones anteriores son correctas.
3. ¿Cuál será el resultado al insertar un documento que posee un atributo más al
resto de atributos de la colección?
A. Dará un fallo al insertar los datos porque el modelo de datos es diferente.
B. Insertará los datos a la colección.
C. Insertará los datos a la colección y creará el nuevo atributo vacío en el
resto de documentos.
D. Insertará los datos a la colección, pero sin el nuevo atributo para cumplir
con el modelo.
Bases de Datos para el Big Data 52
Tema 3. Test
Test
4. ¿Qué comando puede utilizarse en MongoDB para la creación de un nuevo
documento dentro de una collection?
A. save.
B. insert.
C. create.
D. Las respuestas A y B son correctas.
5. ¿Cuál es el nombre del atributo especial en las collections de MongoDB que
ayuda a identificar de manera única a cada documento?
A. _id.
B. ID.
C. Primary key.
D. Identifier.
6. ¿Qué método permite modificar los datos de un documento sin tener que incluir
el documento completo como argumento?
A. save.
B. store.
C. update.
D. set.
7. La operación MongoDB equivalente a JOIN en SQL es:
A. Se puede conseguir concatenando sentencias find en la misma operación.
B. El aggregation framework.
C. MongoDB no tiene operación equivalente a JOIN hasta su versión 3.2.
D. Ninguna de las anteriores es cierta.
Bases de Datos para el Big Data 53
Tema 3. Test
Test
8. ¿Qué situación tiene que darse para que el comando save actualice un
documento?
A. Que el argumento contenga un identificador existente en la collection.
B. Que el segundo argumento en el comando sea el valor true.
C. Que el argumento se parezca en más de un 50 % a un documento en la
collection.
D. save no puede utilizarse para actualizar documentos.
9. ¿Qué comando se utiliza en MongoDB para eliminar un conjunto de
documentos?
A. save.
B. delete.
C. remove.
D. unset.
10. ¿Qué comando puede aplicarse sobre el resultado de una consulta en
MongoDB para restringir el número de documentos retornados?
A. limit.
B. restrict.
C. skip.
D. sort.
Bases de Datos para el Big Data 54
Tema 3. Test
Tema 4
Bases de Datos para el Big Data
Agregación
Índice
Esquema
Ideas clave
4.1. Introducción y objetivos
4.2. Conceptos
4.3. Map-Reduce
4.4. Aggregation Framework
4.5. Casos prácticos
A fondo
MongoDB: the definitive guide
MongoDB Map-Reduce
MongoDB Aggregation Framework
Aggregation Framework
Documentación oficial de MongoDB
Bibliografía
Test
Esquema
Bases de Datos para el Big Data 3
Tema 4. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.1. Introducción y objetivos
Este tema se enfoca en los conceptos básicos de agregación y las dos
funcionalidades que tiene MongoDB para llevarlo a cabo. La lectura de las Ideas
claves te ayudará a conocer la sintaxis de los comandos utilizados para realizar
la agregación de datos.
Al tratarse de un tema muy práctico, la mejor forma de estudiarlo es a través de la
realización de los trabajos asignados. Además de los trabajos, es recomendable
trabajar de forma proactiva con MongoDB, lo cual te ayudará a familiarizarte con el
funcionamiento del sistema.
MongoDB permite agregar los datos de una colección a través de operaciones como
sumar, contar y otros. A lo largo de este tema, se estudiarán los conceptos básicos
de agregación y los dos métodos que utiliza MongoDB para agregar datos: Map-
Reduce y, a partir de la versión 2.2, Aggregate. En especial, se estudiará el
segundo por su importancia actual.
Los objetivos que se buscan alcanzar con este tema son los siguientes:
▸ Comprender los métodos Map-Reduce y Aggregate.
▸ Diferenciar los métodos y saber aplicar uno u otro en función del caso de uso.
▸ Poner en práctica el uso de ambos métodos a través de ejercicios guiados.
Bases de Datos para el Big Data 4
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.2. Conceptos
Cualquier persona que trabaje con bases de datos tiene que realizar con frecuencia
consultas para agrupar datos y obtener resultados a partir de ellas. Por ejemplo, si se
quiere conocer la suma total de ventas que cada comercial de una empresa ha
conseguido en un año, es necesario sumar cada una de las ventas que se han hecho
por comercial y agruparlas por el nombre de ese comercial.
Al final, se obtiene una tabla en la que aparecen
comerciales con la suma de sus ventas en el período marcado en la consulta, que
en este caso sería de un año.
En las bases de datos relacionales, este tipo de consultas se realizan con el
operador group by (para agrupar) y sum, count, etc. para realizar cualquier
operación con sus datos. MongoDB dispone de tres métodos para gestionar la
agregación: Map-Reduce, Aggregation Framework y operadores simples de
agregación específicos.
Map-Reduce es un modelo de programación utilizado por Google para el cálculo en
paralelo de grandes volúmenes de datos. Debido a la incursión del big data, este
modelo ha tomado mucha fuerza y se ha añadido a Framework y tecnologías como
MongoDB, Hadoop y muchas otras.
Por el contrario, MongoDB incorporó a partir de su versión 2.2 Aggregation
Framework, para poder realizar operaciones de agregación similares a las que se
hacen en los lenguajes SQL relacionales.
Aunque Map-Reduce es mucho más potente, ya que se tiene todo un lenguaje de
programación para realizar cálculos y generar salidas, también es más difícil de
Bases de Datos para el Big Data 5
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
utilizar por el nivel de programación que este requiere. Por ello, lo más recomendable
es utilizar Aggregation Framework para realizar cálculos tanto sencillos como más
complejos.
Otra de las razones por las que se recomienda más utilizar Aggregation Framework
es porque en temas de rendimiento está mucho más optimizado y, por lo tanto, el
tiempo de la consulta suele ser mucho menor.
Además de los dos modelos de agregación, MongoDB proporciona dos operadores
simples que no suelen incluirse dentro de los métodos de agregación descritos:
count y distinct. El primero cuenta el número de resultados obtenidos a partir de la
búsqueda y el segundo muestra los resultados que son distintos del campo que se
especifique como parámetro. A continuación, se puede ver el formato de distinct :
[Link](<atributo>, {<filtgro>})
Donde el atributo es el campo donde se hace el distinct y el filtro, los parámetros de
la búsqueda. Un ejemplo real sería:
[Link](“modelo”, {marca: “bmw”})
Bases de Datos para el Big Data 6
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.3. Map-Reduce
Las operaciones de map-reduce tienen dos fases:
▸ Una etapa de map que procesa cada documento y emite uno o más objetos para
cada documento de entrada.
▸ Una fase de reduce que combina la salida de la operación del map.
Opcionalmente, Map-Reduce puede tener una etapa de finalización para realizar
modificaciones finales al resultado. También puede especificar una condición de
consulta para seleccionar los documentos de entrada, así como ordenar y limitar los
resultados.
Map-Reduce utiliza funciones de JavaScript personalizadas para
realizar el map y el reduce de las operaciones, así como la operación de
finalización opcional. El uso de JavaScript proporciona una gran
flexibilidad en comparación con las pipelines, pero Map-Reduce es
menos eficiente y más complejo.
En el siguiente recuadro se muestra la sintaxis del método Map-Reduce:
El método Map-Reduce hace uso de una función map, la cual procesa un conjunto
de documentos y, mediante el comando , retorna un par clave-valor, utilizando los
atributos de cada documento. Todos los valores de cada par clave-valor son
agrupados de forma en que cada clave tendrá asociado un array con los valores
apropiados.
La función reduce recibe la clave y el array de valores como primer y segundo
Bases de Datos para el Big Data 7
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
argumento respectivamente; la tarea de esta función es realizar operaciones de
agregación sobre los valores del array y retornar el valor resultante. Este valor será
asociado a la clave respectiva.
Los parámetros de agregación en la función Map-Reduce se especifican como un
objeto JSON, con los siguientes atributos:
▸ out: es el único atributo obligatorio. Indica el nombre de la collection donde se
almacenará el resultado de la operación Map-Reduce. También puede indicarse la
función retorne el resultado directamente, a través del objeto .
▸ query: permite definir las condiciones de búsqueda para filtrar los documentos que
serán procesados.
▸ sort: indica la forma en la que se ordenarán los documentos antes de ser
procesados, lo cual permite optimizar el proceso.
▸ limit: indica el número máximo de documentos a retornar.
▸ finalize: es una función opcional para aplicar sobre los documentos retornados por
la función reduce.
▸ scope: indica variables globales que serán accesibles desde las funciones map,
reduce y finalize.
▸ jsMode: valor booleano para indicar si los documentos deben convertirse a formato
JSON en vez de BSON entre las funciones map y reduce. Por defecto es false.
▸ verbose: valor booleano que indica si se debe mostrar información sobre el tiempo
de procesado de la función Map-Reduce. El valor por defecto es true.
La siguiente captura muestra un ejemplo de ejecución del comando para calcular la
suma los precios de todos los documentos en la collection productos.
Bases de Datos para el Big Data 8
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 1. Ejemplo de Map-Reduce en la consola de MongoDB.
En el ejemplo, la función map emite pares clave-valor con la cadena de texto
«Suma» como clave constante y el atributo precio como el valor. La función reduce
se encarga de sumar los valores del array de precios, y este valor se asigna a la
clave «Suma» indicada previamente.
Además, se indica que la función retornará directamente los valores mediante el
atributo . Los resultados del método Map-Reduce se pueden obtener como un array
de documentos dentro del atributo .
En el siguiente ejemplo, se va realizar una operación Map-Reduce más compleja, en
la colección de pedidos para todos los documentos que tengan un valor mayor que
01/01/2012. La operación agrupa por el campo y calcula el número de pedidos y la
cantidad total para cada sku. La operación concluye calculando la cantidad media por
pedido para cada valor de sku.
Bases de Datos para el Big Data 9
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Si se parte del siguiente formato de documento:
_id: ObjectId("50a8240b927d5d8b5891743c"),
cust_id: "abc123",
ord_date: new Date("Oct 04, 2012"),
status: 'A',
price: 25,
items: [ { sku: "mmm", qty: 5, price: 2.5 },
{ sku: "nnn", qty: 5, price: 2.5 } ]
La función map que procesa cada documento:
▸ En la función, se refiere al documento que la operación Map-Reduce está
procesando.
▸ Por cada elemento, la función asocia con el nuevo objeto que contiene el campo
a 1 y el elemento para el perdido, y emite el par .
var mapFunction = function() {
for (var idx = 0; idx < [Link]; idx++) {
var key = [Link][idx].sku;
var value = {
count: 1,
qty: [Link][idx].qty
};
emit(key, value);
};
Se define la función reduce con dos argumentos: keySKU y countObjVals:
▸ es un array cuyos elementos son los objetos asignados a los valores de
agrupados pasados por la función map a la función reduce.
▸ La función reduce la matriz a un solo objeto que contiene los campos y .
Bases de Datos para el Big Data 10
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ En , el campo contiene la suma de los campos de los elementos individuales
del array, y el campo contiene la suma de los campos de los elementos
individuales del array:
var reduceFunction = function(keySKU, countObjVals) {
reducedVal = { count: 0, qty: 0 };
for (var idx = 0; idx < [Link]; idx++) {
[Link] += countObjVals[idx].count;
[Link] += countObjVals[idx].qty;
return reducedVal;
};
Para terminar, se define una función de finalización con dos argumentos y . La
función modifica el objeto para agregar un campo computado llamado y devuelve
el objeto modificado:
var finalizeFunction = function (key, reducedVal) {
[Link] = [Link]/[Link];
return reducedVal;
};
Para terminar, se realiza la operación de Map-Reduce en la colección utilizando
todas las funciones anteriores:
[Link]( mapFunction, reduceFunction, {
out: { merge: "map_reduce_example" },
query:{ ord_date: { $gt: new Date('01/01/2012') } },
finalize: finalizeFunction
});
Esta operación utiliza el campo de consulta para seleccionar solo aquellos
documentos con mayor que la fecha 01/01/2012. Seguidamente, emite los
resultados a una colección . Si ya existe la colección , la operación combinará el
contenido existente con los resultados de esta operación.
Bases de Datos para el Big Data 11
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Bases de Datos para el Big Data 12
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.4. Aggregation Framework
El framework de agregación de MongoDB está modelado en el concepto de tuberías
de procesamiento de datos, es decir, los documentos entran en una tubería (pipeline)
de varias etapas que transforman los documentos en un resultado agregado.
Las etapas más básicas proporcionan filtros que funcionan como consultas y
transformaciones de documentos que modifican la forma del documento de salida.
El resto de operaciones proporcionan herramientas para agrupar y clasificar
documentos por campo o campos específicos, así como herramientas para agregar
el contenido de arrays, incluyendo arrays de documentos. Además, las etapas
pueden utilizar operadores para tareas tales como calcular el promedio o
concatenación de cadenas.
Aggregate funciona perfectamente con la capacidad de sharding que proporciona
MongoDB y que se verá más adelante. Además, se puede utilizar índices para
mejorar el rendimiento durante algunas de sus etapas. Independientemente,
Aggregate tiene una fase de optimización interna, lo que le permite mejorar
sustancialmente en rendimiento a Map-Reduce.
A continuación, se ilustra el funcionamiento de Aggregate con un ejemplo básico:
[Link]( [
$match stage ->{$match: {marca: "BMW" } },
$group stage -> {$group: {_id: "$modelo", total: { $sum: "$precio"} } },
more stage -> { ... },
more stage -> { ... }
]
)
El funcionamiento en etapas sería el siguiente:
Bases de Datos para el Big Data 13
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. Ejemplo de agrupación con Aggregate en MongoDB.
Como se puede ver, la etapa de filtrado ( $smatch ) es análoga a la vista en los filtros
convencionales de MongoDB, por lo que esta operación busca los documentos
según los valores especiados.
Por otro lado, la etapa de agrupación ( $group ), que es quizá la más usada en el
proceso de agrupación, permite agrupar y realizar los cálculos sobre los documentos.
Nótese que es obligatorio especificar el campo _id en el nuevo documento, ya que
estos son los valores para agrupar.
Es posible definir agrupaciones para campos múltiples. Esta etapa trasforma el
documento de salida, por lo que en ella se deben especificar, como se ha podido ver,
los nuevos atributos de la colección y cómo se obtienen estos atributos. MongoDB
permite utilizar los siguientes operadores:
▸ $min: devuelve el valor mínimo de los valores numéricos.
▸ $max: devuelve el valor máximo de los valores numéricos.
Bases de Datos para el Big Data 14
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ $avg: devuelve el valor medio de los valores numéricos.
▸ $sum: calcula y devuelve la suma de los valores numéricos.
▸ $first: devuelve el valor que resulta de aplicar una expresión al primer documento
de un grupo de documentos que comparten el mismo grupo por un campo. Solo
tiene sentido cuando los documentos están en un orden definido. Un ejemplo de uso
es en fechas.
▸ $last: devuelve el valor que resulta de aplicar una expresión al último documento de
un grupo de documentos que comparten el mismo grupo por un campo. Solo tiene
sentido cuando los documentos están en un orden definido.
▸ $addToSet: devuelve un array con todos los valores únicos que resulta de aplicar
una expresión a cada documento de un grupo de documentos que comparten el
mismo grupo por clave. El orden de los elementos en la matriz de salida no está
especificado.
▸ $push: devuelve un array con todos los valores que resultan de la aplicación de una
expresión a cada documento de un grupo de documentos que comparten el mismo
grupo por clave.
▸ $stdDevPop: (desde la versión 3.4) calcula la desviación estándar de la población
de los valores de entrada. Se debe utilizar si los valores abarcan toda la población de
datos que desea representar y no porque se desee generalizar sobre una población
mayor. Omite valores no numéricos.
▸ $stdDevSamp: (desde la versión 3.4.) Calcula la desviación estándar de la muestra
de los valores de entrada. Se debe utilizar si los valores abarcan una muestra de una
población de datos a partir de la cual se generaliza sobre la población total. Omite
valores no numéricos.
El framework de agregación permite definir un mayor número de etapas que las dos
Bases de Datos para el Big Data 15
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
que se han descrito anteriormente. El esquema general, por lo tanto, es el siguiente:
[Link]( [ { <etapa1> }, { <etapa2> }, ... ] )
A continuación, se detallan todas las etapas posibles:
▸ $collStats: devuelve estadísticas sobre una colección o una vista.
▸ $project: redimensiona cada documento en el flujo, por ejemplo, agregando nuevos
campos o eliminando campos existentes. Para cada documento de entrada, se
genera un documento.
▸ $match: filtra el flujo de documentos para permitir que solo los documentos
coincidentes pasen sin modificaciones a la siguiente fase de la canalización.
▸ $redact: redimensiona cada documento en el flujo restringiendo el contenido de
cada documento basado en la información almacenada en los propios documentos.
Incorpora la funcionalidad de $project y $smatch . Puede utilizarse para implementar
la redacción a nivel de campo. Para cada documento de entrada, genera uno o cero
documentos.
▸ $limit: transmite los primeros documentos no modificados a la canalización donde
es el límite especificado. Para cada documento de entrada, se obtiene un
documento (para los primeros documentos) o cero documentos (después de los
primeros documentos).
▸ $skip: salta los primeros documentos donde es el número de salto especificado
y pasa los documentos restantes sin modificar a la tubería. Para cada documento de
entrada, se emiten documentos cero (para los primeros documentos) o un
documento (después de los primeros documentos).
▸ $unwind: deconstruye un campo de un array de los documentos de entrada para
generar un documento para cada elemento. Cada documento de salida reemplaza el
array con un valor de elemento. Para cada documento de entrada, se producen
documentos donde es el número de elementos del array y puede ser cero para
Bases de Datos para el Big Data 16
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
una matriz vacía.
▸ $group: agrupa los documentos de entrada por una expresión de identificador
especificada y aplica la(s) expresión(es) acumuladora(s), si se especifica, a cada
grupo. Consume todos los documentos de entrada y genera un documento por cada
grupo distinto. Los documentos de salida solo contienen el campo identificador y, si
se especifica, los campos acumulados.
▸ $sample: selecciona aleatoriamente el número especificado de documentos de su
entrada.
▸ $sort: reordena el flujo de documentos mediante una clave de clasificación
especificada. Solo cambia el orden; Los documentos permanecen sin modificar. Para
cada documento de entrada, se genera un documento.
▸ $geoNear: devuelve un flujo ordenado de documentos basado en la proximidad a un
punto geoespacial. Incorpora la funcionalidad de $match, $sort y $limit para los datos
geoespaciales. Los documentos de salida incluyen un campo de distancia adicional
y pueden incluir un campo de identificador de ubicación.
▸ $lookup: realiza una combinación externa izquierda con otra colección en la misma
base de datos para filtrar en documentos de la colección «unida» para su
procesamiento.
▸ $out: escribe los documentos resultantes de la tubería de agregación en una
colección. Para usar la etapa $out , debe ser la última etapa en la tubería.
▸ $indexStats: devuelve estadísticas sobre el uso de cada índice para la colección.
▸ $facet: procesa múltiples tuberías de agregación dentro de una sola etapa en el
mismo conjunto de documentos de entrada. Permite la creación de agregaciones
multifacéticas capaces de caracterizar datos a través de múltiples dimensiones, o
facetas, en una sola etapa.
Bases de Datos para el Big Data 17
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ $bucket: categoriza los documentos entrantes en grupos, llamados cubos, basados
en una expresión especificada y límites de cubo.
▸ $bucketAuto: clasifica los documentos entrantes en un número específico de
grupos, llamados cubos, en función de una expresión especificada. Los límites del
cubo se determinan automáticamente en un intento de distribuir uniformemente los
documentos en el número especificado de cubos.
▸ $sortByCount: agrupa los documentos entrantes basados en el valor de una
expresión especificada y, a continuación, calcula el recuento de documentos en
cada grupo distinto.
▸ $addFields: agrega nuevos campos a los documentos. Produce documentos que
contienen todos los campos existentes de los documentos de entrada y campos
añadidos recientemente.
▸ $replaceRoot: reemplaza un documento con el documento incrustado especificado.
La operación reemplaza todos los campos existentes en el documento de entrada,
incluido el campo _id . Especifica un documento incrustado en el documento de
entrada para promocionar el documento incrustado al nivel superior.
▸ $count: devuelve un recuento del número de documentos en esta etapa de la
canalización de agregación.
▸ $graphLookup: realiza una búsqueda recursiva en una colección. A cada
documento de salida, agrega un nuevo campo de matriz que contiene los resultados
de recorrido de la búsqueda recursiva para ese documento.
Los operadores de expresión se construyen para construir expresiones en algunas
de las etapas de la tubería. Algunos de ellos ya se han visto en el tema anterior. El
formato es el siguiente:
{<operador>: [ <argumento1>, <argumento2>, ... ]}
Bases de Datos para el Big Data 18
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
A continuación, se enumera cada tipo de operador:
▸ Booleanos: $and , $or , $not
▸ De conjunto: $setEquals , $setIntersection , $setUnin , $setDifference , $setIsSubset ,
$anyElmenetTrue , $allElementsTrue
▸ De comparación: $cmp , $eq , $gt , $gte , $lt , $lte , $ne
▸ Aritméticos: $abs , $add , $ceil , $divide , $exp , $floor , $ln , $log , $log10 , $mod ,
$multiply , $pow , $sqrt , $subtract , $truc
▸ De cadena de caracteres : $concat , $indexOfBytes , $indexOfCP , $split , $strLenBytes ,
$strLenCP , $strcasecmp , $substr , $substrBytes , $substrCP , $toLower, $toUpper .
▸ Búsqueda de texto: $meta
▸ Array: $arrayElemAt , $concatArrays , $filter , $indexOfArray , $isArray, $range , $reverseArray
, $reduce , $size , $slice , $zip , $in
▸ Variable: $map , $let
▸ Literal: $literal
▸ Date: $dayOfYear , $dayOfMonth , $dayOfWeek , $year , $month , $week , $hour , $minute ,
$second , $millisecond , $dateToString , $isoDayOfWeek , $isoWeek , $isoWeekYear
▸ Condicional: $cond , $ifNull , $switch
▸ Tipo de datos: $type
Bases de Datos para el Big Data 19
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.5. Casos prácticos
En este apartado pondrás en práctica lo aprendido con el método Map-Reduce y lo
compararás con las funciones de Aggregate. Se proponen tres casos prácticos
donde debes:
▸ Insertar los datos.
▸ Crear las funciones Map-Reduce.
▸ Escribir la función Aggregate.
▸ Finalmente, consultar el documento de salida de las operaciones anteriores.
Los datos del primer y segundo caso no son iguales a los datos propuestos para el
tercer caso.
Caso 1: usar Map-Reduce y comparar con Aggregate.
▸ Para los siguientes ejercicios, utiliza el siguiente conjunto de documentos de la
colección norders .
<pre><code>[Link]([
{ _id: 1, cust_id: "Ant O. Knee", ord_date: new Date("2020-03-01"), price: 25, items:
[ { sku: "oranges", qty: 5, price: 2.5 }, { sku: "apples", qty: 5, price: 2.5 } ], status: "A" },
{ _id: 2, cust_id: "Ant O. Knee", ord_date: new Date("2020-03-08"), price: 70, items:
[ { sku: "oranges", qty: 8, price: 2.5 }, { sku: "chocolates", qty: 5, price: 10 } ], status: "A" },
{ _id: 3, cust_id: "Busby Bee", ord_date: new Date("2020-03-08"), price: 50, items:
[ { sku: "oranges", qty: 10, price: 2.5 }, { sku: "pears", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 4, cust_id: "Busby Bee", ord_date: new Date("2020-03-18"), price: 25, items:
[ { sku: "oranges", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 5, cust_id: "Busby Bee", ord_date: new Date("2020-03-19"), price: 50, items:
[ { sku: "chocolates", qty: 5, price: 10 } ], status: "A"},
{ _id: 6, cust_id: "Cam Elot", ord_date: new Date("2020-03-19"), price: 35, items:
[ { sku: "carrots", qty: 10, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "A" },
Bases de Datos para el Big Data 20
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
{ _id: 7, cust_id: "Cam Elot", ord_date: new Date("2020-03-20"), price: 25, items:
[ { sku: "oranges", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 8, cust_id: "Don Quis", ord_date: new Date("2020-03-20"), price: 75, items:
[ { sku: "chocolates", qty: 5, price: 10 }, { sku: "apples", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 9, cust_id: "Don Quis", ord_date: new Date("2020-03-20"), price: 55, items:
[ { sku: "carrots", qty: 5, price: 1.0 }, { sku: "apples", qty: 10, price: 2.5 },
{ sku: "oranges", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 10, cust_id: "Don Quis", ord_date: new Date("2020-03-23"), price: 25, items:
[ { sku: "oranges", qty: 10, price: 2.5 } ], status: "A" }
])
▸ Escribe las siguientes funciones:
<pre><code>var mapFunction1 = function() {
emit(this.cust_id, [Link]);
};
var reduceFunction1 = function(keyCustId, valuesPrices) {
return [Link](valuesPrices);
};
▸ Ahora aplica las funciones sobre los documentos anteriores:
<pre><code>[Link](
mapFunction1,
reduceFunction1,
{ out: "map_reduce_example" }
▸ Observa que el resultado de Map-Reduce se almacena en una nueva colección
llamada map_reduce_example . El paso siguiente es ejecutar una consulta sobre esta
nueva colección.
<pre><code>db.map_reduce_example.find().sort({_id:1})
{ "_id" : "Ant O. Knee", "value" : 95 }
{ "_id" : "Busby Bee", "value" : 125 }
Bases de Datos para el Big Data 21
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
{ "_id" : "Cam Elot", "value" : 60 }
{ "_id" : "Don Quis", "value" : 155 }
▸ Ahora realiza la misma operación anterior, pero utilizando la función aggregate .
<pre><code>[Link]([
{ $group: { _id: "$cust_id", value: { $sum: "$price" } } },
{ $out: "agg_alternative_1" }
])
▸ Repite la última consulta para comprobar el resultado.
<pre><code>
db.agg_alternative_1.find().sort({_id:1})
▸ Puedes observar la diferencia que hay entre el uso de Map-Reduce y Aggregate.
Caso 2: utiliza Map-Reduce y compara con Aggregate, añade además la
cláusula
finalize
▸ Escribe las siguientes funciones:
<pre><code>var mapFunction2 = function() {
for (var idx = 0; idx < [Link]; idx++) {
var key = [Link][idx].sku;
var value = { count: 1, qty: [Link][idx].qty };
emit(key, value);
};
var reduceFunction2 = function(keySKU, countObjVals) {
reducedVal = { count: 0, qty: 0 };
for (var idx = 0; idx < [Link]; idx++) {
[Link] += countObjVals[idx].count;
[Link] += countObjVals[idx].qty;
Bases de Datos para el Big Data 22
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
return reducedVal;
};
var finalizeFunction2 = function (key, reducedVal) {
[Link] = [Link]/[Link];
return reducedVal;
};
Bases de Datos para el Big Data 23
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Ahora aplica las funciones sobre los documentos anteriores:
<pre><code>[Link](
mapFunction2,
reduceFunction2,
out: { merge: "map_reduce_example2" },
query: { ord_date: { $gte: new Date("2020-03-01") } },
finalize: finalizeFunction2
);
▸ Recuerda consultar la nueva colección producto del Map-Reduce creado
previamente.
<pre><code>db.map_reduce_example2.find().sort( { _id: 1 } )
▸ Ahora realiza la misma operación anterior, pero utilizando la función aggregate .
<pre><code>[Link]( [
{ $match: { ord_date: { $gte: new Date("2020-03-01") } } },
{ $unwind: "$items" },
{ $group: { _id: "$[Link]", qty: { $sum: "$[Link]" }, orders_ids: { $addToSet: "$_id" }
} },
{ $project: { value: { count: { $size: "$orders_ids" }, qty: "$qty", avg:
{ $divide: [ "$qty", { $size: "$orders_ids" } ] } } } },
{ $merge: { into: "agg_alternative_3", on: "_id", whenMatched: "replace",
whenNotMatched: "insert" } }
])
▸ Repite la última consulta para comprobar el resultado.
<pre><code>db.agg_alternative_3.find().sort( { _id: 1 } )
Bases de Datos para el Big Data 24
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Caso 3: utiliza Map-Reduce y compara con Aggregate, añade además la
cláusula
finalize
y observa la agrupación incremental
▸ Para el siguiente ejercicio, utiliza el siguiente conjunto de documentos de la
colección usersessions .
<pre><code>[Link]([
{ userid: "a", start: ISODate('2020-03-03 [Link]'), length: 95 },
{ userid: "b", start: ISODate('2020-03-03 [Link]'), length: 110},
{ userid: "c", start: ISODate('2020-03-03 [Link]'), length: 120},
{ userid: "d", start: ISODate('2020-03-03 [Link]'), length: 45 },
{ userid: "a", start: ISODate('2020-03-04 [Link]'), length: 105},
{ userid: "b", start: ISODate('2020-03-04 [Link]'), length: 120},
{ userid: "c", start: ISODate('2020-03-04 [Link]'), length: 130},
{ userid: "d", start: ISODate('2020-03-04 [Link]'), length: 65 }
])
[Link]([
{ userid: "a", ts: ISODate('2020-03-05 [Link]'), length: 130 },
{ userid: "b", ts: ISODate('2020-03-05 [Link]'), length: 40 },
{ userid: "c", ts: ISODate('2020-03-05 [Link]'), length: 110 },
{ userid: "d", ts: ISODate('2020-03-05 [Link]'), length: 100 }
])
▸ Escribe las siguientes funciones:
<pre><code>var mapFunction = function() {
var key = [Link];
var value = { total_time: [Link], count: 1, avg_time: 0 };
emit( key, value );
};
var reduceFunction = function(key, values) {
var reducedObject = { total_time: 0, count:0, avg_time:0 };
[Link](function(value) {
reducedObject.total_time += value.total_time;
Bases de Datos para el Big Data 25
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
[Link] += [Link];
});
return reducedObject;
};
var finalizeFunction = function(key, reducedValue) {
if ([Link] > 0)
reducedValue.avg_time = reducedValue.total_time / [Link];
return reducedValue;
};
Bases de Datos para el Big Data 26
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Ahora aplica las funciones sobre los documentos anteriores:
<pre><code>[Link](
mapFunction,
reduceFunction,
out: "session_stats",
finalize: finalizeFunction
db.session_stats.find().sort( { _id: 1 } )
▸ Observa el resultado obtenido.
<pre><code>{"_id":"a","value":{"total_time":330, "count":3, "avg_time" : 110 } }
{"_id":"b","value":{"total_time":270, "count":3, "avg_time" : 90 } }
{"_id":"c","value":{"total_time":360, "count":3, "avg_time" : 120 } }
{"_id":"d","value":{"total_time":210, "count":3, "avg_time" : 70 } }
▸ Prueba ahora la siguiente forma y observa el resultado.
<pre><code>[Link](
mapFunction,
reduceFunction,
query: { ts: { $gte: ISODate('2020-03-05 [Link]') } },
out: { reduce: "session_stats" },
finalize: finalizeFunction
db.session_stats.find().sort( { _id: 1 } )
▸ Realiza la misma tarea, pero ahora con aggregate . Utiliza el siguiente conjunto de
documentos de la colección usersessions .
Bases de Datos para el Big Data 27
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
<pre><code>[Link]();
[Link]([
{ userid: "a", start:ISODate('2020-03-03 [Link]'), length: 95 },
{ userid: "b", start:ISODate('2020-03-03 [Link]'), length: 110 },
{ userid: "c", start:ISODate('2020-03-03 [Link]'), length: 120 },
{ userid: "d", start:ISODate('2020-03-03 [Link]'), length: 45 },
{ userid: "a", start:ISODate('2020-03-04 [Link]'), length: 105 },
{ userid: "b", start:ISODate('2020-03-04 [Link]'), length: 120 },
{ userid: "c", start:ISODate('2020-03-04 [Link]'), length: 130 },
{ userid: "d", start:ISODate('2020-03-04 [Link]'), length: 65 }
])
[Link]([
{ $group: {_id: "$userid", total_time: {$sum: "$length" }, count: {$sum: 1 }, avg_time:
{$avg: "$length" }}},
{ $project: { value: { total_time: "$total_time", count: "$count", avg_time: "$avg_time" } } },
{ $merge: {
into: "session_stats_agg",
whenMatched: [ { $set: {
"value.total_time": {$add: ["$value.total_time", "
[Link].total_time" ] }, "[Link]": {$add: ["$[Link]", " [Link]" ] },
"[Link]": {$divide: [{$add: ["$value.total_time", "
[Link].total_time"]}, {$add: ["$[Link]", " [Link]" ] } ] }
} } ],
whenNotMatched: "insert"
}}
])
▸ Ejecutar una consulta sobre la nueva colección.
db.session_stats_agg.find().sort( { _id: 1 } )
Sugerencia: una vez finalizada la lectura, publica un mensaje en el foro de este
tema dando tu punto de vista sobre las ventajas de usar Map-Reduce y Aggregate.
Investiga un poco más sobre el tema y comenta si el hecho de que MongoDB use
JavaScript dificulta de alguna manera el uso de Map-Reduce o Aggregate.
Bases de Datos para el Big Data 28
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Después de leer todo el tema, el reto siguiente es que hagas un repaso sobre el uso
de Map-Reduce y lo compares con Aggregate. En los vídeos siguientes el profesor
repasará los casos prácticos y comentará algunos aspectos que se deben tener en
cuenta a la hora de trabajar con estos mecanismos.
Bases de Datos para el Big Data 29
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
[Link]
4ed4-a223-aca7018b452a
Vídeo 1. Map-Reduce vs. Aggregate, caso práctico 1.
Bases de Datos para el Big Data 30
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
[Link]
40af-afc8-aca80003fd5c
Vídeo 2. Map-Reduce vs. Aggregate, caso práctico 2.
En esta otra clase, «Utilización del framework Aggregate», se explica cómo utilizar el framework Aggregate
con ejemplos prácticos.
Accede al vídeo:
[Link]
4621-b87a-adbe00e864f7
Vídeo 3. Utilización del framework Aggregate.
Bases de Datos para el Big Data 31
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
MongoDB: the definitive guide
Chodorow, K., y Dirolf, M. (2019). MongoDB: the definitive guide.
O’Reilly. [Link]
Este libro contiene información detallada sobre la creación, eliminación y
modificación de documentos en MongoDB. El capítulo 6 detalla las funciones de
agregación.
Bases de Datos para el Big Data 32
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
MongoDB Map-Reduce
Sr. Fugu Data Science. (12 de mayo de 2020). Tutorial de MONGODB: REDUCCIÓN
DE MAPAS [Archivo de vídeo]. [Link]
Esta es una guía para principiantes de Map-Reduce (MongoDB) con ejemplos y
casos de uso. También habrá ejemplos de agregación, para mostrar cuándo es
posible que Map-Reduce no encaje.
Bases de Datos para el Big Data 33
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
MongoDB Aggregation Framework
Herrera, J. [Programar es fácil]. (8 de abril de 2020). Tutorial MongoDB 4.2 Parte 10
Agreaciones: Instrucción Aggregate $match $group $sum $avg $multiply [Archivo de
vídeo]. [Link]
Esta es una guía de Aggregate en MongoDB con ejemplos y casos de uso. También
habrá ejemplos de agregación, para mostrar cuándo es posible que Map-Reduce no
encaje.
Bases de Datos para el Big Data 34
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Aggregation Framework
MongoDB. (25 de junio de 2014). The Aggregation Framework [Archivo de vídeo].
[Link]
La introducción a MongoDB presentada durante los primeros minutos de este vídeo
incluye una breve descripción de las características del sistema. También presentan
un ejemplo con las diferencias entre bases de datos relacionales y MongoDB.
Bases de Datos para el Big Data 35
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Documentación oficial de MongoDB
MongoDB. (2021). Documentation [Página web]. [Link]
Dentro del sitio oficial con la documentación del sistema MongoDB, el contenido
relevante para este tema es la sección MongoDB Map-Reduce y Aggregation
Framework.
Bases de Datos para el Big Data 36
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Bibliografía
Bradshaw, S., Brazil, E., y Chodorow, K. (2019). MongoDB: the definitive guide:
powerful and scalable data storage. O'Reilly Media.
Castillo, J. N., Garcés, J. R., Navas, M. P., Segovia, D. F. J., y Naranjo, J. E. A.
(2017). Base de Datos NoSQL: MongoDB vs. Cassandra en operaciones CRUD
(Create, Read, Update, Delete). Revista Publicando, 4(11 (1)), pp. 79-107.
Giamas, A. (2017). Mastering MongoDB 3.x: an expert's guide to building fault-
tolerant MongoDB applications. Packt Publishing.
Tiwari, S. (2011). Professional NoSQL (pp. 97-135, 217-232). John Wiley & Sons.
Bases de Datos para el Big Data 37
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Para qué son útiles las funciones de agregación?
A. Para agrupar datos.
B. Para realizar cálculos.
C. Para crear nuevas colecciones.
D. Todas las anteriores son correctas.
2. ¿Qué método puede utilizarse en MongoDB para agregar información de
documentos en una collection?
A. sum.
B. Aggregate, a partir de la versión 2.2.
C. Map-Reduce.
D. Las respuestas B y C son correctas.
3. ¿Cuál de las siguientes son operaciones específicas de agregación?
A. sum.
B. Map-Reduce.
C. count.
D. Las respuestas A y C son correctas.
4. ¿Cuál es el objetivo principal de la función map?
A. Generar los pares clave-valor.
B. Realizar operaciones con los atributos de la colección.
C. Operar sobre los pares clave-valor.
D. Crear una nueva colección.
Bases de Datos para el Big Data 38
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Cuál es el objetivo principal de la función reduce?
A. Generar los pares clave-valor.
B. Realizar operaciones con los atributos de la colección.
C. Operar sobre los pares clave-valor.
D. Crear una nueva colección.
6. ¿Qué comando se utiliza en una función map para generar el par clave-valor que
será procesado posteriormente?
A. generate.
B. return.
C. emit.
D. yield.
7. ¿Cuál de las siguientes es una ventaja de framework de agregación de
MongoDB?
A. Rendimiento.
B. Potencia.
C. Simplicidad.
D. Las respuestas A y C son correctas.
8. ¿En qué está modelado el framework de agregación?
A. Funciones.
B. Etapas.
C. Sentencias SQL.
D. Agrupaciones.
Bases de Datos para el Big Data 39
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Qué campo es obligatorio especificar en framework de agregación?
A. _id.
B. Object.
C. $sum.
D. $group.
10. ¿Cuál de los siguientes es un operador del framework de agregación?
A. $gt.
B. $map.
C. $year.
D. Todos los anteriores son correctos.
Bases de Datos para el Big Data 40
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 5
Bases de Datos para el Big Data
Tema 5. Gestión de
MongoDB
Índice
Esquema
Ideas clave
5.1. Introducción y objetivos
5.2. Seguridad
5.3. Respaldo
5.4. Rendimiento
5.5. Sharding
A fondo
MongoDB Sharding 101
MongoDB: how to deploy a MongoDB replica set
Documentación oficial de MongoDB
The database for modern applications: MongoDB
A Cookbook for MongoDB
MongoDB: The Definitive Guide
Bibliografía
Test
Esquema
Bases de Datos para el Big Data 3
Tema 5. Esquema
Ideas clave
5.1. Introducción y objetivos
Este tema se enfoca en operaciones y parámetros para la gestión de bases de datos
en el sistema MongoDB. La mejor forma para estudiar este tema es mediante la
lectura de las Ideas clave, sobre todo por el alto número de conceptos que aparecen
relacionados con el rendimiento de las bases de datos. Además, la realización de las
actividades permitirá poner en práctica la aplicación de estos conceptos.
Al contrario que con las operaciones básicas, verificar el resultado de operaciones de
gestión puede tener un grado mayor de complejidad, por lo que se recomienda
validar las soluciones.
Un correcto tratamiento del almacenamiento de información requiere conocimientos
sobre la gestión del sistema de base de datos. Es por esta razón que, además de
estudiar las operaciones básicas para el tratamiento de datos en MongoDB, también
se hará un repaso de operaciones de gestión sobre la base de datos.
Las operaciones de gestión que se describen en este tema toman en cuenta la
gestión de parámetros de seguridad, que es de gran importancia cuando los datos
que se manipulan son de carácter personal o privado. Otra parte importante es la
migración de una base de datos, lo cual incluye la realización de copias de respaldo
y la restauración de la copia, así como la replicación de nodos para respaldo.
Además, es necesario configurar la base de datos para lograr un rendimiento óptimo,
lo cual puede realizarse a través de la creación de índices. Finalmente, se abordarán
temas de repartición de la carga entre diferentes nodos gracias al sharding.
Los objetivos que se persiguen con este tema son los siguientes:
▸ Conocer los elementos mínimos que una correcta gestión de MongoDB debe
incorporar.
Bases de Datos para el Big Data 4
Tema 5. Ideas clave
Ideas clave
▸ Entender los requerimientos mínimos de seguridad en un despliegue de MongoDB.
▸ Aprender los pasos para configurar los procesos de respaldo, mejora del rendimiento
y sharding en la base de datos.
Bases de Datos para el Big Data 5
Tema 5. Ideas clave
Ideas clave
5.2. Seguridad
Uno de los aspectos que tomar en cuenta en entornos de producción es la protección
de los datos mediante medidas de seguridad. MongoDB permite restringir el acceso
a las bases de datos mediante la autenticación del usuario. Inicialmente se debe
crear un usuario administrador, el cual tendrá privilegios para crear usuarios y
acceder a todas las bases de datos en el sistema.
Un usuario puede tener privilegios en diferentes bases de datos. Si necesita que un
usuario tenga privilegios en varias bases de datos, crea un solo usuario con roles
que otorguen los privilegios de base de datos aplicables en lugar de crear el usuario
varias veces en diferentes bases de datos.
El proceso para crear un administrador consiste en utilizar el comando createUser en
la base de datos admin :
use admin
[Link](<Nombre de usuario>, <Contraseña de usuario>)
Por defecto, el servicio mongod no requiere autenticación para interactuar con la
base de datos. Este comportamiento puede cambiarse mediante el parámetro --auth
al ejecutar mongod desde la línea de comando.
Para autenticarse desde la consola de MongoDB se utiliza el comando [Link] :
[Link](<Nombre de usuario>, <Contraseña de usuario>)
La creación de usuarios en una base de datos se realiza con el mismo comando, con
la diferencia de realizarlo dentro de la base de datos apropiada y no en admin .
Además, en la creación de un usuario de base de datos, el comando [Link] puede
recibir un tercer parámetro de valor booleano que indica si el usuario solamente tiene
privilegios de lectura.
Bases de Datos para el Big Data 6
Tema 5. Ideas clave
Ideas clave
Además de asegurar el acceso a la base de datos a través de métodos de
autenticación, en ocasiones es conveniente restringir los mecanismos de acceso a
nivel de red. Por defecto, MongoDB espera conexiones desde cualquier interfaz de
red del ordenador en el que se encuentra. Para restringir conexiones desde una
interfaz en específico se debe indicar la dirección IP en el parámetro --bind_ip al
iniciar el servicio mongod .
Además de las opciones de seguridad que ofrece Mongo, es posible añadir muchas
otras externas, como podría ser la utilización de un firewall para restringir las
comunicaciones del exterior o de otros dominios.
A continuación, se describen mediante un ejemplo los pasos necesarios para realizar
una correcta restricción de acceso:
▸ Paso 1: se crea el usuario administrador:
[Link]({
user:"admin",
pwd: "mipassword“,
roles:[
"clusterAdmin",
"readAnyDatabase",
"readWriteAnyDatabase",
"userAdminAnyDatabase",
"dbAdminAnyDatabase“
]
});
▸ Paso 2: parar el servidor y volver a iniciarlo con la autenticación activada. Este
proceso se puede realizar de dos maneras:
• Arrancamos el servidor con el siguiente comando:
mongod --auth --port 27017 --dbpath /data/db1
Bases de Datos para el Big Data 7
Tema 5. Ideas clave
Ideas clave
▸ Añadimos la siguiente línea al archivo de configuración de Mongo ( /bin/[Link]):
security:
authorization: enabled
▸ Paso 3: se crea el usuario con los roles establecidos.
• Se accede como administrador:
mongo –u “usuario” –p “pass”
▸ Se accede a la base de datos sobre la que se quiere crear el usuario:
use DatabaseForSensors
▸ Se crea el usuario para esa base de datos:
[Link]({
user: “luis",
pwd: “jf9paus90D",
roles: [ { role: "readWrite", db: "DatabaseForSensors"},
})
MongoDB ofrece funciones integradas que proporcionan los diferentes niveles de
acceso comúnmente necesarios en un sistema de base de datos. Existen roles de
usuario de base de datos incorporados y funciones de administración de bases de
datos en cada base de datos. La base de datos a d m i n contiene funciones
adicionales.
Cada base de datos incluye los siguientes roles:
▸ read: proporciona la capacidad de leer datos de todas las colecciones que no son
del sistema y de las siguientes colecciones del sistema: [Link], [Link] y
[Link] .
Bases de Datos para el Big Data 8
Tema 5. Ideas clave
Ideas clave
Bases de Datos para el Big Data 9
Tema 5. Ideas clave
Ideas clave
▸ readWrite: proporciona todos los privilegios del rol de lectura y la capacidad de
modificar datos de todas las colecciones que no son del sistema y de la colección
[Link] ..
Cada base de datos incluye los siguientes roles de administración de base de datos:
▸ dbadmin: proporciona la capacidad de realizar tareas administrativas, tales como
tareas relacionadas con el esquema, indexación y recopilación de estadísticas. Esta
función no otorga privilegios para la administración de usuarios y roles.
▸ dbOwner: proporciona la capacidad de realizar cualquier acción administrativa en la
base de datos. Este rol combina los privilegios otorgados por las funciones readWrite,
dbAdmin y userAdmin .
▸ userAdmin: proporciona la capacidad de crear y modificar roles y usuarios en la
base de datos actual. Dado que el rol userAdmin permite a los usuarios otorgar
cualquier privilegio a cualquier usuario, incluyendo a ellos mismos, el rol también
indirectamente proporciona acceso de superusuario a la base de datos o, si se
extiende a la base de datos de administración, al clúster.
La base de datos admin incluye las siguientes funciones para administrar todo el
sistema en lugar de una base de datos específica:
▸ clusterAdmin: proporciona el mayor acceso de administración de clústeres. Este rol
combina los privilegios otorgados por las funciones clusterManager, clusterMonitor y
hostManager. Además, la función proporciona la acción dropDatabase .
▸ clusterManager: proporciona acciones de administración y supervisión en el clúster.
Un usuario con esta función puede acceder a las bases de datos de configuración y
local, que se utilizan en sharding y replicación, respectivamente.
Bases de Datos para el Big Data 10
Tema 5. Ideas clave
Ideas clave
Bases de Datos para el Big Data 11
Tema 5. Ideas clave
Ideas clave
▸ clusterMonitor: proporciona acceso de solo lectura a las herramientas de
supervisión, como MongoDB Cloud Manager y el agente de supervisión Ops
Manager.
▸ hostManager: proporciona la capacidad de supervisar y administrar servidores.
La base de datos admin incluye las siguientes funciones para realizar copias de
seguridad y restaurar datos:
▸ backup: proporciona los privilegios necesarios para realizar copias de seguridad de
los datos. Esta función proporciona suficientes privilegios para utilizar el agente de
copia de seguridad de MongoDB Cloud Manager, el agente de copia de seguridad
de Ops Manager o para utilizar mongodump .
▸ restore: proporciona los privilegios necesarios para restaurar los datos con
mongorestore sin la opción --oplogReplay o sin los datos de la colección [Link]
Estas funciones en la base de datos de administración se aplican a todas las bases
de datos local y config excepto en una instancia mongod :
▸ readAnyDatabase: proporciona los mismos permisos de solo lectura, excepto los
que se aplican sobre todas las bases de datos, las locales y el config del clúster. El
rol también proporciona la acción listDatabases en el clúster como un todo.
▸ readWriteAnyDatabase: proporciona los mismos permisos de lectura y escritura
que readWrite , excepto que se aplica a todas las bases de datos local y config del
clúster. El rol también proporciona la acción listDatabases en el clúster como un todo.
▸ userAdminAnyDatabase: proporciona el mismo acceso a las operaciones de
administración de usuarios como userAdmin , excepto que se aplica a todas las
bases de datos local y config del clúster.
Bases de Datos para el Big Data 12
Tema 5. Ideas clave
Ideas clave
▸ dbAdminAnyDatabase: proporciona el mismo acceso a las operaciones de
administración de bases de datos que dbAdmin , excepto que se aplica a todas las
bases de datos locales y de configuración del clúster. El rol también proporciona la
acción listDatabases en el clúster como un todo.
MongoDB proporciona una serie de funciones integradas. Sin embargo, si estos roles
no pueden describir el conjunto de privilegios deseado, se puede crear nuevos roles.
Para añadir una función, MongoDB proporciona el método [Link]() . MongoDB
también proporciona métodos para actualizar las funciones existentes definidas por
el usuario.
A partir de MongoDB Enterprise 3.2, es posible cifrar datos en la capa
de almacenamiento con el cifrado en reposo nativo del motor de
almacenamiento WiredTiger.
A partir de la versión 4.0, MongoDB deshabilita la compatibilidad con el
cifrado TLS 1.0 en sistemas donde TLS 1.1+ está disponible. Consulta
la documentación para más información.
Se recomienda ejecutar procesos de MongoDB con una cuenta de
usuario de sistema operativo dedicada. Lo correcto es que dicha cuenta
tenga los permisos para acceder a los datos (sin permisos
innecesarios).
Bases de Datos para el Big Data 13
Tema 5. Ideas clave
Ideas clave
5.3. Respaldo
La migración de base de datos de un servidor a otro suele ser necesaria, ya sea por
una actualización o cambio de hardware o por motivos administrativos. Al gestionar
un sistema MongoDB cuentas con dos opciones para realizar esta migración.
La primera consiste en copiar el directorio del sistema de ficheros a la nueva
ubicación. Por defecto, los datos de MongoDB se almacenan en la ruta /data/db en
Linux, o C:\data\db en Windows (ruta recomendada). Es importante tener en cuenta
que los datos no se copiarán adecuadamente si el servidor de MongoDB se
está ejecutando en el momento de realizar la copia.
Además, MongoDB permite exportar e importar bases de datos mediante dos
herramientas a utilizar desde la línea de comandos: mongodump y mongorestore ,
respectivamente.
Mongodump hace una copia de seguridad de los datos conectándose a una instancia
mongod o mongos en ejecución. Esta utilidad permite crear una copia de seguridad
para un servidor, una base de datos o una colección completa, o puede utilizar una
consulta para copiar solo parte de una colección.
Se puede ejecutar mongodump sin argumentos. Esto creará una copia de seguridad
de la base de datos en la carpeta dump/ siempre y cuando la base de datos se
encuentre en el sistema local (localhost o dirección IP [Link]) y en el puerto
27017.
El formato de datos que utiliza mongodum a partir de la versión 2.2 o posterior es
incompatible con las versiones anteriores, por lo que no se deben utilizar versiones
recientes de este comando para realizar copias de seguridad de datos antiguos.
Bases de Datos para el Big Data 14
Tema 5. Ideas clave
Ideas clave
A continuación, se puede ver el comando completo que se debería ejecutar para
hacer la copia de seguridad especificando equipo, puerto y directorio de salida:
mongodump --host [Link] --port 27017 --out /data/backup/
Si se quiere especificar una base de datos y una colección se deben utilizar las
opciones --collection y --db de la siguiente forma:
mongodump --collection miColecion --db miBBDD
Gracias a las opciones --username user --password pass se podrán especificar el
nombre de usuario y la clave de acceso de la base de datos en el caso que fuera
obligatorio.
También se puede utilizar la opción --oplog para recopilar las entradas de oplog para
crear una instantánea puntual de una base de datos dentro de un conjunto de
réplicas. Con --oplog, mongodump copia todos los datos de la base de datos origen, así
como todas las entradas oplog desde el principio hasta el final del proceso de copia
de seguridad.
Esta operación, junto con mongorestore --oplogReplay , permite restaurar una copia de
seguridad exactamente igual al momento que se completó el volcado con mongodump
La utilidad mongorestore restaura una copia de seguridad creada por mongodump . Por
defecto, mongorestore busca la copia de seguridad de la base de datos en el directorio
dump/. El proceso restaura los datos conectándose directamentea un mongod o
mongos. Mongorestore puede restaurar una copia de seguridad completa de la base de
datos o de un subconjunto de la copia de seguridad. Un ejemplo es el que se puede
ver a continuación:
mongorestore --port 27017 /db/backup/mongodump-2013-10-24
Bases de Datos para el Big Data 15
Tema 5. Ideas clave
Ideas clave
Donde 27017 es el puerto de conexión localhost y /db/backup/mongodump-2013-10-24 el
archivo y directorio donde se encuentra la copia creada anteriormente.
Nota: a partir de MongoDB 3.6, los binarios de MongoDB, mongod y mongos , se
vinculan a localhost de forma predeterminada. Desde las versiones 2.6 a 3.4, solo los
binarios de los paquetes oficiales de MongoDB RPM (Red Hat, CentOS, Fedora
Linux y derivados) y DEB (Debian, Ubuntu y derivados) se vincularían a localhost de
forma predeterminada.
Un ejemplo más complejo en el que se pueden ver todas las opciones del comando
mongorestore es el que se puede ver a continuación:
mongorestore --host [Link] --port 3017 --username user --
password pass /db/backup/mongodump-2013-10-24
En este ejemplo, además, se ha especificado el host, el nombre de usuario y la
contraseña de acceso de la base de datos donde se va a realizar la restauración.
Una vez comprendido cómo se puede hacer una copia de seguridad de la base de
datos y cómo se puede restaurar la copia, es muy importante saber qué mongo
proporciona otro mecanismo para mantener seguros los datos mediante la
replicación de datos en varios nodos.
Cuando se realiza una copia de seguridad, se está haciendo una foto en un instante
de tiempo dado; en cambio, con las réplicas tenemos la información duplicada en
varios nodos en todo momento.
Nota: las utilidades mongodump y mongorestore funcionan con volcados de datos
BSON y son útiles para crear copias de seguridad de pequeñas implementaciones.
Para copias de seguridad resistentes y no disruptivas, usa un sistema de archivos o
una función de instantánea de disco a nivel de bloque, como los métodos descritos
en el documento «Métodos de copia de seguridad de MongoDB» (documentación
oficial).
Bases de Datos para el Big Data 16
Tema 5. Ideas clave
Ideas clave
Otros métodos de backup en MongoDB
Cuando se implementa MongoDB en producción, las copias de seguridad se deben
gestionar de una forma más profesional y robusta. Para ello, es importante que
conozcas qué alternativas existen en entornos productivos, según la instalación que
se tenga de MongoDB.
▸ BackUp con Atlas: es la opción de servicio de MongoDB alojado en la nube, la cual
ofrece dos métodos totalmente administrados para realizar copias de seguridad:
• Cloud BackUp: utiliza la funcionalidad de snapshot nativa del proveedor de
servicios en la nube de la implementación para ofrecer opciones de copia de
seguridad sólidas.
• Suelen disponer de on-demand snapshots (permiten activar una instantánea
inmediata en un momento dado).
• BackUp continuas en el Cloud: permiten programar copias de seguridad
periódicas para su implementación.
• Legacy Backups: o copias de seguridad heredadas, las cuales realizan copias de
seguridad incrementales de los datos en su implementación (esto actualmente está
en desuso).
▸ BackUp con Cloud Manager: con esta alternativa se respalda continuamente los
conjuntos de réplicas de MongoDB y los clústeres fragmentados leyendo los datos
de registro de operaciones de su implementación. Este servicio crea snapshots de
sus datos a intervalos establecidos y también puede ofrecer recuperación en un
momento determinado de conjuntos de réplicas y clústeres fragmentados
previamente.
Bases de Datos para el Big Data 17
Tema 5. Ideas clave
Ideas clave
Bases de Datos para el Big Data 18
Tema 5. Ideas clave
Ideas clave
▸ Ops Manager: con esta opción, los suscriptores de MongoDB pueden instalar y
ejecutar el mismo software central que impulsa MongoDB Cloud Manager en su
propia infraestructura. Ops Manager es una solución local que tiene una
funcionalidad similar a MongoDB Cloud Manager y está disponible con suscripciones
Enterprise Advanced.
▸ BackUp con copia de datos subyacentes: permite crear o bien un respaldo de una
implementación de MongoDB haciendo una copia de los archivos de datos
subyacentes de MongoDB, o bien puedes copiar los archivos directamente usando
cp, rsync o una herramienta similar si la implementación no soporta instantáneas.
La replicación es una característica de MongoDB que permite la redundancia de
datos, así como incrementar su disponibilidad. La arquitectura básica de replicación
en MongoDB sigue un modelo Maestro-Esclavo. La instancia maestra recibe
operaciones de escritura y estas son aplicadas en la instancia dependiente para
mantener la consistencia de los repositorios de datos.
Figura 1. Representación de nodos Maestro-Esclavo para MongoDB.
Bases de Datos para el Big Data 19
Tema 5. Ideas clave
Ideas clave
La instancia maestra se ejecuta mediante la inclusión del parámetro --master en la
ejecución del servidor de MongoDB. La instancia secundaria se ejecuta mediante la
inclusión del parámetro --slave , siguiendo ambos la siguiente sintaxis:
Ejecución de instancia maestra:
mongod --master
Ejecución de un nodo secundario/esclavo:
mongod --slave --source <dirección de nodo maestro>
En MongoDB se ha hecho un refinamiento sobre el modelo Maestro-Esclavo y se le
ha definido como conjunto de réplicas o replica set. Este método permite una
recuperación a fallos de forma automática, y es la forma recomendada de
implementar replicación de datos en MongoDB.
Una de las principales características de los replica set es que no definen un nodo
maestro estáticamente, sino que es asignado al azar y esta asignación se actualiza
dependiendo de la disponibilidad del nodo. Los nodos mantienen control de qué otros
nodos son accesibles mediante el envío de pings cada dos segundos.
La configuración mínima recomendada para una replica set consiste en tres nodos:
dos nodos serán instancias de mongod con acceso a los datos; uno de estos nodos
será el nodo primario mientras que el otro replicará las operaciones que se realicen
sobre el primario.
El tercer nodo, denominado árbitro, es utilizado solamente para decidir qué nodo
debe ser asignado como primario. La siguiente figura muestra el diagrama de la
arquitectura descrita.
Bases de Datos para el Big Data 20
Tema 5. Ideas clave
Ideas clave
Figura 2. Ejemplo de la replicación con nodo árbitro en MongoDB.
Para iniciar una instancia de MongoDB como parte de un replica set, el comando
sigue el siguiente formato:
mongod --replSet <nombre de conjunto de réplicas>/<dirección de otro host>
Después de iniciar todos los nodos, es necesario inicializar el conjunto conectándose
a la base de datos admin de alguno de ellos y ejecutando el comando replSetInitiate
con la siguiente sintaxis:
[Link]({“replSetInitiate”: {
_id: <Identificador de conjunto>,
members: <Listado de nodos en el Replica Set>
}})
El listado de nodos en el replica set es un array de objetos con la información de
cada nodo. Entre los atributos de cada uno de estos objetos se puede enfatizar los
siguientes:
▸ _id: identificador secuencial obligatorio, el primer nodo en el replica set tiene un
identificador igual a 0.
▸ host: cadena de texto obligatoria con el nombre del host de este nodo.
▸ arbiterOnly: booleano para indicar si el nodo es solamente árbitro.
Bases de Datos para el Big Data 21
Tema 5. Ideas clave
Ideas clave
▸ priority: valor de 0 a 1000 que indica la prioridad de dicho nodo para ser elegido
primario.
▸ votes: indica el número de votos de este nodo para la elección de un nuevo nodo
primario. Se sugiere indicar un solo voto por nodo y, en caso de cambiar esta
asignación, simular detenidamente los efectos de este cambio.
▸ hidden: booleano que indica si el nodo debe ocultarse del listado dado por el
comando [Link]() .
▸ buildIndexes: booleano que indica si este nodo creará índices. Por defecto es
verdadero y solo será falso en aquellos casos donde se sabe que el nodo no será
primario, es decir, tiene un valor 0 en el atributo priority .
▸ slaveDelay: número de segundos de retraso que tendrá un nodo secundario. Debe
ser mayor que cero solo para aquellos nodos que no serán primarios nunca.
▸ tags: documento JSON con pares clave-valor definidos por el administrador de la
base de datos.
Bases de Datos para el Big Data 22
Tema 5. Ideas clave
Ideas clave
5.4. Rendimiento
El incremento de rendimiento en el sistema MongoDB puede realizarse a través de
acciones como la creación de índices, los cuales mejoran el tiempo de ejecución de
consultas sobre collections.
Es recomendable analizar los atributos de un documento sobre los cuales será
beneficioso aplicar un índice. Por ejemplo, si es común filtrar documentos en la
collection usuarios por el atributo email , será conveniente crear un índice sobre dicho
atributo.
El comando brindado para crear un índice es createIndex y posee el siguiente
formato:
db.<nombre de collection>.createIndex(<claves>, <opciones>)
Ambos argumentos en la llamada a la función son objetos en formato JSON. El
objeto claves indica los atributos sobre los cuales se creará el índice, teniendo como
valor el número 1 si el índice se creará de forma ascendente y -1 si es de forma
descendente.
▸ El objeto opciones puede contener los siguientes atributos, todos opcionales:
▸ background: valor booleano para indicar si el índice debe crearse sin bloquear otras
actividades en la base de datos. Por defecto es false .
▸ unique: valor booleano para indicar si un atributo no acepta valores repetidos. Por
defecto es false .
▸ name: cadena de texto para especificar el nombre del índice.
Bases de Datos para el Big Data 23
Tema 5. Ideas clave
Ideas clave
▸ dropDups: valor booleano que indica la creación de un índice único y la eliminación
de documentos repetidos en la collection. Por defecto es false .
▸ sparse: valor booleano para indicar que el índice se aplica solamente sobre los
documentos con los atributos indicados en el campo de claves.
▸ v: indica el número de versión del índice a crear. Antes de la versión 2.0 de
MongoDB este valor es 0, para versiones posteriores el valor es 1.
Un índice puede eliminarse utilizando el comando dropIndex , siguiendo la sintaxis
apropiada:
db.<nombre de collection>.dropIndex(<índice>)
El argumento índice puede ser una cadena de texto con el nombre del índice a
eliminar o un objeto con el mismo contenido que el utilizado en el argumento de
claves en createIndex .
Hay dos métricas que permiten medir el rendimiento:
▸ El tiempo de búsqueda: cuando se utilicen índices se podrá apreciar que el tiempo
de búsqueda se ve reducido. Este efecto es más notable cuando el número de
documentos es elevado.
▸ El número de documentos analizados en la búsqueda. La optimización de los índices
se debe a que el número de documentos en los que el motor de la base de datos
realiza la búsqueda es menor, llegando en las consultas exactas a ser el mismo
número de documentos que devuelve la búsqueda.
Para esta métrica no influye el número de documentos que tenga la colección,
puesto que, aunque la colección tenga pocos registros, se podrá ver en esta métrica
que es inferior al total de ellos.
Bases de Datos para el Big Data 24
Tema 5. Ideas clave
Ideas clave
Se supone que se tiene el siguiente esquema de documento de la colección users :
{
userId: “Fer”,
name: “Fernando Alonso”,
age: 36,
hobbies: [“motor”, “bike”],
info:{
friend: “Pedro”
},
localtion: [34,45]
}
Algunos ejemplos de indexación pueden ser los siguientes:
▸ Simple: insertamos un índice en orden ascendente para el atributo name . El
comando para insertar el índice y la búsqueda que lo aplica son los siguientes:
[Link]( { "name" : 1} )
[Link]({ name: “Fernando Alonso” })
▸ Compuesto: se pueden usar para consultar uno o varios campos sin incluir todos. El
siguiente ejemplo permitirá optimizar la búsqueda para name , o para name y age .
Si se quiere hacer solo sobre age , habría que crear un índice simple para este
atributo. En el siguiente ejemplo se crea un índice para name y age y se crea la
consulta que se aprovecha de esta optimización:
[Link]( { "name" : 1, "age":-1 } )
[Link]( {name: “Fernando Alonso”, age:36 })
▸ Subdocumento: si el atributo pertenece a un objeto, es necesario llegar al nivel
deseado para asegurar el índice. El insertado del índice y la consulta que utiliza la
optimización son las siguientes:
[Link]( { "[Link]" : 1 } )
[Link]({ [Link]: “Pedro”})
▸ Arrays: se pueden crear índices sobre claves que contienen arrays; para ello se
Bases de Datos para el Big Data 25
Tema 5. Ideas clave
Ideas clave
crea un valor en el índice para cada valor del array. Se denominan índices multikey y
no hace falta intimidarlo explícitamente. El insertado del índice y la consulta que
utiliza la optimización son las siguientes:
[Link]( { "hobbies": 1} )
[Link]({ hobbies: “motor” })
▸ 2d: los documentos deben tener una clave que contenga un array de dos
coordenadas. Estos índices son útiles cuando permiten utilizar operadores
especiales como $near . El insertado del índice y la consulta que utiliza la
optimización son las siguientes:
[Link]( { "location": 2d} )
[Link]({ location: {$near: [25,32] } }).limit(6)
Nota: a partir de la versión 3.0 de MongoDB, createIndex fue el método que
reemplazó a ensureIndex.
Bases de Datos para el Big Data 26
Tema 5. Ideas clave
Ideas clave
Para comprender el uso de índices en MongoDB, revisa esta lección titulada
«Creación de índices y análisis de consultas». En ella se muestran algunos ejemplos
de índices en una base de datos, así como el análisis de rendimiento de una serie de
consultas, antes y después de la creación de índices.
Accede al vídeo:
[Link]
4acc-807c-adbe00e854fb
Vídeo 1. Creación de índices y análisis de consultas.
Bases de Datos para el Big Data 27
Tema 5. Ideas clave
Ideas clave
5.5. Sharding
Otro mecanismo para incrementar el rendimiento de una base de datos es escalar,
ya sea de forma vertical u horizontal. La escalabilidad vertical consiste en
incrementar o mejorar hardware (CPU y memoria RAM) que utiliza el sistema.
En contraste, la escalabilidad horizontal o sharding consiste en dividir el conjunto de
datos y distribuirlo en varios servidores o shards. Así, el número de operaciones y la
cantidad de datos se reparte entre el conjunto de shards. Si la base de datos crece,
es suficiente con añadir un nuevo shard para poder almacenar más datos en un
nuevo nodo.
Su principal utilidad es aumentar el rendimiento de las consultas distribuyendo la
información entre varias máquinas y permitir añadir nuevas máquinas para poder
aumentar la capacidad de almacenaje de información.
MongoDB brinda sharding a través de la definición de sharded clusters, los cuales
están compuestos por tres tipos de componentes:
▸ Shards: están a cargo de almacenar la información. Cada shard es un replica set,
por lo que brinda alta disponibilidad y consistencia de datos.
▸ Query Routers: son instancias del servicio mongo y sirven de interfaz entre los
clientes y los shards.
▸ Config Servers: almacenan metadatos sobre la información almacenada en cada
shard. Son consultados y modificados por los query routers para saber qué shards
contienen información en específico. Los sharded clusters en un entorno de
producción tienen exactamente tres config servers.
Bases de Datos para el Big Data 28
Tema 5. Ideas clave
Ideas clave
El primer paso para configurar un sharded cluster es iniciar los config servers a
través del siguiente comando:
mongod --configsvr --dbpath <ruta a ficheros de datos> --port <puerto>
El puerto por defecto de un config server es el 27019. A continuación, se deben
iniciar los query routers o instancias mongos :
mongos --configdb <nombres de los Config Servers, separados por comas>
El siguiente paso es añadir shards al clúster, primero conectándose al servicio
mongos :
mongo --host <nombre de servidor ejecutando mongos> --port <puerto de
mongos>
Y, después, utilizar el comando [Link] :
[Link](“<Identificador de Replica Set>/<Nombre de miembro del Replica
Set>”)
Finalmente, se debe habilitar la característica de sharding sobre la base de datos y
sobre las collections a dividir:
[Link](“<Nombre de base de datos>”)
[Link](“<Base de datos>.<Nombre de collection>”, <Clave de
Sharding>)
El segundo argumento indica el patrón que se utilizará para distribuir los datos en los
Bases de Datos para el Big Data 29
Tema 5. Ideas clave
Ideas clave
shards disponibles. Este argumento es un documento JSON con pares clave-valor
para indicar los atributos que se utilizarán en la distribución. Es necesario que exista
un índice sobre los atributos que se utilizan en esta configuración.
Map-Reduce y Aggregate admiten operaciones sobre colecciones en sistemas con
sharding, tanto como entrada como como salida.
Bases de Datos para el Big Data 30
Tema 5. Ideas clave
Ideas clave
Cuando se utiliza la colección fragmentada como entrada, mongos enviará
automáticamente el trabajo de agregación a cada fragmento en paralelo. No se
requiere ninguna opción especial. Los mongos esperarán a que terminen los trabajos
en todos los fragmentos.
Si el campo out de una función de agregación tiene el valor sharded , MongoDB
fragmenta la colección de salida usando el campo _id como la clave shard.
Si la colección de salida no existe, MongoDB crea y fragmenta la colección en el
campo _id . Para una colección nueva o vacía, MongoDB utiliza los resultados de la
primera etapa de la operación de agregación para crear los trozos iniciales
distribuidos entre los fragmentos. Mongos despacha en paralelo una tarea de
postprocesamiento a cada fragmento que posee un pedazo.
Durante el postprocesamiento, cada fragmento extraerá los resultados de sus
propios trozos, para finalmente ejecutar una reducción final y escribir el resultado
localmente a la colección de salida.
Después de leer todo el tema, lo siguiente es revisar los vídeos sobre MongoDB que
se presentan a continuación. En ellos se describen de forma resumida los aspectos
más relevantes en la gestión de MongoDB y algunas recomendaciones de cara a la
administración de usuarios de la base de datos y al uso de clústeres.
Bases de Datos para el Big Data 31
Tema 5. Ideas clave
Ideas clave
Accede al vídeo:
[Link]
4774-b5d4-aca800dccc99
Vídeo 2. Aspectos relevantes en la gestión de MongoDB: seguridad.
Bases de Datos para el Big Data 32
Tema 5. Ideas clave
Ideas clave
Accede al vídeo:
[Link]
4963-b92f-aca800e25f47
Vídeo 3. Aspectos relevantes en la gestión de MongoDB: exportar/restaurar y uso de índices.
Bases de Datos para el Big Data 33
Tema 5. Ideas clave
A fondo
MongoDB Sharding 101
Percona. (4 de septiembre de 2018). MongoDB Sharding 101 - MongoDB Sharding
Tutorial [Archivo de vídeo]. [Link]
Este tutorial es una continuación de temas avanzados para el DBA. En él se
comparten las mejores prácticas y consejos sobre cómo realizar las actividades más
habituales. Se usa comúnmente para desarrollo o pruebas. El tutorial abarca los
sistemas integrados, conjunto de réplicas, escalamiento horizontal, capacidad para
elegir un nuevo primario en caso de falla (los datos son los mismos en las réplicas),
réplica asincrónica, maestro único-primario.
Bases de Datos para el Big Data 34
Tema 5. A fondo
A fondo
MongoDB: how to deploy a MongoDB replica set
Just me and Opensource. (12 de agosto de 2019). [ MongoDB 6 ] How to Deploy a
MongoDB ReplicaSet [Archivo de vídeo]. [Link]
v=Q2lJH156SUQ
En este vídeo, se habla sobre el conjunto de réplicas MongoDB y cómo
implementarlo. También repasa la simulación de una falla y demuestra cómo ocurren
las elecciones primarias. Los conjuntos de réplicas se utilizan para escenarios de alta
disponibilidad y recuperación ante desastres.
Bases de Datos para el Big Data 35
Tema 5. A fondo
A fondo
Documentación oficial de MongoDB
MongoDB. (2021). Documentation [Página web]. [Link]
Dentro del sitio oficial con la documentación del sistema MongoDB, el contenido
relevante para este tema es la sección MongoDB Replicaset y Sharding.
Bases de Datos para el Big Data 36
Tema 5. A fondo
A fondo
The database for modern applications: MongoDB
Be A Better Dev. (15 de julio de 2020). The ULTIMATE MongoDB Tutorial for
2021 [Archivo de vídeo]. [Link]
El vídeo es un tutorial de MongoDB explicado por miembros del equipo de desarrollo
de MongoDB. En media hora describen los aspectos más relevantes de la base de
datos, así como la forma de optimizar las consultas más comunes. Dentro de estos
aspectos se mencionan cuestiones relevantes con base de datos distribuida.
Bases de Datos para el Big Data 37
Tema 5. A fondo
A fondo
A Cookbook for MongoDB
Recurso disponible en la web oficial de libro, última visita el 01/12/2020.
Este sitio web contiene una serie de recetas de soluciones a escenarios comunes en
el desarrollo de aplicaciones. Por ejemplo, una de las recetas indica cómo contar los
tags asociados a posts en un sitio web, utilizando el método Map-Reduce.
Accede al recurso a través del aula virtual o desde la siguiente dirección
web: [Link]
Bases de Datos para el Big Data 38
Tema 5. A fondo
A fondo
MongoDB: The Definitive Guide
Chodorow, K. & Dirolf, M. (2019). MongoDB: The Definitive Guide. California:
O’Reilly.
Este libro contiene información detallada sobre la creación, eliminación y
modificación de documentos en MongoDB. El capítulo 4 se centra en la realización
de consultas, mientras que el capítulo 6 detalla las funciones de agregación.
Accede al libro a través del aula virtual o desde la siguiente dirección
w e b : [Link]
definitive/9781491954454/
Bases de Datos para el Big Data 39
Tema 5. A fondo
A fondo
Bibliografía
Ajdari, J., y Kasami, B. (2018). MapReduce Performance in MongoDB Sharded
Collections. International Journal Of Advanced Computer Science And Applications,
9(6), pp. 115-120.
Bradshaw, S., Brazil, E., y Chodorow, K. (2019). MongoDB: the definitive guide:
powerful and scalable data storage. O'Reilly Media.
Dipina Damodaran, B., Salim, S., y Vargese, S. M. (2016). Performance evaluation of
MySQL and MongoDB databases. International Journal on Cybernetics & Informatics
(IJCI), 5.
Membrey, P., Plugge, E., y Hawkins, D. (2011). The definitive guide to MongoDB: the
noSQL database for cloud and desktop computing. Apress.
Bases de Datos para el Big Data 40
Tema 5. A fondo
Test
1. ¿Qué comando de MongoDB permite crear una copia de respaldo de una base
de datos?
A. mongorestore.
B. mongodump.
C. backup.
D. mongod.
2. ¿Qué comando de MongoDB permite recuperar una base de datos a partir de
una copia de seguridad?
A. mongorestore.
B. save.
C. mongos.
D. copydb.
3. ¿Qué elementos de la base de datos mejoran el rendimiento de consultas a
collections?
A. Índices.
B. Replica sets.
C. Query routers.
D. Las respuestas B y C son correctas.
4. ¿Qué característica de MongoDB permite tener redundancia y aumentar la
disponibilidad de los datos?
A. Seguridad.
B. Sharding.
C. Índices.
D. Replicación.
Bases de Datos para el Big Data 41
Tema 5. Test
Test
5. ¿Cuál es el modelo básico de replicación en MongoDB?
A. Sharding.
B. Replica set.
C. Maestro-Esclavo.
D. Shards.
6. ¿Cómo se llama al refinamiento del modelo Maestro-Esclavo implementado en
MongoDB?
A. Result set.
B. Replica set.
C. Sharding.
D. Replicación.
7. ¿Cómo se denomina el nodo de un replica set que no almacena datos y
solamente puede votar en las elecciones de nodo primario?
A. Secundario.
B. Árbitro.
C. Shard.
D. Config server.
8. ¿Qué otro nombre recibe el método de escalabilidad horizontal, en el que los
datos son separados y distribuidos entre varios servidores?
A. Escalabilidad vertical.
B. Elastic computing.
C. Sharding.
D. Replicación.
Bases de Datos para el Big Data 42
Tema 5. Test
Test
9. ¿Qué nombre reciben los nodos que almacenan datos en un sharded cluster?
A. Data stores.
B. Config servers.
C. Query routers.
D. Shards.
10. ¿Cuántos config servers debe haber en un entorno de producción?
A. Uno.
B. Tres.
C. Un máximo de cinco.
D. Depende del número de servidores disponibles.
Bases de Datos para el Big Data 43
Tema 5. Test
Tema 6
Bases de Datos para el Big Data
Tema 6. Drivers de conexión
Índice
Esquema
Ideas clave
6.1. Introducción y objetivos
6.2. Referencias: dónde consultar cada driver
6.3. Ejemplos de uso
A fondo
Python MongoDB Driver (PyMongo)
Build a restful API with [Link] Express AND MongoDB.
Rest API tutorial
MongoDB Java Driver
MongoDB [Link] Driver
MongoDB Python Driver
Test
Esquema
Bases de Datos para el Big Data 3
Tema 6. Esquema
Ideas clave
6.1. Introducción y objetivos
Este tema pretende ser una pequeña guía para empezar a desarrollar aplicaciones
utilizando MongoDB. Para estudiar este tema debes leer las Ideas clave y, si deseas
información adicional sobre un concepto específico, puedes consultar los recursos
sugeridos en A fondo. Se recomienda también intentar replicar los ejemplos y realizar
las actividades para entender cada uno de los conceptos que se explican.
Para que un desarrollador pueda acceder a los datos almacenados en MongoDB
desde el lenguaje de programación utilizado, es necesario utilizar un driver o
controlador que nos haga de enlace con la base de datos. Es por esta razón que una
vez conocido cómo consultar y gestionar los datos, es hora de conocer cómo poder
utilizarlos desde cualquier programa que se quiera desarrollar, independientemente
del lenguaje de desarrollo utilizado.
Existe un gran número de drivers que permiten trabajar con MongoDB, según el
lenguaje de programación elegido. A lo largo de este tema se verán tres ejemplos de
los tres más usados en aplicaciones de visualización y big data. Si se quiere
empezar a desarrollar con algún otro, se proporciona un apartado de referencias que
debe consultarse como punto de partida para conocer todos los drivers que
MongoDB proporciona, así como complementar la información de los tres drivers
tratados.
Para poder consultar, actualizar o insertar nuevos datos a una base de datos
MongoDB a través de una aplicación programada en cualquier lenguaje de
programación, es necesario tener un API que nos proporcione un enlace entre la
base de datos y el código y nos permita utilizar aproximadamente las mismas
funcionalidades que los utilizados desde la consola. Para ello, cada lenguaje de
programación posee unos métodos o funciones que nos facilitan el desarrollo de
nuestra aplicación, utilizando para ello una conexión trasparente para el
Bases de Datos para el Big Data 4
Tema 6. Ideas clave
Ideas clave
programador. Estas API nos proporcionan suficientes funcionalidades para tener un
acceso total a los datos.
Como cualquier otra API, cuando se está desarrollando un programa que debe
acceder a una base de datos, lo que se busca es que las interfaces de conexión a
dichas bases de datos sean trasparentes para el programador. En definitiva, se
encarga de «traducir» las llamadas que se hacen desde un lenguaje de
programación a un «lenguaje» que entienda la base de datos.
Los objetivos que se persiguen con este tema son los siguientes:
▸ Conocer los diferentes drivers que existen para MongoDB.
▸ Aprender el uso de los drivers más populares para usar MongoDB desde otras
aplicaciones.
Bases de Datos para el Big Data 5
Tema 6. Ideas clave
Ideas clave
6.2. Referencias: dónde consultar cada driver
MongoDB proporciona una descripción completa de cómo funciona cada uno de los
drivers, que tienes disponible en el siguiente enlace. En esta página se pueden
encontrar cursos, tutoriales y ejemplos para facilitar la construcción de aplicaciones
que precisen de MongoDB para su funcionamiento.
A continuación, se enumera una lista de los drivers que hay disponibles:
▸ C
▸ C++
▸ C#
▸ Java
▸ [Link]
▸ Perl
▸ PHP
▸ Python
▸ Motor
▸ Ruby
▸ Scalar
▸ Go
▸ Erlang
Bases de Datos para el Big Data 6
Tema 6. Ideas clave
Ideas clave
Además, la comunidad proporciona soporte para los siguientes drivers:
▸ Action Script3
▸ C
▸ C# and .NET
▸ Clojure
▸ ColdFusion
▸ D
▸ Dart
▸ Delphi
▸ Elixir
▸ Entity
▸ Erlang
▸ Factor
▸ Fantom
▸ F#
▸ Go
▸ Groovy
▸ Haskell
▸ JavaScript
Bases de Datos para el Big Data 7
Tema 6. Ideas clave
Ideas clave
▸ LabVIEW
▸ Lisp
▸ Lua
▸ Mathematica
▸ MatLab
▸ [Link]
▸ Objetive C
▸ OCaml
▸ Opa
▸ Perl
▸ PHP
▸ PowerShell
▸ Prolog
▸ Python
▸ R
▸ Ruby
▸ Scala
▸ Swift
▸ Racket
Bases de Datos para el Big Data 8
Tema 6. Ideas clave
Ideas clave
▸ Smalltalk
También MongoDB proporciona un conector para Hadoop. Este conector es un
plugin que permite utilizar MongoDB como fuente de entrada y/o salida destino.
Bases de Datos para el Big Data 9
Tema 6. Ideas clave
Ideas clave
6.3. Ejemplos de uso
Java
Para poder utilizar MongoDB en Java, es necesario bajarse las librerías que permiten
utilizar la versión requerida. Para ello, MongoDB proporciona varios métodos. Los
comandos para bajar las dependencias con Maven son las siguientes:
<dependencies> <dependency> <groupId>[Link]</groupId>
<artifactId>mongodb-driver</artifactId> <version>3.4.2</version>
</dependency> </dependencies>
Otra alternativa es bajar los .jar de la fuente:
[Link]
driver/3.4.2/
Para realizar los primeros ejemplos se recomienda descargar los siguientes archivos:
▸ [Link] : incluye la documentación.
▸ [Link] : incluye las fuentes.
▸ [Link] : incluye los diferentes métodos.
Por defecto el driver de Java se conecta a localhost por el puerto 27017. Para
conectarse a la base de datos con los parámetros por defecto:
MongoClient mongoClient = new MongoClient();
Si la base de datos está en un host específico:
MongoClient mongoClient = new MongoClient( "host1" );
Bases de Datos para el Big Data 10
Tema 6. Ideas clave
Ideas clave
Si está en un host específico con un puerto específico:
MongoClient mongoClient = new MongoClient(new
MongoClientURI("mongodb://host1:27017"));
Una vez obtenido el objeto que conecta con MongoDB es necesario acceder a una
base de datos específica:
MongoDatabase database = [Link]("test");
Ya solo falta acceder a la colección:
MongoCollection<Document> collection =
[Link]("estudiantes");
Para ello, primero hay que conocer que en Java es necesario construir los
documentos con una estructura específica. Si se tiene como ejemplo el siguiente
documento:
{
“marca” : “BMW”,
“puertas” : [3, 5]
}
En formato BSON de Java se crearía de la siguiente forma:
new BsonDocument().append("marca", new BsonString("BMW"))
.append("puertas", new BsonArray([Link](new
BsonInt32(3), new BsonInt32(5))));
Por lo que una sencilla búsqueda se realizaría de la siguiente forma:
[Link](new Document("marca","BMW"))
Bases de Datos para el Big Data 11
Tema 6. Ideas clave
Ideas clave
Si, por el contrario, lo que se pretende es insertar un documento, se podrá utilizar los
métodos insertOne() e insertMany() que aceptan un documento o una lista de ellos. Un
ejemplo de insertOne es el siguiente:
Document document = new Document("marca", "Audi")
.append("motor", new Document("CC", 3000).append("CV",210))
.append("modelo", "A5")
.append("colores", [Link]("rojo", "negro", "blanco"));
[Link](document);
En la clase «Introducción del driver Java para MongoDB» se describe la instalación y
breve introducción del driver Java para MongoDB. En este vídeo se enumeran los
pasos para descargar e instalar el driver Java de MongoDB para realizar una
aplicación Java con Eclipse.
También encontrarás un breve ejemplo de cómo se puede realizar una conexión a la
base de datos, así como realizar consulta y trabajar con los resultados de la query.
Bases de Datos para el Big Data 12
Tema 6. Ideas clave
Ideas clave
Accede al vídeo:
[Link]
430a-97dc-adbe00e851a2
Vídeo 1. Introducción del driver Java para MongoDB.
[Link]
Para empezar, la forma más fácil de conseguir los drivers de [Link] 2.0 es usando
NPM (Node Package Manager). Nada más crear el proyecto con npm init, se
pueden instalar los drivers de MongoDB y sus dependencias con el siguiente
comando:
npm install mongodb --save
Bases de Datos para el Big Data 13
Tema 6. Ideas clave
Ideas clave
Con ello se descargarán los drivers y se añadirá una dependencia en el archivo
[Link]. También se recomienda bajar la extensión bson-ext, ya que
proporciona mejores formas de serialización y deserialización que el proporcionado
por el parser JavaScript. Para instalar el driver es necesario ejecutar el siguiente
comando:
npm install bson-ext --save
Para conectarse al servidor y la base de datos basta con añadir las siguientes líneas
de código:
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/miProyecto';
// Use connect method to connect to the server
[Link](url, function(err, db) {
[Link](null, err);
[Link]("Conexión realizada con éxito");
[Link]();
});
Bases de Datos para el Big Data 14
Tema 6. Ideas clave
Ideas clave
La aplicación imprimirá «Conexión realizada con éxito» si se han establecido una
URL válida. Un ejemplo de inserción de datos es el que se puede ver a continuación:
var insertDocuments = function(db, callback) {
// Get the documents collection
var collection = [Link]('documents');
// Insert some documents
[Link]([
{a : 1}, {a : 2}, {a : 3}
], function(err, result) {
[Link](err, null);
[Link](3, [Link].n);
[Link](3, [Link]);
[Link]("Inserted 3 documents into the collection");
callback(result);
});
}
El comando insert devuelve un objeto con los siguientes campos:
▸ result: contiene el documento resultado de MongoDB.
▸ ops: contiene el documento insertado con el campo _id añadido.
▸ connection: contiene la conexión utilizada para llevar a cabo el insert .
Bases de Datos para el Big Data 15
Tema 6. Ideas clave
Ideas clave
Para llamar a la función insertDocument es necesario añadir el siguiente código:
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the server
[Link](url, function(err, db) {
[Link](null, err);
[Link]("Connected successfully to server");
insertDocuments(db, function() {
[Link]();
});
});
Si se ejecuta la aplicación se obtendrá el siguiente resultado:
Connected successfully to server
Inserted 3 documents into the collection
Si se pretende realizar una búsqueda que muestre los documentos con el campo a
igual a 3 se debería utilizar un código como el siguiente:
var findDocuments = function(db, callback) {
// Get the documents collection
var collection = [Link]('documents');
// Find some documents
[Link]({'a': 3}).toArray(function(err, docs) {
[Link](err, null);
[Link]("Found the following records");
[Link](docs);
callback(docs);
});
}
Bases de Datos para el Big Data 16
Tema 6. Ideas clave
Ideas clave
Un ejemplo para actualizar un conjunto de datos es el siguiente:
var updateDocument = function(db, callback) {
// Get the documents collection
var collection = [Link]('documents');
// Update document where a is 2, set b equal to 1
[Link]({ a : 2 }
, { $set: { b : 1 } }, function(err, result) {
[Link](err, null);
[Link](1, [Link].n);
[Link]("Updated the document with the field a equal to 2");
callback(result);
});
}
Y, para terminar, un ejemplo de borrado sería el siguiente:
var removeDocument = function(db, callback) {
// Get the documents collection
var collection = [Link]('documents');
// Delete document where a is 3
[Link]({ a : 3 }, function(err, result) {
[Link](err, null);
[Link](1, [Link].n);
[Link]("Removed the document with the field a equal to 3");
callback(result);
});
}
Python (PyMongo)
Para instalar PyMongo en Linux lo mejor es utilizar pip :
pip install pymongo
Bases de Datos para el Big Data 17
Tema 6. Ideas clave
Ideas clave
Y en Windows instalar PyMongo del siguiente enlace:
[Link]
Para importar MongoClient desde PyMongo es necesario ejecutar el siguiente
comando:
Import MongoClient from pymongo
Para crear una conexión utilizamos el cliente MongoClient() , que se conectará a
localhost y al puerto 27017 si no se especifica ningún argumento. A continuación, se
muestran unos ejemplos de conexión:
client = MongoClient()
client = MongoClient("mongodb://[Link]")
Para acceder al objeto de base de datos se pueden utilizar cualquiera de las dos
formas que se muestran a continuación:
db = [Link]
db = client['myDb']
Para acceder a una colección se procede de la siguiente forma:
coll = [Link]
coll = db['myCollection']
Bases de Datos para el Big Data 18
Tema 6. Ideas clave
Ideas clave
Si se quiere insertar un documento:
from datetime import datetime
result = [Link].insert_one(
{
"coche": {
"marca": "BMW",
"Modelo": "430d",
"CV": "220",
"colores": ["rojo", "negro"]
}
}
)
Para realizar una búsqueda:
cursor = [Link]({"marca": "BMW"})
for document in cursor:
print(document)
Para actualizar un documento:
result = [Link].update_one(
{"marca": "BMW"},
{
"$set": {
"CC": "3000”
}
}
)
Y, por lo tanto, para borrar un documento:
result = [Link].delete_many({"marca": "BMW"})
Bases de Datos para el Big Data 19
Tema 6. Ideas clave
A fondo
Python MongoDB Driver (PyMongo)
Tech With Tim. (21 de junio de 2019). Python MongoDB Tutorial using PyMongo
[Archivo de vídeo]. [Link]
Este tutorial te mostrará cómo usar MongoDB con Python y el módulo de Python
PyMongo. PyMongo es la API oficial de MongoDB que te permite realizar fácilmente
operaciones de mdatabse.
Bases de Datos para el Big Data 20
Tema 6. A fondo
A fondo
Build a restful API with [Link] Express AND
MongoDB. Rest API tutorial
Dev Ed. (11 de mayo de 2019). Build A Restful Api With [Link] Express & MongoDB
| Rest Api Tutorial [Archivo de vídeo]. [Link]
Las APIS:REST ayudan a desacoplar nuestro código de backend de nuestro front-
e n d para que podamos usarlo en múltiples aplicaciones (aplicaciones móviles,
aplicaciones web, etc.). En este vídeo vas a aprender cómo construir una simple
publicación de blog tipo api con todos los métodos útiles (GET, POST, DELETE,
PATCH). Se usa [Link] como lenguaje de backend, [Link] ayuda a crear rutas
más fáciles. MongoDB junto con mongoose se usan para crear esquemas y modelos
que definen cómo se ven nuestros datos.
Bases de Datos para el Big Data 21
Tema 6. A fondo
A fondo
MongoDB Java Driver
MongoDB. (2021). MongoDB Java Drivers [Página
web]. [Link]
En este apartado se puede encontrar toda la información relativa a todos los drivers
de Java, según la versión de MongoDB utilizada. En este enlace oficial de Mongo,
además de explicar cómo funciona el driver y brindar multitud de ejemplos, también
te enseña a utilizar diferentes librerías que facilitarán el desarrollo de aplicaciones en
Java utilizando MongoDB.
Bases de Datos para el Big Data 22
Tema 6. A fondo
A fondo
MongoDB [Link] Driver
MongoDB. (2015). MongoDB [Link] Driver [Página
web] [Link]
En este apartado se puede encontrar toda la información relativa a todos los drivers
de [Link], según la versión de MongoDB utilizada. El enlace proporciona todos los
ejemplos necesarios para empezar a desarrollar aplicaciones con MongoDB, además
de dar recomendaciones sobre librerías que harán la vida del desarrollador más fácil.
Bases de Datos para el Big Data 23
Tema 6. A fondo
A fondo
MongoDB Python Driver
MongoDB. (2021). MongoDB Python Drivers [Página
web]. [Link]
En este apartado se pueden encontrar todos los enlaces necesarios para iniciarse en
la programación de Python utilizando la base de datos MongoDB. Ofrece toda la
información relativa a las versiones de MongoDB y una serie de tutoriales de
desarrollo con varios ejemplos.
Bases de Datos para el Big Data 24
Tema 6. A fondo
Test
1. ¿Cuál es el objetivo de un driver?
A. «Traducir» las llamadas que se hacen desde un lenguaje de programación
a un «lenguaje» que entienda la base de datos.
B. Proporcionar un objeto de conexión.
C. Proporcionar una serie de «funciones» que permitan al programador
interactuar con la base de datos.
D. Todas las anteriores son correctas.
2. ¿Dónde se debería acudir si se quiere desarrollar una aplicación con base de
datos MongoDB pare gestionar una conexión?
A. A la página oficial del lenguaje de programación con el que estamos
desarrollando.
B. A la página de documentación oficial de MongoDB, en el apartado de
drivers.
C. A la página oficial del sistema operativo donde estemos desarrollando.
D. Todas las anteriores son correctas.
3. ¿Cuál de los siguientes lenguajes de programación soporta MongoDB?
A. C.
B. Java.
C. PHP.
D. Todos los anteriores son correctos.
4. ¿Cuál es la mejor forma de descargar el driver de Java?
A. Utilizando Maven.
B. Buscando en Google.
C. Repositorio.
D. Las respuestas A y C son correctas.
Bases de Datos para el Big Data 25
Tema 6. Test
Test
5. Si no se especifica en el driver ningún parámetro, ¿dónde se realiza la conexión?
A. localhost y puerto 27017.
B. Puerto 27017.
C. Localhost.
D. Es obligatorio definir un servidor y un puerto.
6. ¿Cuál es el formato de documentos utilizado por el driver de Java?
A. BSON.
B. JSON.
C. CSV.
D. XML.
7. ¿Cuál es la mejor forma de instalar el driver de [Link]?
A. Usando Maven.
B. Buscando en Google.
C. Usando NPM.
D. Todas las anteriores son correctas.
8. ¿Qué es PyMongo?
A. Una base de datos NoSQL.
B. El driver de MongoDB para Python.
C. Una base de datos SQL.
D. El driver de lenguaje de programación Py.
Bases de Datos para el Big Data 26
Tema 6. Test
Test
9. ¿Cómo podemos descargar el driver de Python para Mongo?
A. Utilizando NPM.
B. Utilizando Maven.
C. Buscando en Google.
D. Utilizando PIP.
10. ¿Cuál de estos comandos son válidos para acceder a una colección de mongo?
A. [Link]
B. db['myCollection']
C. [Link]('myCollection')
D. Todas son correctas.
Bases de Datos para el Big Data 27
Tema 6. Test
Tema 7
Bases de Datos para el Big Data
Tema 7. Cassandra
Índice
Esquema
Ideas clave
7.1. Introducción y objetivos
7.2. Descarga e instalación
7.3. Conceptos generales
7.4. Modelo de datos y relaciones
7.5. CQL3
7.6. TTL y WriteTime
7.7. Índices
7.8. Ejercicio práctico: instalación con Docker
7.9. Referencias bibliográficas
A fondo
La documentación oficial de Apache Cassandra
Introducción a Cassandra con Datastax
Webinar sobre el modelado de datos en Cassandra
Instalar Cassandra en Windows
Bibliografía
Test
Esquema
Bases de Datos para el Big Data 3
Tema 7. Esquema
Ideas clave
7.1. Introducción y objetivos
Este tema es totalmente práctico y se enfoca en el uso básico de la base de datos
Cassandra, dentro del ámbito de NoSQL. Se describen los principales pasos de su
instalación, una sección dedicada a conceptos generales, una sección que habla
sobre el modelado de datos en esta base de datos y el resto de los temas se
enfocará en aprender a configurar y manipular la base de datos.
Al tratarse de un tema con un enfoque práctico, la mejor forma de estudiarlo es
llevando a cabo la instalación de la base de datos en un entorno local para pruebas.
Para ello, se recomienda que se estudien inicialmente los apartados 7.2 y 7.8. Una
vez instalada Cassandra en local, el estudiante podrá continuar con los apartados
siguientes, según el orden propuesto y las indicaciones o sugerencias que brinde el
profesor a lo largo de la asignatura.
Apache Cassandra es una base de datos NoSQL caracterizada por ser distribuida,
altamente escalable y con un alto rendimiento. Su diseño y arquitectura distribuida le
permiten manejar grandes volúmenes de datos sobre varios servidores,
proporcionando así una alta disponibilidad con el mínimo número de fallos. Para
lograr la alta disponibilidad, los datos se colocan en diferentes máquinas con más de
un factor de replicación determinado.
Cassandra es un producto de Apache y su sistema de almacenamiento o motor de
base de datos es de código abierto, distribuido y descentralizado. Su fin principal es
gestionar grandes volúmenes de datos estructurados, repartidos por distintos
servidores.
¿Qué se puede destacar de Cassandra?
▸ Es una base de datos orientada a columnas.
Bases de Datos para el Big Data 4
Tema 7. Ideas clave
Ideas clave
▸ Es escalable, consistente y tolerante a fallas.
▸ El diseño de distribución de Cassandra se basa en Dynamo de Amazon y su modelo
de datos en Bigtable de Google.
▸ Se puede decir que Facebook es el creador de Cassandra.
▸ Como motor de base de datos, es totalmente diferente de los sistemas de
administración de bases de datos relacionales.
▸ El modelo de replicación es del estilo de Dynamo y el concepto de modelo de datos
«familia de columnas» es el más robusto.
▸ ¿Se usa? Sí. Algunas de las empresas más grandes como Facebook, Twitter, Cisco,
Rackspace, eBay, Twitter y Netflix, entre otros, lo emplean dentro de sus
arquitecturas.
Los objetivos que se abordan en este tema son los siguientes:
▸ Entender los conceptos generales que caracterizan a Cassandra.
▸ Conocer la arquitectura básica de esta base de datos NoSQL y los elementos que la
componen.
▸ Aprender a usar los principales tipos de datos, incluidos los tipos de datos definidos
por el usuario.
▸ Entender el uso de las colecciones set, list y map.
▸ Poner en práctica la instalación de esta base de datos en un entorno de pruebas.
Bases de Datos para el Big Data 5
Tema 7. Ideas clave
Ideas clave
7.2. Descarga e instalación
La instalación propuesta se hará sobre distribuciones de Linux Debian o Ubuntu.
Para descargar los ficheros de instalación correspondientes, ten en cuenta que:
▸ Para <release series> se debe especificar el número de versión principal sin punto y
con una x.
▸ La última <release series>, a fecha de noviembre de 2020, es la 311x.
▸ Para versiones anteriores, el <release series> puede ser uno de 30x, 22x o 21x.
▸ Agrega el repositorio Apache de Cassandra /etc/apt/[Link].d/cassandra. [Link]
, por ejemplo, para la versión 3.11:
$ echo "deb [Link] 311x main" | sudo
tee -a /etc/apt/[Link].d/[Link]
▸ Agrega las claves del repositorio de Apache Cassandra y, acto seguido, actualiza los
repositorios:
$ curl [Link] | sudo apt-key add –
$ sudo apt-get update
▸ Agrega la clave pública correspondiente y vuelva a actualizar los repositorios de la
siguiente manera:
$ sudo apt-key adv --keyserver [Link] --recv-key
A278B781FE4B2BDA
$ sudo apt-get update
Bases de Datos para el Big Data 6
Tema 7. Ideas clave
Ideas clave
La clave pública puede ser diferente, es posible obtenerla o bien del mensaje de
error o bien a través de la lista completa de claves públicas de los contribuyentes de
Apache, visita la siguiente URL: [Link]
▸ Instala ahora Cassandra desde la consola:
$ sudo apt-get install cassandra
Ten en cuenta que para iniciar el servicio o demonio de Cassandra, puedes utilizar la
instrucción sudo service cassandra start . Para detenerlo, sudo service cassandra stop .
Después de la instalación, el demonio se iniciará automáticamente. Si necesitas
hacer algún cambio en la configuración de la base de datos, asegúrate de detenerlo
antes para que los cambios se apliquen correctamente. Comprueba que Cassandra
se está ejecutando, utilizando el comando nodetool status desde la línea de
comando.
Para iniciar la consola cqlsh , simplemente escribe este mismo comando: $ cqlsh
Directorios de instalación:
▸ /etc/cassandra: ubicación predeterminada de los archivos de configuración.
▸ /var/log/cassandra/ y /var/lib/cassandra: ubicación predeterminada de los
directorios de datos y registros respectivamente.
▸ /etc/default/cassandra: aquí se encuentran las opciones de inicio que se pueden
configurar.
El código fuente de Cassandra está disponible en Git, consulta la URL:
[Link]
Bases de Datos para el Big Data 7
Tema 7. Ideas clave
Ideas clave
7.3. Conceptos generales
En el año 2008 Cassandra fue desarrollada en Facebook, surgió como una mezcla
del almacén de datos BigTable utilizado por Google y el almacén de datos Dynamo
utilizado por Amazon (Carpenter y Hewitt, 2020). Su creador fue Avinash Lakshman,
autor también de Amazon Dynamo, y Prashant Malik (Carpenter y Hewitt, 2020;
Neeraj, 2013).
Con esta base de datos se quería resolver el problema de búsqueda en la bandeja
de entrada de Facebook. Actualmente ha evolucionado mucho y su uso se extiende
notablemente.
Las características principales de Cassandra son:
▸ Cassandra es una base de datos de tipo clave-valor.
▸ Los datos se almacenan como tablas y columnas.
▸ Cada tabla tiene una clave principal.
▸ Aunque permite lecturas y escrituras muy rápidas, tiene una interfaz SQL limitada
debido a su propia estructura.
Arquitectura
Como se mencionó anteriormente, Cassandra se diseñó para trabajar en entornos
big data sobre múltiples nodos, evitando puntos de fallo por caídas de servidores o
nodos. Esta característica la consigue porque cuenta con un sistema distribuido de
igual a igual en todos sus nodos, donde los datos se distribuyen entre todo el clúster
(Neeraj, 2013). Aunque cada nodo es independiente, al mismo tiempo está
interconectado con otros nodos, desempeñando el mismo papel que los demás (Kan,
2014).
Bases de Datos para el Big Data 8
Tema 7. Ideas clave
Ideas clave
Figura 1. Modelo de referencia arquitectura Apache Cassandra.
Los nodos de un clúster pueden aceptar solicitudes de lectura y escritura,
independientemente de dónde se encuentren realmente los datos en dicho clúster. Si
un nodo falla, las solicitudes de lectura y escritura pasan a ser atendidas por otros
nodos de la red (Kan, 2014).
Los principales componentes de Cassandra son:
▸ Nodo: un lugar donde se almacenan los datos.
▸ Centro de datos: es una colección de nodos relacionados.
▸ Clúster: es un componente que contiene uno o más centros de datos.
▸ Registro de confirmación: mecanismo de recuperación de fallos. Todas las
operaciones de escritura se escriben en este registro de confirmación.
Bases de Datos para el Big Data 9
Tema 7. Ideas clave
Ideas clave
▸ Mem-table: es una estructura de datos residente en memoria. Después del registro
de confirmación, los datos pasan a la tabla en memoria. Es normal que para una
familia de una sola columna existan varias mem-tables.
▸ SSTable: archivo de disco al que se vacían los datos de la tabla de memoria,
cuando su contenido alcanza un valor umbral.
▸ Filtro Bloom: conjunto de algoritmos no deterministas muy rápidos, utilizados para
probar si un elemento es miembro de un conjunto. Comprende el uso de tipo
especial de caché al que se accede después de cada consulta.
Sistema de replicación
Los nodos de un clúster en Cassandra actúan como réplicas de un dato específico.
Si la respuesta a algún nodo incluye un valor desactualizado, Cassandra se
encargará de devolver al usuario el valor más reciente. Después de atender al
usuario, Cassandra repara la lectura en segundo plano para actualizar los valores
que se encontraron obsoletos.
Operaciones de escritura
Los registros de confirmación que residen en los nodos capturan toda actividad de
escritura de los mismos nodos. El objetivo es que dichos datos sean almacenados en
la tabla de memorias siempre que esta esté libre. En el caso de que la tabla de
memorias esté llena, los datos se escribirán en el archivo de datos SStable.
La partición y replicación de todas las escrituras se lleva a cabo de forma automática
en todo el clúster. La consolidación de las SSTables se realiza periódicamente,
descartando los datos considerados como innecesarios.
Operaciones de lectura
Para leer los datos, Cassandra consulta los valores de la tabla de memorias y
establece la forma de ubicar la tabla SST que contenga los datos solicitados. Las
operaciones de lectura se tipifican en solicitudes directas, de resumen y de
Bases de Datos para el Big Data 10
Tema 7. Ideas clave
Ideas clave
reparación antes de ser delegadas a los coordinadores, para que las envíen a las
réplicas correspondientes.
El primer paso es enviar una solicitud directa a una de las réplicas. Luego, el
coordinador envía la solicitud de resumen a la cantidad de réplicas especificadas
para garantizar el nivel de coherencia y, finalmente, comprueba que los datos
devueltos están actualizados.
Por último, el coordinador envía la solicitud de resumen a todas las réplicas
restantes.
En el caso de que algún nodo devuelva un valor desactualizado, la solicitud de
reparación de lectura en segundo plano actualizará dichos valores.
Lenguaje de consulta en Cassandra
Es necesario conocer también Cassandra Query Language (CQL), el lenguaje de
consulta utilizado para acceder a Cassandra a través de sus nodos. La principal
característica del lenguaje es que CQL utiliza la base de datos como un contenedor
de tablas, las cuales representan espacio de claves. Los programadores pueden
utilizar cqlsh en modo consola para trabajar con CQL o emplear controladores de
otras aplicaciones independientes.
Bases de Datos para el Big Data 11
Tema 7. Ideas clave
Ideas clave
7.4. Modelo de datos y relaciones
El modelado de datos es el proceso de identificar entidades y sus relaciones. En los
sistemas relacionales, los datos se almacenan en tablas normalizadas con claves
externas que se utilizan para hacer referencia a los relacionados entre tablas
(Sharma, 2014). Las consultas que realizará la aplicación están controladas por la
estructura de las tablas y los datos relacionados se consultan como combinaciones
de dichas tablas.
En Cassandra, el modelado de datos se basa en consultas. Los patrones de acceso
a los datos y las consultas de la aplicación determinan la estructura y organización
de los datos que luego se utilizan para diseñar las tablas de la base de datos. A
diferencia de un modelo de base de datos relacional en el que las consultas utilizan
combinaciones de tablas para obtener datos de varias tablas, las combinaciones no
son compatibles con Cassandra, por lo que todos los campos obligatorios (columnas)
deben agruparse en una sola tabla.
Dado que cada consulta está respaldada por una tabla, los datos se duplican en
varias tablas en un proceso conocido como desnormalización. La duplicación de
datos y un alto rendimiento de escritura se utilizan para lograr un alto rendimiento de
lectura.
La elección de la clave principal y la clave de partición es importante para distribuir
los datos de manera uniforme en todo el clúster. Mantener el número de particiones
leídas para una consulta al mínimo también es importante, porque diferentes
particiones podrían estar ubicadas en diferentes nodos y el coordinador necesitaría
enviar una solicitud a cada nodo agregando a la solicitud la sobrecarga y la latencia.
Cassandra divide los datos en los nodos de almacenamiento, utilizando una variante
d e hash consistente para la distribución de datos. El hash es una técnica que se
Bases de Datos para el Big Data 12
Tema 7. Ideas clave
Ideas clave
utiliza para mapear datos con la que, dada una clave, una función hash genera un
valor hash (o simplemente un hash) que se almacena en una tabla hash. Una clave
de partición se genera a partir del primer campo de una clave primaria.
Los datos divididos en tablas hash mediante claves de partición proporcionan una
búsqueda rápida. Cuantas menos particiones utilizadas para una consulta, más
rápido es el tiempo de respuesta de la consulta. Sabiendo lo anterior, ahora es
posible conocer los componentes que describen un modelo de datos en Cassandra.
Dichos componentes son espacios de claves, tablas y columnas.
Espacios de claves
El modelo de datos de Cassandra consta de espacios de claves al más alto nivel.
Los espacios de claves son los contenedores de datos, similares al esquema o la
base de datos en una base de datos relacional. Normalmente, los espacios de claves
contienen muchas tablas.
Tablas
Dentro de los espacios de claves, se definen o crean las tablas. Estas también se
conocen como «familias de columnas» en las versiones anteriores de Cassandra.
Las tablas contienen un conjunto de columnas y una clave principal, y almacenan los
datos en un conjunto de filas.
Columnas
Las columnas definen la estructura de los datos en una tabla. Cada columna tiene un
tipo asociado, como entero, texto, doble y booleano.
A continuación, se muestran ejemplos de tablas en Cassandra.
Bases de Datos para el Big Data 13
Tema 7. Ideas clave
Ideas clave
Tabla 1. Código de ejemplo para la creación de tablas en Cassandra.
En la primera columna de la tabla anterior, la clave de partición se genera a partir de
la clave principal id para la distribución de datos entre los nodos de un clúster. En la
segunda columna de la tabla, se asigna una clave primaria compuesta, el primer
campo id se usa para generar la clave de partición y el segundo campo name es la
clave de agrupamiento usada para ordenar dentro de una partición.
El uso de claves de agrupación en clústeres para ordenar datos hace que la
recuperación de datos adyacentes sea más eficiente.
Relaciones
Cuando se quiere crear una aplicación basada en datos que utilizarán una base de
datos relacional, es posible comenzar a modelar el dominio como un conjunto de
tablas normalizadas correctamente y utilizar claves externas para hacer referencia a
datos relacionados en otras tablas.
Bases de Datos para el Big Data 14
Tema 7. Ideas clave
Ideas clave
Figura 2. Ejemplo de una base de datos relacional.
Al utilizar Cassandra no es posible realizar uniones. Si tu necesidad es combinar
datos, tendrás que crear una segunda tabla desnormalizada que represente los
resultados de la combinación para ti. Esta es la filosofía de Cassandra, la cual,
además, no aplica integridad referencial y destaca por el uso de la desnormalización
de los datos. Estos son los aspectos que nos llevan a pensar en el diseño de
consulta típico en Cassandra.
El diseño de la interfaz de la aplicación suele ser muy útil para comenzar a identificar
consultas. Supón que has hablado con las partes interesadas del proyecto y que tus
diseñadores de UX han producido diseños de interfaz de usuario o wireframes para
los casos de uso clave.
Algunas consultas de ejemplo podrían ser:
▸ Q1. Busca parques cerca del hotel del cliente.
▸ Q2. Busca información sobre una cafetería concreta de la zona.
▸ Q3. Encuentra puntos de interés cercanos al hotel del cliente.
Bases de Datos para el Big Data 15
Tema 7. Ideas clave
Ideas clave
▸ Q4. Encuentra un punto de información turístico de la zona.
▸ Q5. Encuentra la disponibilidad del museo en unas fechas y horas concretas.
Figura 3. Ejemplo de esquema para el diseño de consultas en Apache Cassandra.
Bases de Datos para el Big Data 16
Tema 7. Ideas clave
Ideas clave
7.5. CQL3
Como se ha visto en los apartados anteriores, los términos utilizados para referirse a
la base de datos Cassandra son los mismos de SQL (tablas, filas y columnas). Para
manipular los datos alojados en estos elementos, se utiliza CQL como un lenguaje
sutilmente parecido a SQL. CQL3 corresponde a la versión 3 del lenguaje, el cual no
es compatible con las versiones CQL1 y CQL2.
Tipos de datos
CQL3 soporta los tipos de datos nativos, de colección, definidos por el usuario y
personalizados. Los siguientes son algunos ejemplos de los tipos de datos nativos.
Figura 4. Ejemplos de tipos de datos en Cassandra.
Contadores
Son tipos de columnas que funcionan como contadores, cuyas únicas operaciones
permitidas son incrementar y decrementar. El valor de la columna no se establece,
Bases de Datos para el Big Data 17
Tema 7. Ideas clave
Ideas clave
Cassandra se encarga de controlar su valor.
Timestamp
Son valores codificados como enteros de 64 bits con signo. Se ingresan usando el
tipo integer o string para representar, por ejemplo, una fecha ISO 8601. Estos son
ejemplos de valores válidos como timestamp:
▸ 1299038700000
▸ '2011-02-03 04:05+0000'
▸ '2011-02-03 [Link]+0000'
▸ '2011-02-03 [Link].000+0000'
▸ '2011-02-03T04:05+0000'
▸ '2011-02-03T[Link]+0000'
▸ '2011-02-03T[Link].000+0000'
Date
Al igual que los timestamp, se puede representar como integer o string. En el caso
d e string se debe utilizar el formato convencional yyyy-mm-dd. Para el caso de las
horas, se utilizan los mismos tipos primitivos y los formatos comunes son:
▸ ' [Link]'
▸ '[Link].123'
▸ '[Link].123456'
▸ '[Link].123456789'
Bases de Datos para el Big Data 18
Tema 7. Ideas clave
Ideas clave
Duraciones
Los valores del duration se codifican como números enteros con 3 signos de
longitudes variables. El primer número entero representa el número de meses, el
segundo el número, de días y el tercero, el número de nanosegundos. La forma de
establecer su valor es (quantity unit)+, de la forma 12h30m.
▸ y: años (12 meses)
▸ mo: meses (1 mes)
▸ w: semanas (7 días)
▸ d: días (1 día)
▸ h: horas ([Link].000 nanosegundos)
▸ m: minutos ([Link] nanosegundos)
▸ s: segundos (1,000,000,000 nanosegundos)
▸ ms: milisegundos (1.000.000 nanosegundos)
▸ uso µs: microsegundos (1000 nanosegundos)
▸ ns: nanosegundos (1 nanosegundo)
Otros métodos para establecer este valor es mediante el formato ISO 8601:
P[n]Y[n]M[n]DT[n]H[n]M[n]S o P [ n ] W y el formato alternativo ISO 8601: P[YYYY]-[MM]-
[DD]T[hh]:[mm]:[ss].
Algunos ejemplos de su uso se muestran a continuación:
INSERT INTO RiderResults (name, race, result) VALUES ('Andres', 'Tour de
France', 89h4m48s);
INSERT INTO RiderResults (name, race, result) VALUES ('Maria', 'Tour de
France', PT89H8M53S);
Bases de Datos para el Big Data 19
Tema 7. Ideas clave
Ideas clave
INSERT INTO RiderResults (name, race, result) VALUES ('Marco', 'Tour de
France', P0000-00-00T[Link]);
Colecciones
Los tres tipos de colecciones que admite CQL son map, set y list.
▸ Map: es un conjunto (ordenado) de pares clave-valor, donde las claves son únicas y
el mapa está ordenado por sus claves.
CREATE TABLE clients (
id text PRIMARY KEY, name text, type map<text, text> //Aquí define
un Map con Clave-Valor Text-Text
);
INSERT INTO clients (id, name, type) VALUES ('client001', 'Andres Luna', {
'bill' : 'ordinary', 'payment' : 'cash' });
// Actualiza un valor dentro de Map
UPDATE clients SET type = {'payment': 'PayPal'} WHERE id = 'client001';
UPDATE clients SET type['payment'] = 'VISA' WHERE id = 'client001';
UPDATE clients SET type = type + {'mortage': 'Fixed Interest',
'investment': 'Risk'} WHERE id = 'client001';
DELETE type['mortage'] FROM clients WHERE id = 'client001';
UPDATE clients SET type = type - { ‘mortage', 'investment'} WHERE id =
'client001';
▸ Set: es una colección ordenada de valores únicos.
CREATE TABLE clients (
id text PRIMARY KEY, name text, type set<text> //Aquí define un Set
de tipo Text
);
INSERT INTO clients (id, name, type) VALUES ('client002', 'Manuel Faena',
{'A', 'B', 'C'});
UPDATE clients SET type = {'E', 'P', 'M'} WHERE id = 'client002';
//actualizas todo el Set
UPDATE clients SET type = type + {'H', 'F'} WHERE id = 'client002'; //
insertar un elemento que existe no es posible
Bases de Datos para el Big Data 20
Tema 7. Ideas clave
Ideas clave
UPDATE clients SET type = type - {'H'} WHERE id = 'client002'; //no es un
error intentar borrar si no existe
▸ List: es una colección ordenada de valores no únicos donde los elementos se
ordenan por su posición en la lista.
CREATE TABLE products (
id text PRIMARY KEY, name text, order, pos list<int> //Aquí define
una Lista de enteros
);
INSERT INTO products (id, name, order, pos) VALUES ('Table01', 'Table
Reduce', 3, [10, 11, 12]);
UPDATE products SET position = [ 210, 111, 412] WHERE id = 'Table01';
//actualiza toda la lista
UPDATE products SET order = 5, pos = pos + [ 45, 78 ] WHERE id = 'Table01';
// insertar dos elemento en la lista
UPDATE products SET order = 4, pos = pos – [78] WHERE id = 'client002';
//no es un error intentar borrar si no existe
UPDATE products SET pos[1] = 25 WHERE id = 'client002';
DELETE pos[2] products WHERE id = 'client002';
▸ Tuple: es un conjunto de valores de longitud determinada donde cada valor puede
ser de un tipo diferente.
CREATE TABLE users (
user text,
phones tuple<text, text>,
)
INSERT INTO users (user, phones) VALUES ('Pepe Navarro', ('home', '(34)
666-666-666'));
Tipos definidos por el usuario (UDT)
Los usuarios pueden crear sus propios tipos de datos. Para ello se emplea la
instrucción CREATE TYPE.
CREATE TYPE phone (
code int,
number text,
Bases de Datos para el Big Data 21
Tema 7. Ideas clave
Ideas clave
CREATE TYPE address (
street text,
city text,
zip text,
phones map<text, phone>
)
CREATE TABLE user (
name text PRIMARY KEY,
addresses map<text, frozen<address>>
)
Ten en cuenta que, si intentas crear una UDT que existe,
obtendrás un error.
Por otra parte, a partir de la versión 3.7 de Cassandra, los UDT en la
mayoría de los casos deben congelarse (frozen).
Frozen cambia el comportamiento de una colección o UDT. Al congelar
una colección, los valores se serializan como un todo, impidiendo que
dicha colección se pueda actualizar parcialmente. Al aplicar frozen, la
colección se debe tratar como un todo en el momento de manipularla.
Keyspace
Es un objeto que contiene las familias de columnas, los índices, los UDT, el
conocimiento del centro de datos, la estrategia utilizada en el espacio de claves, el
factor de replicación, etc. En Cassandra, se puede considerar el keyspace como algo
similar a la base de datos en un RDBMS.
CREATE keyspace KeyspaceName with replication={'class' : strategy name,
'replication_factor' : No of replications on different nodes};
Bases de Datos para el Big Data 22
Tema 7. Ideas clave
Ideas clave
//Ejemplo
CREATE keyspace Products with replication=
{'class':SimpleStrategy,'replication_factor': 3};
//Modificar un keyspace
ALTER keyspace KeyspaceName with replication={'class':'StrategyName',
'replication_factor': no of replications on different nodes}
with DURABLE_WRITES=true/false
//Ejemplo
ALTER Keyspace Products with replication=
{'class':'NetworktopologyStrategy', 'DataCenter1':1};
#Borrado
DROP keyspace Products
▸ Estrategia simple (SimpleStrategy): se utiliza cuando solo tiene un centro de
datos. En esta estrategia, la primera réplica se coloca en el nodo seleccionado por el
particionador. Los nodos restantes se colocan en el sentido de las agujas del reloj en
el anillo sin tener en cuenta la ubicación del rack o del nodo.
Bases de Datos para el Big Data 23
Tema 7. Ideas clave
Ideas clave
▸ Estrategia de topología de red (NetworktopologyStrategy): se utiliza cuando
tiene más de un centro de datos. En esta estrategia, se debe proporcionar un factor
de replicación para cada centro de datos por separado. La estrategia de topología
de red coloca réplicas en nodos en el sentido de las agujas del reloj en el mismo
centro de datos. Esta estrategia intenta colocar réplicas en diferentes racks.
▸ Factor de replicación (ReplicationFactor) : es el número de réplicas de datos
colocadas en diferentes nodos. Para que no haya fallas, 3 es un buen factor de
replicación. Más de dos factores de replicación garantizan que no haya un solo
punto de falla. A veces, el servidor puede estar inactivo o puede ocurrir un problema
de red, luego otras réplicas brindan servicio sin fallas.
Ten en cuenta los siguientes aspectos sobre el keyspace:
▸ Nombre del keyspace: no se puede modificar en Cassandra.
▸ Nombre de la estrategia: se puede modificar especificando un nuevo nombre de
estrategia.
▸ Factor de replicación: se puede modificar especificando un nuevo factor de
replicación.
▸ DURABLE_WRITES : el valor DURABLE_WRITES se puede modificar especificando su
valor verdadero o falso. Por defecto, es true . Si se establece en false , no se
escribirán actualizaciones en el registro de confirmación y viceversa.
INSERT: insertando datos
El comando INSERT escribe datos en columnas Cassandra en forma de fila. Dicho
comando almacenará solo aquellas columnas proporcionadas por el usuario. Debe
especificar necesariamente solo la columna de clave principal. Esta instrucción no
devuelve ningún resultado.
Bases de Datos para el Big Data 24
Tema 7. Ideas clave
Ideas clave
INSERT INTO [Link] (user, phones) VALUES ('Pepe Navarro', ('home',
'(34) 666-666-666'));
Ten en cuenta que Cassandra insertará una fila si no existe la clave
principal indicada; de lo contrario, si la clave principal existe, actualizará
esa fila.
UPDATE: actualizando datos
El comando UPDATE se emplea para actualizar los datos en la tabla Cassandra. Si
no se devuelven resultados después de actualizar los datos, significa que los datos
se actualizaron correctamente; de lo contrario, se devolverá un error. Los valores de
columna se cambian en la cláusula Set , mientras que los datos se filtran con la
cláusula WHERE .
UPDATE [Link] Set phone = '(34) 666-666-666' WHERE user = 'Pepe
Lopez';
DELETE: borrando datos
El comando DELETE elimina una fila completa o algunas columnas de la tabla
indicada. Cuando se eliminan datos, no se eliminan de la tabla inmediatamente. En
su lugar, los datos eliminados se marcan con una lápida y se eliminan después de la
compactación.
DELETE from [Link] WHERE user = 'Pepe Lopez';
Limitaciones en CQL
▸ No admite consultas de agregación como max, min, avg.
Bases de Datos para el Big Data 25
Tema 7. Ideas clave
Ideas clave
▸ No admite ni group by ni having.
▸ No admite joins.
▸ No admite consultas OR.
▸ No admite consultas con comodines.
▸ No admite consultas de unión e intersección.
▸ Las columnas de la tabla no se pueden filtrar sin crear el índice.
▸ La consulta mayor que (>) y menor que (<) solo se admite en la columna de
agrupación.
▸ CQL no es adecuado para realizar análisis porque presenta muchas limitaciones.
Bases de Datos para el Big Data 26
Tema 7. Ideas clave
Ideas clave
7.6. TTL y WriteTime
Cassandra puede hacer que los datos expiren de forma automática. Durante la
inserción de datos, por ejemplo, se debe especificar el valor TTL en segundos. Dicho
valor TTL es el tiempo de vida de los datos. Después que pase ese período en
concreto, los datos se eliminarán automáticamente.
Supón que quieres insertar un registro y que este exista solo durante los primeros
200 segundos. Al insertar, si indicas el TTL 200 , los registros se eliminarán
automáticamente después de los 200 segundos. Recuerda que los datos no se
borran de inmediato, cuando estos caduquen se marcarán con una lápida. Existe una
lápida durante un período de gracia, una vez que los datos caducan, estos se
eliminan después del proceso de compactación.
INSERT INTO [Link] (ColumnNames) values (ColumnValues)
using TTL TimeInSeconds;
#Ejemplo
INSERT INTO [Link] (user, phones) VALUES ('Pepe Navarro', ('home',
'(34) 666-666')) using TTL 100;
La función WRITETIME , por su parte, es muy útil en CQL para recuperar la fecha y
hora de los insert en las columnas. Es posible usar la función WRITETIME junto con la
instrucción select seguida de la columna sin particiones entre paréntesis. En CQL
una tabla contiene el timestamp que representa la fecha y hora en que se produjo
una escritura en una columna. El valor devuelto por la función WRITETIME está en
microsegundos, luego es posible convertirlo en formatos de fecha/hora.
CREATE TABLE ftest (
Id int,
Name text,
Address text,
PRIMARY KEY(Id)
);
INSERT INTO ftest (Id, Name, Address) VALUES (201, 'Ashish', 'Delhi');
INSERT INTO ftest (Id, Name, Address) VALUES (202, 'Rana', 'Mumbai');
Bases de Datos para el Big Data 27
Tema 7. Ideas clave
Ideas clave
INSERT INTO ftest (Id, Name, Address) VALUES (203, 'Abi', 'Noida');
SELECT * FROM ftest;
SELECT WRITETIME (Address) FROM ftest;
Bases de Datos para el Big Data 28
Tema 7. Ideas clave
Ideas clave
7.7. Índices
CQL permite la creación de índices secundarios en tablas, los cuales son usados por
las consultas que utilicen dicha tabla. Un índice secundario se identifica por un
nombre definido por el usuario al momento de crearlo. Los índices se crean con el
comando CREATE INDEX, el cual se especifica por el usuario sobre la columna
deseada.
Si los datos ya existen para la columna que se desea indexar, Cassandra crea
índices sobre los datos, durante la ejecución de la declaración del comando anterior.
Después de crear un índice, Cassandra indexa datos nuevos automáticamente
cuando se insertan.
El índice no se puede crear sobre una clave principal, porque está ya está indexada.
Un aspecto a tener en cuenta es que Cassandra no admite índices sobre
colecciones.
CREATE INDEX PhoneIndex on [Link] (Phone);
Si no se indexa la columna, Cassandra no podrá filtrar dicha columna a menos que
sea una clave principal. Por lo anterior, para filtrar columnas en Cassandra, es
necesario crear índices.
El comando DROP INDEX permite eliminar el índice que se especifique. Si al crear el
índice no se le dio un nombre, entonces el nombre del índice es
TableName_ColumnName_idx. Ten en cuenta que, si el índice no existe, devolverá
un error a menos que si la cláusula IF EXISTS , la cual devolverá no-op .
Bases de Datos para el Big Data 29
Tema 7. Ideas clave
Ideas clave
Se recomienda que, durante la creación del índice, se debe especificar el nombre del
espacio de claves con el nombre del índice; de lo contrario, el índice se eliminará del
espacio de claves actual.
ROP INDEX IF EXISTS [Link];
Bases de Datos para el Big Data 30
Tema 7. Ideas clave
Ideas clave
7.8. Ejercicio práctico: instalación con Docker
En este último apartado se explica cómo realizar la instalación de Apache Cassandra
con Docker sobre Windows.
Las imágenes de Docker están prediseñadas y configuradas para facilitar su uso y
manipulación (Shirinbab et al., 2019). No es necesario crear máquinas virtuales
completas para testear distintos productos en nuestros ordenadores.
Actualmente todas las bases de datos NoSQL tienen una imagen prediseñada en
Docker, con lo cual, el trabajo que hagas ahora en esta práctica te será útil para que
puedas usar dichas bases de datos, sin instalaciones complicadas sobre tu
ordenador.
¡Manos a la obra!
▸ Paso 1: instala Docker Desktop sobre tu sistema operativo. No es necesario crear
una cuenta en Docker Hub para usar los servicios de Docker Desktop.
Figura 5. Web de inicio de Docker Hub.
Bases de Datos para el Big Data 31
Tema 7. Ideas clave
Ideas clave
▸ Paso 2: en el siguiente enlace tienes la información necesaria para llevar a cabo
dicha instalación [Link] Se asume que
esta actividad se hará sobre Windows.
Figura 6. Web de Docker Hub, instrucciones de instalación de su herramienta.
▸ Paso 3: inicia la aplicación de Docker Desktop y luego abre una terminal de CMD o
PowerShell en Windows y ejecuta la instrucción:
Figura 7. Menú inicio con la opción Docker Hub una vez instalado.
Bases de Datos para el Big Data 32
Tema 7. Ideas clave
Ideas clave
▸ Paso 4: desde PowerShell inicia la descarga de la imagen de Cassandra con la
siguiente instrucción:
• docker pull Cassandra
Bases de Datos para el Big Data 33
Tema 7. Ideas clave
Ideas clave
Figura 8. Ejecución de instalación de imagen Cassandra vía Docker.
Como puedes observar en la imagen, se ha descargado en tu ordenador partes o
fragmentos de una máquina virtual que Docker gestionará por ti. Tú simplemente
tendrás que hacer uso de ella y divertirte jugando con Cassandra.
▸ Paso 5: en Docker Desktop visualiza la nueva imagen que has descargado.
Figura 9. Visualización de la imagen de Cassandra una vez ha sido creada con Docker Hub.
Si posicionas el cursor sobre la imagen, podrás acceder a varios botones que te
permitirán manipular la imagen. Ahora solo interesa que ejecutes (RUN) dicha
imagen.
Bases de Datos para el Big Data 34
Tema 7. Ideas clave
Ideas clave
Figura 10. Opciones disponibles sobre la imagen de Cassandra en Docker Hub.
Al ejecutar la imagen, te pedirá una información que será útil para dos cosas:
▸ Diferenciar el puerto de acceso a Cassandra desde tu PC del puerto que
internamente use la imagen.
▸ Establecer una ruta para que los datos (base de datos de Cassandra) se aloje en un
directorio de vuestro PC.
Figura 11. Configuración de la imagen de Cassandra en Docker Hub.
Bases de Datos para el Big Data 35
Tema 7. Ideas clave
Ideas clave
Si das clic en el contenedor Cassandra creado, podrás ver la salida de log que ha
resultado de ejecutar o levantar la imagen.
Figura 12. Ventana de Log de la imagen de Cassandra en Docker Hub.
▸ Paso 6: accede a la consola cqlsh desde la propia imagen, es decir, accediendo a la
línea de comandos de la imagen y luego a cqlsh .
• docker exec –it cassandra Bash .
• Aparecerá esto: root@xXxX:/# . Es la línea de comando de tu imagen de Cassandra.
• Sobre la línea de comando de la imagen, ejecuta cqlsh .
Figura 13. Consola Bash de la imagen de Cassandra en Docker Hub.
¡Enhorabuena! En este punto dispones de imagen Docker de Cassandra para que
Bases de Datos para el Big Data 36
Tema 7. Ideas clave
Ideas clave
puedas hacer tus pruebas. Úsala para las distintas actividades prácticas que el
profesor proponga en las clases.
En el vídeo «Características de Cassandra» se hace una introducción al uso de
Cassandra y sus particularidades.
Accede al vídeo:
[Link]
4821-a0f0-aca80143c110
Vídeo 1. Características de Cassandra.
Bases de Datos para el Big Data 37
Tema 7. Ideas clave
Ideas clave
7.9. Referencias bibliográficas
Carpenter, J., y Hewitt, E. (2020). Cassandra. The definitive guide. Distributed data at
web scale. O'Reilly Media.
Kan, C. Y. (2014). Cassandra data modeling and analysis. Packt Publishing.
Neeraj, N. (2013). Mastering Apache Cassandra. Packt Publishing.
Sharma, S. (2014). Cassandra design patterns. Packt Publishing.
Shirinbab, S., Lundberg, L., y Casalicchio, E. (2019). Performance comparision
between scaling of virtual machines and containers using Cassandra NoSQL
database. En B. Duncan, Y. Woo Lee, M. Westerlund, y A. Aßmuth (eds.), Cloud
computing (pp. 93-98). IARIA.
Bases de Datos para el Big Data 38
Tema 7. Ideas clave
A fondo
La documentación oficial de Apache Cassandra
The Apache Software Foundation. (2016). Apache Cassandra Documentation v4.0-
b e t a 5 . Apache Cassandra [Archivo de vídeo].
[Link]
Esta página recoge toda la documentación de las distintas distribuciones de Apache
Cassandra.
Bases de Datos para el Big Data 39
Tema 7. A fondo
A fondo
Introducción a Cassandra con Datastax
DataStax Developers. (10 de abril de 2019). Introduction to Apache Cassandra™ +
What’s New in 4.0 by Patrick McFadin | DataStax Presents [Archivo de
vídeo]. [Link]
Este vídeo muestra una introducción de Apache Cassandra como parte del equipo de
Datastax. Describen su funcionalidad, sus principales componentes y la arquitectura
que caracteriza a esta base de datos.
Bases de Datos para el Big Data 40
Tema 7. A fondo
A fondo
Webinar sobre el modelado de datos en Cassandra
DataStax. (9 de marzo de 2020). How to Create a Cassandra Data Model [Webinar] |
DataStax [Archivo de vídeo]. [Link]
Esta es, sin duda alguna, una de las mayores cuestiones que surgen alrededor del
uso de Apache Cassandra como motor de base en una solución final. En este
webinar el equipo de DataStax brinda un conjunto de sugerencias útiles al momento
de definir un modelo de datos sobre Cassandra.
Bases de Datos para el Big Data 41
Tema 7. A fondo
A fondo
Instalar Cassandra en Windows
Kaplarevic, V. (2020). How to Install Cassandra on Windows 10. phoenixNAP [Página
web]. [Link]
La instalación de Cassandra en Windows es posible y no siempre está bien
documentada. En este enlace explican con mayor claridad cómo instalar Apache
Cassandra con el zip propio del sitio oficinal de Apache. La sugerencia es que
instales la versión propia de Apache y aprendas a realizar una instalación «pura».
Bases de Datos para el Big Data 42
Tema 7. A fondo
A fondo
Bibliografía
Matallah, H., Belalem, G., & Bouamrane, K. (2020). Evaluation of NoSQL databases:
MongoDB, Cassandra, HBase, Redis, Couchbase, OrientDB. International Journal of
Software Science and Computational Intelligence (IJSSCI), 12(4), 71-91.
Bases de Datos para el Big Data 43
Tema 7. A fondo
Test
1. Cassandra:
A. Es un sistema de almacenamiento de datos NoSQL desarrollado por
Facebook.
B. Es un sistema de almacenamiento en tiempo real para aplicaciones en
línea.
C. Está diseñado para manejar cargas de trabajo en múltiples nodos.
D. Todas las afirmaciones anteriores son correctas.
2. ¿Cuáles son los componentes principales de Cassandra?
A. Cluster, keyspace, column y column & family.
B. Columna name, tables y keyspace.
C. Mem-Table, SSTable y Bloom Filter.
D. Las respuestas A y C son correctas.
3. ¿Cuáles son las colecciones en CQL Cassandra?
A. Tupple, list y timestamp.
B. Map, list y set.
C. Counter, duration y date.
D. Ninguna respuesta anterior es correcta.
4. ¿Cuál es la principal característica de la colección list?
A. Almacenar datos de forma aleatoria.
B. Almacenar datos de forma ordenada y que se puedan repetir.
C. Almacenar elementos clave-valor.
D. Almacenar elementos para usarlos en un orden concreto.
Bases de Datos para el Big Data 44
Tema 7. Test
Test
5. ¿Qué pasa con los datos eliminados en Cassandra?
A. Se borran inmediatamente de la base de datos.
B. Se almacenan temporalmente en la papelera de reciclaje de Cassandra.
C. Son marcados con una lápida.
D. Nunca se borran, están inactivos hasta que el usuario los vuelva a activar.
6. ¿Cuál de las siguientes afirmaciones es verdadera?
A. Cassandra escribe los datos en una caché clave-valor llamada Mem-Table.
B. Los datos en Mem-Table se ordenan por clave.
C. Existe una Mem-Table por cada ColumnFamily y de ella se recuperan los
catos por la columna clave.
D. Todas las afirmaciones anteriores son correctas.
7. La instrucción ALTER KEYSPACE se puede utilizar para:
A. Definir un esquema.
B. Crear una tabla.
C. Ejecutar una consulta.
D. Modificar un keyspace.
8. Al intentar borrar un elemento que no existe en una colección set, se produce:
A. La inserción de un nuevo elemento con dicho valor.
B. Un error en la operación de borrado.
C. Una operación que no se lleva a cabo y que tampoco genera error alguno.
D. Una mutación de la colección.
Bases de Datos para el Big Data 45
Tema 7. Test
Test
9. ¿Qué es una UDT?
A. Un tipo de datos primitivo.
B. Un objeto con funciones especiales en Cassandra.
C. Un tipo de datos definido por el usuario.
D. Un proceso de carga de datos.
10. ¿Cuál de las siguientes instrucciones es correcta?
A. select * from [Link] where dept='AB';
B. drop index IF EXISTS [Link];
C. insert into [Link](id,Name,Email,Description) values ( 2,
'Hamilton', {'hamilton@[Link]'}, ['Data Science']);
D. Todas las instrucciones anteriores son correctas.
Bases de Datos para el Big Data 46
Tema 7. Test
Tema 8
Bases de Datos para el Big Data
Neo4j
Índice
Esquema 3
Ideas clave 4
8.1. Introducción y objetivos 4
8.2. Descarga e instalación 5
8.3. Conceptos generales 10
8.4. Graph Data Modelling 15
8.5. Interfaz Neo4j 17
© Universidad Internacional de La Rioja (UNIR)
8.6. CQL 19
8.7. Visualización de grafos 29
8.8. Caso práctico 33
8.9. Referencias bibliográficas 40
A fondo 41
Test 44
© Universidad Internacional de La Rioja (UNIR)
Neo4j
Definición Principales componentes CQL (Cypher Query Language)
Neo4j es una base de datos Nodo: Esquemas, grafos y Cypher Query Language
de grafos cuyo lenguaje de - Las entidades reciben el nombre de nodos y cada uno
consultas es CQL (Cypher de ellos es muy similar a una instancia de un objeto (es
Query Language). Neo4j decir, tienen propiedades).
está escrito en Java.
Relaciones:
Base de datos NoSQL de tipo
- Las relaciones, por su parte, se conocen como vértices
grafo
y también tienen propiedades, siendo la dirección o
sentido el más importante de ellos. Una relación
Cómo aplica el teorema CAP
conecta dos nodos y los organizan en estructuras.
Los principales elementos
del modelo de datos Graph Propiedades:
DB son: - Nodo y relaciones permiten organizar los datos de tal Manipulación del grafo
- Nodos. manera que sea posible encontrar patrones de • Tipos de datos y operadores.
información existente entre dichos nodos.
- Relaciones. - Las propiedades son pares de nombre-valor utilizados • Nodos.
- Propiedades. para agregar cualidades a los nodos y las relaciones. • Relaciones.
• Propiedades.
• Modelado.
• Cláusulas CREATE, MATCH, INSERT,
DELETE, REMOVE, WHERE, SKIP, LIMIT.
Caso de uso: fraude en tarjetas de crédito
Bases de Datos para el Big Data
Tema 8. Esquema
Esquema
3
Ideas clave
8.1. Introducción y objetivos
Este tema pretende ser una guía para empezar a desarrollar aplicaciones utilizando
Neo4j. Para estudiar este tema debes leer las Ideas clave y, si deseas información
adicional sobre un concepto específico, puedes consultar las lecturas citadas en
«Referencias bibliográficas». Se recomienda también intentar replicar los ejemplos
para entender cada uno de los conceptos que se explican.
Para poder darle un enfoque práctico a este tema, es recomendable que el estudiante
instale su base de datos de prueba siguiendo las instrucciones del apartado 8.2. Una
vez instalado el entorno, continúa con los epígrafes siguientes poniendo en práctica
todos los comandos citados de Neo4j.
Una de las bases de datos de grafos más conocidas es Neo4j. Es de código abierto y
ha sido desarrolla utilizando Java. Sus principales características consisten en que es
escalable en gran medida y no presenta esquema (es NoSQL).
Este tipo de base de datos se basa en la representación gráfica de un conjunto de
objetos donde algunos pares de ellos están conectados por enlaces. Hay dos
elementos claves en Neo4j: los nodos (vértices) y las relaciones (bordes).
Con base en estos dos elementos, Neo4j se utiliza para modelar los datos en forma
de grafo con relaciones. En el grafo los nodos representan las entidades, mientras
© Universidad Internacional de La Rioja (UNIR)
que las relaciones indican la asociación que hay entre los nodos.
Neo4j no es la única base de datos de este tipo, existen otras que siguen esta misma
topología, entre ellas OrientDB, GraphBase, Oracle NoSQL Database,
HypherGraphDB, InfiniteGraph y AllegroGraph.
Bases de Datos para el Big Data
4
Tema 8. Ideas clave
Los objetivos que se pretenden conseguir con este tema son los siguientes:
Comprender las ideas claves que describen el concepto de grafo.
Conocer la utilidad que tienen los grafos como forma de representar los datos y
sus relaciones.
Aplicar los conceptos de grafo sobre la base de datos Neo4j.
Aprender a instalar y configurar un entorno de pruebas local con Neo4j.
8.2. Descarga e instalación
Antes de hablar de la instalación de Neo4j, es interesante que conozcas las versiones que
existen y se pueden descargar para trabajar con esta base de datos. Al igual que
MongoDB, Neo4j cuenta con una versión Enterprise y con una versión Community.
La versión Enterprise ofrece más funcionalidades propias de un sistema en producción,
mientras que la Community está más orientada a entornos de desarrollo. De cara a este
tema, es recomendable trabajar sobre la versión Community.
Otro aspecto importante es que Neo4j necesita que tengas Java en el ordenador, y esto
puede ser algo nuevo si no conoces cómo trabaja Java. Aunque puedes encontrar
imágenes de Docker con Neo4j listas para usar, con el fin de que conozcas cómo es una
instalación propia de esta herramienta, se propone que hagas dicha instalación sobre tu
ordenador siguiendo los pasos que se describen a continuación.
Además de instalar Neo4j, también conocerás el concepto de variables de entorno en
© Universidad Internacional de La Rioja (UNIR)
Windows, las cuales son útiles para configurar herramientas que utilizan este tipo de
variables (es el caso de Java y, por ende, de Neo4j).
Bases de Datos para el Big Data
5
Tema 8. Ideas clave
Paso 1: descarga la versión Community de Neo4j.
Figura 1. Web de descarga de MongoDB.
Paso 2: si no tienes instalado Java en tu ordenador, descarga la versión OpenJDK 8
u Oracle Java 8. Esta versión es la recomendada para Neo4j 3.0.x. Si por alguna
razón debes usar una versión de Neo4j inferior a 2.3.0, es recomendable usar la
versión 7 de Java. Consulta el apartado «Instalar Java 8 y crear variable de
entorno» de este documento.
Paso 3: el archivo que has descargado en el Paso 1 es un zip que contiene los
ficheros de Neo4j. Localiza dicho fichero y extrae su contenido dentro de un
directorio conocido, por ejemplo: D:\Neo4j\.
© Universidad Internacional de La Rioja (UNIR)
Paso 4: el ordenador donde se instala Neo4j hará las veces de servidor. Es
recomendable crear la variable de entorno NEO4J_HOME para señalar el
directorio del Paso 3. En dicho servidor, es posible ejecutar una instancia de la
consola de Neo4j para trabajar (Paso 5.1), pero también es posible crear un
servicio en Windows que permita levantar la base de datos de forma permanente,
Bases de Datos para el Big Data
6
Tema 8. Ideas clave
igual que Mongo (Paso 5.2). Si piensas utilizar Neo4j de forma permanente, se
recomienda instalar el servicio.
Paso 5.1: para ejecutar una instancia de Neo4j, desde la consola de Windows
PowerShell, ubícate en la ruta y ejecuta neo4j console
(<NEO4J_HOME>\bin\neo4j console). Ten en cuenta que al descomprimir el
fichero ZIP, este crea otro directorio llamando /neo4j-community-4.x.x. Se asume
que su contenido es lo que has copiado en el directorio recomendado en el Paso 3.
Si lo que copias es el directorio completo, entonces ten en cuenta este nuevo
directorio en la ruta propuesta.
Paso 5.2: para instalar Neo4j como servicio, utiliza la instrucción
<NEO4J_HOME>\bin\neo4j install-service.
Paso 6: si todo ha ido bien, accede a la URL [Link] desde el
navegador web que usas frecuentemente. Utiliza el usuario neo4j con la
contraseña predeterminada neo4j. De inmediato te pedirá que cambies la
contraseña para mayor seguridad.
Observa cómo cada base de datos utiliza un puerto por defecto en las
instalaciones por defecto: MySQL utiliza el puerto 3306, MongoDB el puerto
27017, Neo4j el puerto 7474… Lo más probable y seguro es que los
administradores de bases de datos asignen puertos menos comunes.
Instalar Java y crear variable de entorno
Paso 1: descarga Java 8 o superior del sitio oficial de Oracle (intenta en la siguiente
© Universidad Internacional de La Rioja (UNIR)
URL: [Link]
[Link]). Si falla la URL anterior (es Oracle y cada vez que innovan mueven
cosas de su sitio web), busca en Google «Instalar Java 8».
Bases de Datos para el Big Data
7
Tema 8. Ideas clave
Paso 2: ejecuta el ejecutable que has descargado e instala Java en la ruta
D:\Java\jdk1.8.0 (D es una unidad de ejemplo, puedes usar otra que consideres más
oportuna).
Paso 3: desde Windows crea la variable JAVA_HOME, para ello da clic derecho en Equipo
o Este Equipo en el Explorador de archivos de Windows.
Paso 4: selecciona la opción Propiedades y luego accede a Configuración avanzada del
sistema > Variables de entorno.
Paso 5: en el recuadro Variables del sistema crea una «Nueva…» variable del sistema
cuyo nombre debe ser JAVA_HOME. A dicha variable ponle como valor de la variable la
ruta de instalación de Java, es decir, D:\Java\jdk1.8.0. Acepta todas y cada de las
ventanas abiertas (son unas cuantas).
Paso 6: comprueba que todo está correcto. Para ello, abre una consola de Windows
y escribe las instrucciones SET JAVA_HOME para comprobar la ruta y luego java –
versión para mostrar la versión que acabas de instalar de Java.
Figura 2. Visualizar la versión de Java desde la consola de Windows.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
8
Tema 8. Ideas clave
Figura 3. Modelo de referencia arquitectura Apache Cassandra.
Si todo ha ido bien, podrás ver la siguiente pantalla en la URL [Link]
© Universidad Internacional de La Rioja (UNIR)
Figura 4. Pantalla de configuración de Neo4j.
Bases de Datos para el Big Data
9
Tema 8. Ideas clave
Instalar Neo4j como servicio en Windows
Para instalar Neo4j como servicio, basta con seguir dos pasos:
Paso 1: desde la ruta de instalación ejecuta lo siguiente: <NEO4J_HOME>\bin\neo4j
install-service.
Figura 5. Instalar servicio de Neo4j desde la consola de Windows.
Paso 2: comprueba que el servicio está funcionando.
Figura 6. Lista de servicios en Windows.
8.3. Conceptos generales
© Universidad Internacional de La Rioja (UNIR)
Los grafos son representaciones gráficas de entidades y sus relaciones. Los nodos
representan esas entidades y poseen propiedades que los describen (por ejemplo, el
nombre) (Lal, 2015). En el grafo de la imagen siguiente, cada nodo tiene un nombre y
está relacionado con otro a través de una flecha que muestra dicha relación (Hölsch et
al., 2017).
Bases de Datos para el Big Data
10
Tema 8. Ideas clave
Las relaciones también tienen múltiples propiedades, las cuales permiten organizar la
información asociada a los nodos (Guia et al., 2017; Webber y Robinson, 2018). Las
relaciones tienen una dirección (ver Figura 7), pero si se quisiera indicar
bidireccionalidad, es necesario crear dos relaciones en sentidos opuestos.
Figura 7. Representación gráfica de los elementos de Neo4j.
Nodos
Los grafos representan entidades y las relaciones entre ellas. Las entidades reciben el
nombre de nodos y cada nodo es muy similar a una instancia de un objeto (es decir, tiene
propiedades).
Relaciones
© Universidad Internacional de La Rioja (UNIR)
Las relaciones por su parte se conocen como vértices y también tienen propiedades,
siendo la dirección o sentido el más importante de ellos. Una relación conecta dos nodos
y los organiza en estructuras.
Bases de Datos para el Big Data
11
Tema 8. Ideas clave
De esta forma, un grafo puede mostrarse como una lista, un árbol, un mapa o una
entidad compuesta, con la posibilidad de combinarse en estructuras aún más complejas
y ricamente interconectadas (grandes y complejas redes de nodos).
Nodo y relaciones permiten organizar los datos de tal manera que sea posible encontrar
patrones de información existente entre dichos nodos (Webber y Robinson, 2018). Una
vez almacenados los datos, los grafos permitirán interpretar y generar información de
valor de diferentes formas, según las relaciones que los nodos tengan (ver Figura 8).
Figura 8. Representación gráfica de nodo y vértice.
Tipos de relaciones
Las relaciones tienen asociado un tipo de relación. En la base de datos de ejemplo de
Neo4j, las relaciones que se identifican son ACTED_IN y DIRECTED y se usan como tipos de
relación.
© Universidad Internacional de La Rioja (UNIR)
Figura 9. Representación de las relaciones de los nodos.
En la Figura 9 se muestra una relación saliente ACTED_IN (actuó en) con el nodo de «Tom
Hanks» como nodo de origen y «That Thing You Do» como nodo de destino. De igual
Bases de Datos para el Big Data
12
Tema 8. Ideas clave
forma, se puede observar cómo el nodo «Tom Hanks» tiene una relación saliente con el
mismo nodo «That Thing You Do» pero con otra connotación diferente: DIRECTED.
Toda relación siempre tendrá una dirección. La dirección que se tome en cuenta será la
que sea útil para el análisis que se quiere hacer. Esto significa que no es necesario agregar
relaciones duplicadas en la dirección opuesta a menos que sea necesario para describir
correctamente un caso de uso. Es importante tener presente que un nodo puede tener
relaciones consigo mismo.
Propiedades
Se ha dicho previamente que tanto nodos como relaciones poseen propiedades. Las
propiedades son pares de nombre-valor utilizados para agregar cualidades a los nodos y
las relaciones. En los grafos de ejemplo (ver imágenes) se han utilizado como propiedad
el nombre de las relaciones, el nombre del personaje en los nodos, el título de las
películas y el año, entre muchos otros.
El valor de la propiedad puede contener diferentes tipos de datos tales como números,
cadenas y booleanos (ver Figura 10).
© Universidad Internacional de La Rioja (UNIR)
Figura 10. Relaciones entre nodos y su visualización.
Bases de Datos para el Big Data
13
Tema 8. Ideas clave
Recorridos, rutas o caminos
Recorrer los nodos en función de sus relaciones es lo que se conoce como recorrido. Un
recorrido es similar a una consulta del grafo que busca encontrar alguna repuesta a
preguntas como: «¿Qué películas ha dirigido Tom Hanks?», «¿En qué películas Tom
Hanks, además de actuar, también ha dirigido? », «¿Qué otros actores han trabajado con
Tom Hanks en la película The Green Mile?».
Cuando se visitan los nodos siguiendo las relaciones y aplicando determinadas reglas,
realmente se atraviesa el grafo. Por lo general, no se atraviesa todo el grafo, sino un
subconjunto de él.
Si se quisiera saber en qué películas actuó Tom Hanks, si se observa la imagen anterior,
el recorrido comenzaría desde el nodo «Tom Hanks», seguiría cualquier relación
ACTED_IN conectada al nodo y terminaría con Forrest Gump o en todas aquellas películas
donde el actor haya actuado.
Esquema
En Neo4j el esquema hace referencia a los índices y restricciones que componen la base
de datos. En Neo4j el esquema es opcional, no es necesario crear índices y restricciones
sobre la base de datos creada. Incluso es posible crear nodos, relaciones y propiedades
sin definir previamente un esquema. Los índices y las restricciones se pueden añadir
posteriormente para optimizar el rendimiento de la base de datos y, por ende, del
modelo de dato definido.
© Universidad Internacional de La Rioja (UNIR)
Índices
Al igual que en los sistemas relacionales, los índices permiten aumentar el rendimiento
de las consultas a las bases de datos.
Bases de Datos para el Big Data
14
Tema 8. Ideas clave
Restricciones
Las restricciones permiten asegurar que los datos cumplan con las reglas del dominio
establecido para garantizar coherencia en el modelo.
Recomendaciones de nombres
En lo que respecta a las etiquetas de nodo, los tipos de relación y las propiedades, al igual
que Java, son sensibles al uso de mayúsculas y minúsculas. Revisa la tabla siguiente para
conocer las principales recomendaciones.
Entidades Estilos Ejemplos
Comenzar con un carácter :PropietarioVehiculo es mejor que
Etiqueta del nodo
en mayúscula. :propietario_vehiculo
Todo en mayúsculas usando
Tipo de relaciones :ACTUO_EN es mejor que :actuo_en
guion bajo.
Iniciar en minúscula y añadir
mayúscula al principio de las firstName es mejor que first_name o
Propiedades
siguientes palabas (sin que firstname
separador).
Tabla 1. Recomendaciones para crear elementos en Neo4j.
8.4. Graph Data Modelling
Como se comentó en otros apartados, Neo4j utiliza la representación de grafos para
almacenar y administrar sus datos (ver Figura 11). Los aspectos relevantes de cara al
© Universidad Internacional de La Rioja (UNIR)
modelo de datos son los siguientes:
El modelo de datos se representa con nodos (círculos), relaciones (flechas) y
propiedades.
Tanto los nodos como las relaciones contienen propiedades.
Bases de Datos para el Big Data
15
Tema 8. Ideas clave
Las propiedades también se representan como pares clave-valor.
Las relaciones tienen direcciones unidireccionales y bidireccionales.
En una relación siempre hay un «nodo de inicio» o «nodo desde» y un «nodo hasta»
o «nodo final».
Una relación conecta dos nodos.
Cuando se crean relaciones en Neo4j, siempre es necesario indicar una dirección, de lo
contrario el motor de base de datos arrojará un mensaje de error diciendo «las relaciones
deben ser direccionales». Ejemplo de imagen: si lo que se dice en el texto se puede
ilustrar con una imagen, la incluiremos con su correspondiente pie de imagen.
Figura 11. Representación de relaciones mediante grafos.
Al almacenar los datos, no es necesario utilizar otra base de datos SQL o NoSQL para
almacenar los datos de la base de datos de Neo4j. Toda la información se guarda en los
distintos elementos en su formato nativo. Neo4j utiliza Native GPE (motor de
procesamiento de grafos) para trabajar con su formato de almacenamiento de grafos
nativo (Fernandes y Bernardino, 2018).
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
16
Tema 8. Ideas clave
8.5. Interfaz Neo4j
A continuación, se describe la interfaz de la herramienta en su versión 4.2.x. Si observas
que no es similar a la que tienes instalada, es porque seguramente estás haciendo
pruebas con una versión diferente a la aquí estudiada.
La interfaz de Neo4j es web, y la pantalla de bienvenida se puede observar en la imagen
siguiente.
Figura 12. Consola web principal de Neo4j.
A continuación, se describen los principales elementos de la interfaz web.
1. Información de la base de datos: aquí podrás ver toda la información de las bases de
© Universidad Internacional de La Rioja (UNIR)
datos en Neo4j. Por defecto existen las bases de datos system y neo4j. Visualiza las
etiquetas de los nodos, las relaciones y sus tipos y las propiedades.
2. Favoritos: mostrará las consultas favoritas que hayas marcado como tal, una opción
para cargar consultas de ficheros o ejemplos de consultas que podrías utilizar.
3. Ayuda: permite acceder al manual de usuario de Neo4j y Cypher.
Bases de Datos para el Big Data
17
Tema 8. Ideas clave
4. Opciones de sincronización del buscador.
5. Configuración: permite modificar la apariencia de la web, preferencias de conexión,
las características de los datos visualizados y los grafos.
6. Información sobre Neo4j.
7. Línea de comandos principal para ejecutar las consultas con sus respectivas opciones.
Todas las consultas de Neo4j comienzan con dos puntos (:).
8. Línea de comando donde se muestra la consulta ejecutada cuyo resultado se muestra
en el área 10.
9. Controles de visualización del resultado de una consulta.
10. Área de visualización del resultado de la consulta.
Cualquier acción que realizamos en Neo4j se traduce en comando o instrucción, es por
ello que cuando ejecutes cualquier opción, podrás observar en la línea de comando
principal el comando equivalente.
En el área de visualización podrás observar el histórico de todas las operaciones o
consultas realizadas, así podrás recuperar la consulta lanzada y reutilizarla siempre que
así lo desees.
© Universidad Internacional de La Rioja (UNIR)
Figura 13. Partes de la consola web de Neo4j.
Bases de Datos para el Big Data
18
Tema 8. Ideas clave
8.6. CQL
El lenguaje de consulta utilizado en Neo4j es CQL o Cypher Query Language. Es un
lenguaje declarativo, que permite buscar coincidencia de patrones. Este sigue una
sintaxis similar a SQL, es legible y se puede organizar con determinadas como ocurre con
SQL.
CQL emplea comandos o instrucciones para manipular sus bases de datos. Admite
muchas cláusulas como WHERE y ORDER BY, entre otras, para escribir consultas complejas
de una forma fácil y, digamos, rápida. También permite usar funciones como string,
aggregation, así como algunas funciones de relación.
Tipos de datos
Tipo de dato Descripción
Boolean True/False
byte Enteros de 8 bit
short Enteros de 16 bit
int Enteros de 32 bit
long Enteros de 64 bit
float Números de 32 bit con punto flotante
doublé Números de 64 bit con punto flotante
char Caracteres de 16 bit
string String
© Universidad Internacional de La Rioja (UNIR)
Tabla 2. Tipos de datos en Neo4j.
Bases de Datos para el Big Data
19
Tema 8. Ideas clave
Operadores
Operador Descripción
Lógicos
AND Operación lógica
OR Operación lógica
NOT Operación lógica
XOR Operación lógica
Comparación
= Igualdad
<> Diferente
< Menor que
> Mayor que
<= y >= Menor igual que, mayor igual que
Otros
+, -, *, /, %, ^ Matemáticas
+ Uso de string
+, IN, [X], [X…..Y] Uso de listas
=_ Expresión regular
STARTS WITH, ENDS WITH,
Comparación de string
CONSTRAINTS
Tabla 3. Operadores en Neo4j.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
20
Tema 8. Ideas clave
Cláusulas de CQL
Cláusula Descripción
Lectura de datos
MATCH Especificar un patrón.
Especificar un patrón donde además es posible usar
OPTIONAL MATCH
nulos en caso de que el patrón carezca de partes.
WHERE Añadir contenido a las consultas CQL.
Se utiliza para encontrar los puntos de partida a través de
START
los índices heredados.
LOAD CSV Se usa para cargar datos desde un fichero CSV.
Escritura de datos
CREATE Permite crear nodos, relaciones y propiedades.
Comprueba si un patrón especificado existe en el grafo;
MERGE
en caso de que no, crea el patrón.
Permite actualizar etiquetas de nodos, relaciones y
SET
propiedades.
DELETE Permite borrar nodos, relaciones o rutas en el grafo.
Mediante las cláusulas CREATE y MATCH, es posible
CREATE UNIQUE obtener un patrón único al hacer coincidir el patrón
existente y crear el que falta.
REMOVE Permite borrar propiedades de los nodos y relaciones.
Permite actualizar los datos dentro de una lista (recorre
FOREACH
la lista).
Otras cláusulas
LIMIT Limita el resultado a un número de valores concreto.
Se utiliza para establecer desde qué fila comenzar a
SKIP
incluir las filas en la salida.
WITH Se utiliza para encadenar las partes de la consulta.
Se utiliza para definir qué incluir en el conjunto de
RETURN
resultados de la consulta.
Se utiliza junto con las cláusulas RETURN o WITH y
© Universidad Internacional de La Rioja (UNIR)
ORDER BY
permite organizar la salida de una consulta en orden.
UNWIND Permite expandir una lista en una secuencia de filas.
UNION Permite unir el resultado de múltiples consultas.
Permite llamar a un procedimiento almacenado en la
CALL
base de datos.
Tabla 4. Cláusulas de CQL en Neo4j.
Bases de Datos para el Big Data
21
Tema 8. Ideas clave
Funciones
String: se utiliza para manipular string.
Aggregation: se utiliza en determinadas operaciones de agregación.
Relationship: se utiliza para obtener información sobre relaciones (nodo inicio, nodo
fin, entre otros).
Construir un grafo con CQL
A continuación, utilizarás CQL para crear tu propio grafo y luego ejecutar sobre él
determinadas consultas que se irán proponiendo.
Instrucciones para la creación de nodos
CREATE (MiNodo): un nodo simple.
CREATE (MiNodo1), (MiNodo2): múltiples nodos.
CREATE (Andres:Persona): crea el nodo Andres con la etiqueta Persona.
CREATE (Andres:Persona:Padre:Hijo:Prestamista): crea el nodo Andres con las
etiquetas Persona, Padre, Hijo y Prestamista.
CREATE (Andres:Persona { name: “Andres Fabricio”, age: 21, nacionality:
“Spain” }): crea el nodo Andres con la etiqueta Persona y las propiedades name,
age y nacionality.
CREATE (Andres:Persona { name: “Andres Fabricio”, age: 21, nacionality:
© Universidad Internacional de La Rioja (UNIR)
“Spain” }) RETURN Andres: después de crear el nodo lo retorna para su
visualización.
MATCH (n) RETURN n: visualiza todos los nodos 𝑛 creados (cuidado: todos los nodos
creados).
Bases de Datos para el Big Data
22
Tema 8. Ideas clave
Ejercicio 1
Paso 1: ejecuta todas las instrucciones anteriores.
Paso 2: ejecuta esta otra instrucción:
CREATE (Eduardo:Persona{name:"Eduardo Puertas", age:45,
nacionality:"Español"}), (Camila:Persona{name:"Camila Corre", age:25,
nacionality:"Frances"})
Paso 3: visualiza todos los nodos.
El resultado debería ser parecido al siguiente:
Figura 14. Representación de nodos en Neo4j.
Crear relaciones
CREATE (Ana:Persona{name:"Ana Lana", age:25, nacionality:"Española"}),
© Universidad Internacional de La Rioja (UNIR)
(Pepe:Persona{name:"Pepe Rueda", age:25, nacionality:"Francés"})
CREATE (Ana)-[r:AMIGO_DE]->(Pepe)
Bases de Datos para el Big Data
23
Tema 8. Ideas clave
Para que la relación se cree utilizando los nombres de los nodos, la creación de estos
debe estar en la misma instrucción, es decir, se deben ejecutar los dos CREATE a la vez
en la línea principal (no copies, pegues y ejecutes cada instrucción CREATE por
separado).
Figura 15. Representación de relación entre nodos en Neo4j.
Otro ejemplo de creación de relación a partir de una MATCH:
MATCH (a:Persona), (b:Persona) WHERE [Link] = "Eduardo Puertas" AND [Link]
= "Camila Corre"
CREATE (a)-[r: AMIGO_DE]->(b)
RETURN a,b
Observa que, en este caso, a y b representan los nombres (que no se conocen) de los
nodos. Lo que sí se conoce de ellos son las etiquetas (:Persona). En el WHERE lo que se
hará es buscar los nodos por la propiedad name. Posteriormente se crea la relación
entre los nodos a y b una vez sean encontrados.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
24
Tema 8. Ideas clave
Figura 16. Representación de relación entre nodos y su consulta con CQL.
Otro ejemplo de creación de relación creando previamente y por separado los nodos
para relacionar:
Primero crea los nodos para relacionar:
CREATE (Po:Persona{name:"Po", age:43, nacionality:"Española"}),
(Alan:Persona{name:"Alambrito", age:31, nacionality:"Indio"})
Luego ejecuta la búsqueda y crea la relación entre los nodos recién creados:
MATCH (a:Persona), (b:Persona) WHERE [Link] = "Alambrito" AND [Link] =
"Po"
CREATE (a)-[r:AMIGO_DE {mejorAmigo: "Sí", debeSaldo: 190.50}]->(b)
RETURN a,b
© Universidad Internacional de La Rioja (UNIR)
Figura 17. Representación de relación entre nodos, su consulta con CQL y la visualización de las propiedades.
Bases de Datos para el Big Data
25
Tema 8. Ideas clave
Cláusula Match
MATCH (n) RETURN n: consulta todos los nodos.
MATCH (n:Persona) RETURN n: consulta todos los nodos con la etiqueta Persona.
MATCH (Pepe:Persona{name: "Pepe Rueda"})<-[: AMIGO_DE]-(n)
RETURN [Link]: retorna la lista de nodos cuya relación con Pepe:Persona es
AMIGO_DE.
MATCH (n) detach delete n: borra todos los nodos existentes.
Otras cláusulas
MATCH (n) RETURN [Link], [Link] ORDER BY [Link] ASC LIMIT 10
MATCH (n) RETURN [Link], [Link] ORDER BY [Link] ASC LIMIT toInt(3 *
rand())+ 1: uso de funciones dentro de las consultas.
MATCH (n) RETURN [Link], [Link] ORDER BY [Link] ASC SKIP 2
MATCH (n) WITH n ORDER BY [Link] ASC LIMIT 5 RETURN collect([Link]) :
devuelve el resultado de la consulta en forma de colección.
MATCH (Pepe:Persona{name: "Pepe Rueda"}) REMOVE [Link] RETURN
Pepe: remover una propiedad (age) del nodo.
MATCH (Pepe:Persona{name: "Pepe Rueda"}) REMOVE Pepe:Persona RETURN Pepe:
borrar la etiqueta de un nodo. Puede añadir más de una etiqueta separándolas
con dos puntos (:).
MATCH (Persona) WHERE [Link] = 25 RETURN Persona: la cláusula WHERE
permite acotar la consulta añadiendo condiciones.
MATCH (Persona) WHERE [Link] > 18 AND [Link] < 30 RETURN
Persona
Importante: MATCH (n) WHERE (n)-[: AMIGO_DE]->( {name: "Po"}) RETURN n :
consultar los amigos de Po (Persona).
© Universidad Internacional de La Rioja (UNIR)
Llegados a este punto, cuentas con suficientes nociones para revisar otra
documentación de Neo4j y, con ello, además de aprender más sobre las cláusulas
antes vistas, encontrarás muchas otras que quedan por descubrir y que te darán una
base sólida para trabajar con este tipo de bases de datos.
Bases de Datos para el Big Data
26
Tema 8. Ideas clave
Al final de este tema tienes varios enlaces que te serán útiles para emprender este
camino y mejorar tus conocimientos sobre esta forma de almacenar los datos.
Iniciar las bases de datos de ejemplo
Antes de comenzar a escribir tus propias consultas, es recomendable cargar y
visualizar algunas de las bases de datos que provee Neo4j como ejemplo. La más
conocida es la base de datos de películas, usada en las imágenes anteriores. Para ello,
visualice la guía de instalación escribiendo la siguiente instrucción:
$ :play movie graph
De inmediato se desplegarán las instrucciones para cargar la base de datos. Avanza
en los distintos pasos con el botón que se muestra a la derecha del panel visualizado.
A lo largo de cada paso, tendrás que ir ejecutando las distintas consultas que se te
proponen en pantalla. No te dejes ninguna sin ejecutar y procura seguir el orden
propuesto por la interfaz.
Figura 18. Carga de datos de ejemplo en Neo4j (Movie).
© Universidad Internacional de La Rioja (UNIR)
Otro ejemplo de base de datos es el siguiente:
$ :play northwind graph
Bases de Datos para el Big Data
27
Tema 8. Ideas clave
Figura 19. Carga de datos de ejemplo en Neo4j (Northwind).
Recuerda avanzar a través de los distintos pasos e ir ejecutando las instrucciones
propuestas en el mismo orden.
© Universidad Internacional de La Rioja (UNIR)
Figura 20. Instrucciones de carga de datos de ejemplo en Neo4j.
Bases de Datos para el Big Data
28
Tema 8. Ideas clave
8.7. Visualización de grafos
La principal característica de Neo4j es su modo de visualizar los datos y las relaciones
que existen entre ellos. El uso de nodos y relaciones permite modelar fácilmente los
datos y presentarlos de una forma que tanto los desarrolladores, los analistas y los
de negocio puedan entender por igual.
La visualización de grafos potencia esta capacidad de Neo4j permitiendo dibujar el
gráfico en varios formatos para que los usuarios puedan interactuar con los datos de
una manera más fácil.
Con las herramientas de visualización, un grafo completo o parcial puede cobrar vida
y permitir al usuario explorarlo, estableciendo varias reglas o vistas para analizarlo
desde diferentes perspectivas.
Existe una variedad de herramientas de código abierto que permiten esta
manipulación de los grafos. Cada herramienta proporciona determinadas
capacidades, por ello debes elegir la que más se adapte a las necesidades del caso de
uso.
Formatos del grafo
Hay una variedad de formatos a la hora de visualizar los datos en Neo4j. Los
resultados de una consulta se pueden guardar como JSON, XML, formatos tabulares
y formato visual. Este último proporciona un valor adicional para los analistas de
datos y los usuarios de negocio, así como para el resto de los usuarios.
© Universidad Internacional de La Rioja (UNIR)
En el ejemplo siguiente, de forma visual y casi inmediata, es posible describir los datos
que se muestran, porque se observan directamente las relaciones y los nodos que
componen el resultado de la consulta.
Bases de Datos para el Big Data
29
Tema 8. Ideas clave
Figura 21. Visualización de grafos en Neo4j.
Neo4j tiene dos herramientas de visualización principales que están construidas y
diseñadas para trabajar específicamente con datos en la base de datos de grafos de
Neo4j: Neo4j Browser y Neo4j Bloom.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
30
Tema 8. Ideas clave
Neo4j Browser
Está pensada para que los desarrolladores puedan ejecutar sus consultas Cypher y
visualizar los resultados de forma inmediata y con la posibilidad de hacerlo desde
cualquier ordenador o navegador. Las versiones Enterprise y Community integran
esta interfaz de visualización.
También proporciona algunas funciones para diseñar con colores y tamaños según
las etiquetas de los nodos y los tipos de relaciones, permitiendo al usuario
personalizar sus propios estilos importando un archivo GRASS (hoja de estilo de
grafos). Asimismo, facilita la exportación del grafo a formatos PNG, SVG o CSV.
Figura 22. Información de la base de datos en Neo4j desde la web.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
31
Tema 8. Ideas clave
Neo4j Bloom
Otro producto externo a Neo4j que permite la visualización de grafos es Bloom.
Opera con licencia comercial o de forma gratuita con Neo4j Desktop siempre que sea
un único usuario el que lo use. Bloom fue diseñada para que los analistas de negocios
y otros no desarrolladores interactúen con los datos almacenados en la base de datos
de gráficos sin escribir ningún código.
Los usuarios pueden utilizar el lenguaje natural para consultar la base de datos y
explorar patrones, clústeres y recorridos en sus datos gráficos. Permite, a su vez,
crear diferentes disecciones del gráfico (perspectivas) que permiten a los usuarios ver
diferentes aspectos y porciones de datos del gráfico para su posterior análisis.
Consulta la documentación oficial de Neo4j para encontrar referencias sobre esta
herramienta, su enlace aquí.
© Universidad Internacional de La Rioja (UNIR)
Figura 23. Visualización de la base de datos creada de la web de Neo4j.
Consulta aquí más herramientas útiles para la visualización de los grafos.
Bases de Datos para el Big Data
32
Tema 8. Ideas clave
8.8. Caso práctico
El siguiente caso práctico está relacionado con el análisis de datos para la detección
de fraude. Para ello, el estudiante irá ejecutando una serie de instrucciones con el fin
de mostrarle cómo es posible construir un escenario donde, a través de CQL, se
pueden ejecutar consultas que buscan relaciones o patrones en los datos con
características puntuales, en este caso: indicios de fraude con tarjetas de crédito.
Importante: la idea principal de este ejemplo fue tomado de la base de casos públicos
de Neo4j. El autor de este caso en concreto es Jean Villedieu.
¡Manos a la obra!
Paso 1: con las siguientes instrucciones crea los nodos Persona necesarios para el
análisis.
CREATE (Pablo:Persona {id:'1', nombre:'Pablo', sexo:'hombre', edad:'50'})
CREATE (Jairo:Persona {id:'2', nombre:'Jairo', sexo:'hombre', edad:'48'})
CREATE (Daniel:Persona {id:'3', nombre:'Daniel', sexo:'hombre',
edad:'23'})
CREATE (Marcos:Persona {id:'4', nombre:'Marcos', sexo:'hombre',
edad:'30'})
CREATE (John:Persona {id:'5', nombre:'John', sexo:'hombre', edad:'31'})
CREATE (Zoila:Persona {id:'6', nombre:'Zoila', sexo:'mujer', edad:'52'})
CREATE (Maria:Persona {id:'7', nombre:'Maria', sexo:'mujer', edad:'23'})
CREATE (Isabel:Persona {id:'8', nombre:'Isabel', sexo:'mujer', edad:'58'})
CREATE (Patricia:Persona {id:'9', nombre:'Patricia', sexo:'mujer',
edad:'51'})
© Universidad Internacional de La Rioja (UNIR)
CREATE (Marina:Persona {id:'10', nombre:'Marina', sexo:'mujer',
edad:'37'})
Bases de Datos para el Big Data
33
Tema 8. Ideas clave
Paso 2: con las siguientes instrucciones crea los nodos Comercio.
CREATE (Amazon:Comercio {id:'11', nombre:'Amazon', calle:'2626 Wilkinson
Court', direccion:'San Bernardino, CA 92410'})
CREATE (Abercrombie:Comercio {id:'12', nombre:'Abercrombie', calle:'4355
Walnut Street', edad:'San Bernardino, CA 92410'})
CREATE (Wallmart:Comercio {id:'13', nombre:'Wallmart', calle:'2092 Larry
Street', edad:'San Bernardino, CA 92410'})
CREATE (MacDonalds:Comercio {id:'14', nombre:'MacDonalds', calle:'1870
Caynor Circle', edad:'San Bernardino, CA 92410'})
CREATE (American_Apparel:Comercio {id:'15', nombre:'American Apparel',
calle:'1381 Spruce Drive', edad:'San Bernardino, CA 92410'})
CREATE (Just_Brew_It:Comercio {id:'16', nombre:'Just Brew It', calle:'826
Anmoore Road', edad:'San Bernardino, CA 92410'})
CREATE (Justice:Comercio {id:'17', nombre:'Justice', calle:'1925 Spring
Street', edad:'San Bernardino, CA 92410'})
CREATE (Sears:Comercio {id:'18', nombre:'Sears', calle:'4209 Elsie Drive',
edad:'San Bernardino, CA 92410'})
CREATE (Soccer_for_the_City:Comercio {id:'19', nombre:'Soccer for the City',
calle:'86 D Street', edad:'San Bernardino, CA 92410'})
CREATE (Sprint:Comercio {id:'20', nombre:'Sprint', calle:'945 Kinney
Street', edad:'San Bernardino, CA 92410'})
CREATE (Starbucks:Comercio {id:'21', nombre:'Starbucks', calle:'3810 Apple
Lane', edad:'San Bernardino, CA 92410'})
CREATE (Subway:Comercio {id:'22', nombre:'Subway', calle:'3778 Tenmile
Road', edad:'San Bernardino, CA 92410'})
CREATE (Apple_Store:Comercio {id:'23', nombre:'Apple Store', calle:'349 Bel
Meadow Drive', edad:'Kansas City, MO 64105'})
CREATE (Urban_Outfitters:Comercio {id:'24', nombre:'Urban Outfitters',
calle:'99 Strother Street', edad:'Kansas City, MO 64105'})
CREATE (RadioShack:Comercio {id:'25', nombre:'RadioShack', calle:'3306
Douglas Dairy Road', edad:'Kansas City, MO 64105'})
CREATE (Macys:Comercio {id:'26', nombre:'Macys', calle:'2912 Nutter Street',
© Universidad Internacional de La Rioja (UNIR)
edad:'Kansas City, MO 64105'})
Bases de Datos para el Big Data
34
Tema 8. Ideas clave
Paso 3: crea las siguientes relaciones entre personas y comercios.
CREATE (Pablo)-[:COMPRO_EN {pago:'986', fecha:'4/17/2014', estado:
'Indiscutible'}]->(Just_Brew_It)
CREATE (Pablo)-[:COMPRO_EN {pago:'239', fecha:'5/15/2014', estado:
'Indiscutible'}]->(Starbucks)
CREATE (Pablo)-[:COMPRO_EN {pago:'475', fecha:'3/28/2014', estado:
'Indiscutible'}]->(Sears)
CREATE (Pablo)-[:COMPRO_EN {pago:'654', fecha:'3/20/2014', estado:
'Indiscutible'}]->(Wallmart)
CREATE (Jairo)-[:COMPRO_EN {pago:'196', fecha:'7/24/2014', estado:
'Indiscutible'}]->(Soccer_for_the_City)
CREATE (Jairo)-[:COMPRO_EN {pago:'502', fecha:'4/9/2014', estado:
'Indiscutible'}]->(Abercrombie)
CREATE (Jairo)-[:COMPRO_EN {pago:'848', fecha:'5/29/2014', estado:
'Indiscutible'}]->(Wallmart)
CREATE (Jairo)-[:COMPRO_EN {pago:'802', fecha:'3/11/2014', estado:
'Indiscutible'}]->(Amazon)
CREATE (Jairo)-[:COMPRO_EN {pago:'203', fecha:'3/27/2014', estado:
'Indiscutible'}]->(Subway)
CREATE (Daniel)-[:COMPRO_EN {pago:'35', fecha:'1/23/2014', estado:
'Indiscutible'}]->(MacDonalds)
CREATE (Daniel)-[:COMPRO_EN {pago:'605', fecha:'1/27/2014', estado:
'Indiscutible'}]->(MacDonalds)
CREATE (Daniel)-[:COMPRO_EN {pago:'62', fecha:'9/17/2014', estado:
'Indiscutible'}]->(Soccer_for_the_City)
CREATE (Daniel)-[:COMPRO_EN {pago:'141', fecha:'11/14/2014', estado:
'Indiscutible'}]->(Amazon)
CREATE (Marcos)-[:COMPRO_EN {pago:'134', fecha:'4/14/2014', estado:
'Indiscutible'}]->(Amazon)
CREATE (Marcos)-[:COMPRO_EN {pago:'336', fecha:'4/3/2014', estado:
'Indiscutible'}]->(American_Apparel)
CREATE (Marcos)-[:COMPRO_EN {pago:'964', fecha:'3/22/2014', estado:
© Universidad Internacional de La Rioja (UNIR)
'Indiscutible'}]->(Wallmart)
CREATE (Marcos)-[:COMPRO_EN {pago:'430', fecha:'8/10/2014', estado:
'Indiscutible'}]->(Sears)
CREATE (Marcos)-[:COMPRO_EN {pago:'11', fecha:'9/4/2014', estado:
'Indiscutible'}]->(Soccer_for_the_City)
Bases de Datos para el Big Data
35
Tema 8. Ideas clave
CREATE (John)-[:COMPRO_EN {pago:'545', fecha:'10/6/2014', estado:
'Indiscutible'}]->(Soccer_for_the_City)
CREATE (John)-[:COMPRO_EN {pago:'457', fecha:'10/15/2014', estado:
'Indiscutible'}]->(Sprint)
CREATE (John)-[:COMPRO_EN {pago:'468', fecha:'7/29/2014', estado:
'Indiscutible'}]->(Justice)
CREATE (John)-[:COMPRO_EN {pago:'768', fecha:'11/28/2014', estado:
'Indiscutible'}]->(American_Apparel)
CREATE (John)-[:COMPRO_EN {pago:'921', fecha:'3/12/2014', estado:
'Indiscutible'}]->(Just_Brew_It)
CREATE (Zoila)-[:COMPRO_EN {pago:'740', fecha:'12/15/2014',
estado:'Indiscutible'}]->(MacDonalds)
CREATE (Zoila)-[:COMPRO_EN {pago:'510', fecha:'11/27/2014',
estado:'Indiscutible'}]->(Abercrombie)
CREATE (Zoila)-[:COMPRO_EN {pago:'414', fecha:'1/20/2014',
estado:'Indiscutible'}]->(Just_Brew_It)
CREATE (Zoila)-[:COMPRO_EN {pago:'721', fecha:'7/17/2014',
estado:'Indiscutible'}]->(Amazon)
CREATE (Zoila)-[:COMPRO_EN {pago:'353', fecha:'10/25/2014',
estado:'Indiscutible'}]->(Subway)
CREATE (Maria)-[:COMPRO_EN {pago:'681', fecha:'12/28/2014',
estado:'Indiscutible'}]->(Sears)
CREATE (Maria)-[:COMPRO_EN {pago:'87', fecha:'2/19/2014',
estado:'Indiscutible'}]->(Wallmart)
CREATE (Maria)-[:COMPRO_EN {pago:'533', fecha:'8/6/2014',
estado:'Indiscutible'}]->(American_Apparel)
CREATE (Maria)-[:COMPRO_EN {pago:'723', fecha:'1/8/2014',
estado:'Indiscutible'}]->(American_Apparel)
CREATE (Maria)-[:COMPRO_EN {pago:'627', fecha:'5/20/2014',
estado:'Indiscutible'}]->(Just_Brew_It)
CREATE (Isabel)-[:COMPRO_EN {pago:'74', fecha:'9/4/2014',
estado:'Indiscutible'}]->(Soccer_for_the_City)
CREATE (Isabel)-[:COMPRO_EN {pago:'231', fecha:'7/12/2014',
© Universidad Internacional de La Rioja (UNIR)
estado:'Indiscutible'}]->(Wallmart)
CREATE (Isabel)-[:COMPRO_EN {pago:'924', fecha:'10/4/2014',
estado:'Indiscutible'}]->(Soccer_for_the_City)
CREATE (Isabel)-[:COMPRO_EN {pago:'742', fecha:'8/12/2014',
estado:'Indiscutible'}]->(Just_Brew_It)
CREATE (Patricia)-[:COMPRO_EN {pago:'276', fecha:'12/24/2014',
estado:'Indiscutible'}]->(Soccer_for_the_City)
Bases de Datos para el Big Data
36
Tema 8. Ideas clave
CREATE (Patricia)-[:COMPRO_EN {pago:'66', fecha:'4/16/2014',
estado:'Indiscutible'}]->(Starbucks)
CREATE (Patricia)-[:COMPRO_EN {pago:'467', fecha:'12/23/2014',
estado:'Indiscutible'}]->(MacDonalds)
CREATE (Patricia)-[:COMPRO_EN {pago:'830', fecha:'3/13/2014',
estado:'Indiscutible'}]->(Sears)
CREATE (Patricia)-[:COMPRO_EN {pago:'240', fecha:'7/9/2014',
estado:'Indiscutible'}]->(Amazon)
CREATE (Patricia)-[:COMPRO_EN {pago:'164', fecha:'12/26/2014',
estado:'Indiscutible'}]->(Soccer_for_the_City)
CREATE (Marina)-[:COMPRO_EN {pago:'630', fecha:'10/6/2014',
estado:'Indiscutible'}]->(MacDonalds)
CREATE (Marina)-[:COMPRO_EN {pago:'19', fecha:'7/29/2014',
estado:'Indiscutible'}]->(Abercrombie)
CREATE (Marina)-[:COMPRO_EN {pago:'352', fecha:'12/16/2014',
estado:'Indiscutible'}]->(Subway)
CREATE (Marina)-[:COMPRO_EN {pago:'147', fecha:'8/3/2014',
estado:'Indiscutible'}]->(Amazon)
CREATE (Marina)-[:COMPRO_EN {pago:'91', fecha:'6/29/2014',
estado:'Indiscutible'}]->(Wallmart)
CREATE (Pablo)-[:COMPRO_EN {pago:'1021', fecha:'7/18/2014',
estado:'Cuestionable'}]->(Apple_Store)
CREATE (Pablo)-[:COMPRO_EN {pago:'1732', fecha:'5/10/2014',
estado:'Cuestionable'}]->(Urban_Outfitters)
CREATE (Pablo)-[:COMPRO_EN {pago:'1415', fecha:'4/1/2014',
estado:'Cuestionable'}]->(RadioShack)
CREATE (Pablo)-[:COMPRO_EN {pago:'1849', fecha:'12/20/2014',
estado:'Cuestionable'}]->(Macys)
CREATE (Marcos)-[:COMPRO_EN {pago:'1914', fecha:'7/18/2014',
estado:'Cuestionable'}]->(Apple_Store)
CREATE (Marcos)-[:COMPRO_EN {pago:'1424', fecha:'5/10/2014',
estado:'Cuestionable'}]->(Urban_Outfitters)
CREATE (Marcos)-[:COMPRO_EN {pago:'1721', fecha:'4/1/2014',
© Universidad Internacional de La Rioja (UNIR)
estado:'Cuestionable'}]->(RadioShack)
CREATE (Marcos)-[:COMPRO_EN {pago:'1003', fecha:'12/20/2014',
estado:'Cuestionable'}]->(Macys)
CREATE (Isabel)-[:COMPRO_EN {pago:'1149', fecha:'7/18/2014',
estado:'Cuestionable'}]->(Apple_Store)
CREATE (Isabel)-[:COMPRO_EN {pago:'1152', fecha:'8/10/2014',
estado:'Cuestionable'}]->(Urban_Outfitters)
Bases de Datos para el Big Data
37
Tema 8. Ideas clave
CREATE (Isabel)-[:COMPRO_EN {pago:'1884', fecha:'8/1/2014',
estado:'Cuestionable'}]->(RadioShack)
CREATE (Isabel)-[:COMPRO_EN {pago:'1790', fecha:'12/20/2014',
estado:'Cuestionable'}]->(Macys)
CREATE (Marina)-[:COMPRO_EN {pago:'1925', fecha:'7/18/2014',
estado:'Cuestionable'}]->(Apple_Store)
CREATE (Marina)-[:COMPRO_EN {pago:'1374', fecha:'7/10/2014',
estado:'Cuestionable'}]->(Urban_Outfitters)
CREATE (Marina)-[:COMPRO_EN {pago:'1368', fecha:'7/1/2014',
estado:'Cuestionable'}]->(RadioShack)
CREATE (Marina)-[:COMPRO_EN {pago:'1816', fecha:'12/20/2014',
estado:'Cuestionable'}]->(Macys)
Paso 4: ejecuta la siguiente instrucción. ¿Funciona? ¿Qué arroja la consulta?
MATCH (victima:Persona)-[r:COMPRO_EN]->(comercio)
WHERE [Link] = "Cuestionable"
RETURN [Link] AS `Cliente `, [Link] AS `Tienda`, [Link] AS
Pago, [Link] AS `Fecha Transaccion`
ORDER BY ` Fecha Transaccion` DESC
Paso 5: ejecuta la siguiente instrucción. ¿Funciona? ¿Qué arroja esta otra consulta?
MATCH (victima:Persona)-[r:COMPRO_EN]->(comercio)
WHERE [Link] = "Cuestionable"
MATCH (victima)-[t:COMPRO_EN]->(otrocomercio)
WHERE [Link] = "Indiscutible" AND [Link] < [Link]
WITH victima, otrocomercio, t ORDER BY [Link] DESC
RETURN [Link] AS `Cliente`, [Link] AS `Tienda `, [Link]
AS Pago, [Link] AS `Fecha Transaccion `
ORDER BY ` Fecha Transaccion` DESC
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
38
Tema 8. Ideas clave
Paso 6: ejecuta la siguiente instrucción. ¿Funciona? ¿Qué arroja esta otra consulta?
MATCH (victima:Persona)-[r:COMPRO_EN]->(comercio)
WHERE [Link] = "Cuestionable"
MATCH (victima)-[t:COMPRO_EN]->(otrocomercio)
WHERE [Link] = "Indiscutible" AND [Link] < [Link]
WITH victima, otrocomercio, t ORDER BY [Link] DESC
RETURN DISTINCT [Link] AS `Tienda Sospechosa`, count(DISTINCT
t) AS Count, collect(DISTINCT [Link]) AS Victimas
ORDER BY Count DESC
Comparte tu avance con el resto de la clase, para ello publica en el Foro de la
asignatura (en un único mensaje) tu interpretación de cada una de las consultas.
Después de leer todo el tema, accede a la lección titulada «Uso de Neo4j». En ella se
hace un repaso sobre los aspectos más relevantes de la base de datos de grafos y
sobre Neo4j. Mediante un caso práctico se describen los nodos, las relaciones y las
propiedades.
Vídeo 1. Uso de Neo4j.
Accede al vídeo a través del aula virtual
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
39
Tema 8. Ideas clave
8.9. Referencias bibliográficas
Fernandes, D., y Bernardino, J. (2018). Graph Databases Comparison: AllegroGraph,
ArangoDB, InfiniteGraph, Neo4j, and OrientDB. En J. Bernardino y C. Quix
(eds.), Proceedings of the 7th International Conference on Data Science,
Technology and Applications (DATA 2018) (pp. 373-380). SCITEPRESS.
Guia, J., Gonçalves, V., y Bernardino, J. (2017). Graph databases: Neo4j analysis. En S.
Hammoudi, M. Smialek, O. Camp y J. Filipe (eds.), Proceedings of the 19th
International Conference on Enterprise Information Systems (Volume 3) (pp.
351-356). ICEIS.
Hölsch, J., Schmidt, T., y Grossniklaus, M. (2017). On the performance of analytical
and pattern matching graph queries in Neo4j and a relational database. En
EDBT/ICDT 2017 Joint Conference: 6th International Workshop on Querying
Graph Structured Data (GraphQ).
[Link]
Lal, M. (2015). Neo4j graph data modeling. Packt Publishing.
Webber, J., y Robinson, I. (2018). A programmatic introduction to Neo4j. Addison-
Wesley Professional.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
40
Tema 8. Ideas clave
A fondo
Documentación oficial de Neo4j: características generales de la base de datos
Neo4j. (2021). The Neo4j Getting Started Guide v4.2. Neo4j docs [Página web].
[Link]
Neo4j es una base de datos que cuenta con una documentación bastante completa y
detallada. En su página web la documentación de la herramienta se enfoca en tres
aspectos claves: introducción a Neo4j, conceptos de grafos y el lenguaje de consultas
CQL.
Tutorial de Neo4j. Introducción: grahp database
Tutorialspoint. (2021). Learn Neo4j: graph database [Página web].
[Link]
El equipo de Tutorialspoint tiene en su sitio web un tutorial bastante completo de
Neo4j, el cual cuenta con muchos ejemplos prácticos que permiten conocer la
herramienta de forma amena y sencilla.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
41
Tema 8. A fondo
Introduction to Neo4j: a hands-on crash course
Neo4j. (26 de noviembre de 2020). Intro to Neo4j for Developers with Lju [Archivo de
vídeo]. [Link]
En el siguiente vídeo es posible ver una introducción a Neo4j y al uso de grafos para
representar la información. El vídeo lo ha elaborado parte del equipo de
desarrolladores de Neo4j.
Casos de uso basados en Neo4j: puesta en práctica de la teoría de grafos en
escenarios de negocio
Neo4j. (2021). Graph Database Use Cases [Página web]. [Link]
La mejor manera de comprender el uso que se le puede dar a las bases de datos de
grafos es mediante ejemplos de casos que muestren el potencial de este tipo de
herramientas. La web oficial de Neo4j dispone de varios casos de uso que pueden ser
analizados para aprender el dominio de los grafos. Consulta dichos casos y explora
© Universidad Internacional de La Rioja (UNIR)
los datos y consultas que utilizan para sacar partido a la información representada
con nodos, relaciones y propiedades.
Bases de Datos para el Big Data
42
Tema 8. A fondo
Graph Databases: libro oficial recomendado por Neo4j para el estudio de grafos
Neo4j. (2021). Neo4j Download Center [Página web]. [Link]
center/#community
Uno de los mejores libros para aprender el concepto de grafos y la
utilidad que tienen este tipo de representación de los datos dentro de
distintos casos de uso en las organizaciones. Es posible obtener el libro
al descargar Neo4j Community.
Bibliografía
Vukotic, A., Watt, N., Abedrabbo, T., Fox, D., & Partner, J. (2015). Neo4j in action (Vol.
22). Shelter Island: Manning.
Kokash, N., Romanello, M., Suyver, E., & Colavizza, G. (2022). From Books to
Knowledge Graphs. arXiv preprint arXiv:2204.10766.
Frisendal, T. (2018). Using GraphQL with an Existing Graph Database. En Visual Design
of GraphQL Data (pp. 81-91). Apress, Berkeley, CA.
Needham, M., & Hodler, A. E. (2019). Graph algorithms: practical examples in Apache
Spark and Neo4j. O'Reilly Media.
Jyothi, D. N. (2020). Book Recommendation System using Neo4j Graph Database. The
International Journal of Analytical and Experimental Modal Analysis, 12(6),
© Universidad Internacional de La Rioja (UNIR)
498-504.
Bases de Datos para el Big Data
43
Tema 8. A fondo
Test
1. ¿Cuáles son los principales componentes de un grafo?
A. El esquema, los nodos, las relaciones y las propiedades.
B. Nodos, relaciones y propiedades.
C. Nodos y relaciones, las propiedades están implícitas en cada uno.
D. Ninguna de las anteriores es correcta.
Un grafo se representa principalmente por nodos, relaciones y propiedades. Otros
elementos, como los esquemas, son propios del concepto de base de datos.
2. ¿Qué afirmación define las características principales del modelo de grafos?
A. El modelo representa datos en nodos, relaciones y propiedades.
B. Las propiedades son pares clave-valor.
C. Las relaciones conectan los nodos.
D. Todas las anteriores son correctas.
Todas las afirmaciones definen las características de Neo4j vistas en este tema.
3. ¿Qué es CQL?
A. El lenguaje de consulta para Neo4j Graph Database.
B. Un lenguaje para insertar y borrar nodos y relaciones.
C. Un lenguaje enfocado a encontrar solo nodos dentro de un grafo.
D. Todas las afirmaciones anteriores son correctas.
CQL o Cypher Query Language es el lenguaje que utiliza Neo4j para la manipulación
de grafos.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
44
Tema 8. Test
4. ¿Qué hace la siguiente instrucción: MATCH ( n ) DETACH DELETE n?
A. Limpia la base de datos.
B. Borra todos los nodos y relaciones de la base de datos.
C. Borra solo los nodos existentes.
D. Borra los nodos y sus propiedades.
Cuidado, esta instrucción borra tanto nodos como relaciones de la base de datos. De
igual forma, incluye las propiedades de ambos elementos.
5. La cláusula que borra etiquetas y propiedades es:
A. DELETE.
B. UNWIND.
C. REMOVE.
D. DROP.
REMOVE permite eliminar tanto las etiquetas como las propiedades de nodos y
relaciones. DELETE borra nodos o relaciones y DROP no existe en Neo4j.
6. ¿Qué significa n en la siguiente instrucción: MATCH ( n ) RETURN [Link], [Link]
ORDER BY [Link]?
A. Cualquier nodo y relación.
B. Cualquier nodo.
C. Cualquier relación con las propiedades name y runs.
D. Los nodos cuya propiedad name tiene un valor.
n representa cualquier nodo relacionado con otros nodos.
7. ¿La instruction MATCH ( n ) RETURN [Link] order by [Link] qué retorna?
A. Un grafo con los nodos n.
B. Un listado.
© Universidad Internacional de La Rioja (UNIR)
C. Un listado y un grafo.
D. Una lista ordenada de las propiedades nombre de todos los nodos.
Al igual que en SQL, order by ordena un resultado, en este caso el retorno en la lista
de nombres ordenada ascendentemente por defecto.
Bases de Datos para el Big Data
45
Tema 8. Test
8. ¿La instrucción CREATE (Pepe)-[r:CANTA_EN{name=”Padro”}]-(Concierto) genera
algún tipo de error al ser ejecutada?
A. No, crea los nodos Pepe y Concierto y su relación CANTA_EN.
B. Sí, la propiedad de la relación es incorrecta.
C. Sí, no se indica una dirección o sentido de la relación.
D. Todas las respuestas anteriores son correctas.
Siempre es necesario indicar el sentido de la relación. Si este no se indica, Neo4j
genera un error preguntando por esta definición.
9. La instrucción CREATE (Juan)-[r:HIJO_DE]->(Alma) crea:
A. Los nodos Juan y Alma y una relación entre ellos llamada HIJO_DE.
B. Una relación entre los nodos Juan y Alma llamada HIJO_DE.
C. Una relación saliente de Juan hacia Ana llamada HIJO_DE.
D. Ninguna de las anteriores es correcta
Juan y Alma son nodos, aunque existan se crearán dichos nodos y ambos se le
asignará la relación HIJO_DE.
10. Indica qué hace la siguiente instrucción: MATCH (a:Jugador), (b:Juego) WHERE
[Link] = "Rabino" AND [Link] = "Casino" CREATE (a)-[r:TRABAJA_EN
{partida:1, victorias:5}]->(b) RETURN a,b
A. Crea los nodos a y b y asigna la relación TRABAJA_EN.
B. Crea la relación TRABAJA_EN sobre los nodos a y b.
C. Busca los nodos a y b que cumplan la condición del WHERE y luego asigna la
relación TRABAJA_EN entre ellos.
D. Todas las respuestas anteriores son correctas.
Al ejecutarse juntas MATCH y CREATE, los nodos que cumplan la condición WHERE
serán quienes reciban la relación que se indica en el CREATE.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
46
Tema 8. Test
Tema 9
Bases de Datos para el Big Data
Redis
Índice
Esquema 3
Ideas clave 4
9.1. Introducción y objetivos 4
9.2. Conceptos generales 5
9.3. Modelo de datos, estructura y módulos 8
© Universidad Internacional de La Rioja (UNIR)
9.4. Arquitectura y topología 18
9.5. Despliegue en Docker 20
9.6. Drivers 25
9.7. Referencias bibliográficas 27
A fondo 28
Test 30
© Universidad Internacional de La Rioja (UNIR)
Redis
Definición Principales conceptos Redis-cli
Clúster, nodo, tipos de datos, estructuras y
Redis es un popular servidor Base de datos multimodelo:
módulos
de bases de datos de - Redis proporciona una funcionalidad completa de
múltiples modelos. Redis va varios modelos a través de sus módulos. El uso de
más allá de la base de datos Redis como una base de datos de múltiples modelos
NoSQL para proporcionar permite una mayor flexibilidad para los desarrolladores
varias capacidades de aplicaciones dentro de una organización.
avanzadas que necesitan las
aplicaciones modernas.
Almacenamiento en memoria:
- Redis mantiene los datos en la memoria para un acceso
Base de datos NoSQL de tipo rápido y persiste los datos en el almacenamiento, así
clave-valor en memoria como la replicación de los contenidos en la memoria
para escenarios de producción de alta disponibilidad.
Cómo aplica el teorema CAP
Estructuras de datos Módulos
Los principales elementos Casos de uso/estructura: ‒ Strings. ‒ Redis Graph.
del modelo de datos Redis - Cada estructura de datos tiene un caso de uso o
son: ‒ Lists. ‒ RedisSearch.
escenario diferente para el que se adapta mejor.
- Tipos de datos. - Además de las estructuras de datos, Redis también ‒ Sets. ‒ Redis TimeSeries.
admite el patrón Publicar/Suscribir (Pub/Sub) y ‒ Sorted sets. ‒ RedisJSON.
- Estructuras.
patrones adicionales que hacen que sea adecuada para
- Módulos. ‒ Hashes.
aplicaciones modernas con uso intensivo de datos.
‒ Bit arrays. Drivers
‒ Streams. Python, Java, PHP,
‒ HyperLogLogs. NodeJS, C, C#.
Instalación entorno de test con Docker
Bases de Datos para el Big Data
Tema 9. Esquema
Esquema
3
Ideas clave
9.1. Introducción y objetivos
Este tema es una guía de introducción para entender el funcionamiento de Redis y
conocer por qué es tan popular como base de datos NoSQL. Para estudiar este tema,
debes leer las Ideas clave y, si deseas información adicional sobre un concepto
específico, puedes consultar las lecturas citadas en «Referencias bibliográficas».
Para darle un enfoque práctico a este tema, se recomienda llevar a cabo la instalación
y configuración de la herramienta en un entorno local. Para ello, sigue las
instrucciones del apartado 9.5 y luego continúa con los otros apartados propuestos.
Conforme vayas viendo los distintos comandos podrás ponerlos en práctica en tu
propia instalación de Redis.
Los objetivos que se pretenden conseguir con este tema son los siguientes:
Conocer los conceptos más generales que describen las características de la base
de datos Redis y su funcionamiento.
Entender la arquitectura y cómo esta provee de sencillez al motor de base de datos
para integrarse con otras herramientas.
Repasar las principales estructuras de datos, que son clave en el buen desempeño
de Redis como base de datos NoSQL en memoria.
Comprender los distintos escenarios donde Redis se adapta para dar solución a
aquellos casos donde el acceso al dato debe ser inmediato.
© Universidad Internacional de La Rioja (UNIR)
Aprender a instalar Redis y a configurar de forma básica un servidor local de
pruebas con una base de datos operativa sobre la que trabajar.
Bases de Datos para el Big Data
4
Tema 9. Ideas clave
9.2. Conceptos generales
Redis surgió como un simple diccionario remoto (REmote DIctionary Server).
Actualmente se define como una base de datos multimodelo que permite búsquedas,
mensajería, transmisión, gráficos y otras funcionalidades más que superan su definición
de almacén de datos. Dentro del gran número de bases de datos NoSQL se encuentra
Redis como una de las más populares y más utilizada dentro de la tipología de bases de
datos clave-valor. Este uso masivo de Redis se debe principalmente a su velocidad, la cual
es comprensible, porque trabaja con la información en memoria.
Figura 1. Logotipo comercial de Redis. Fuente: [Link]
Además de la sencillez en su uso y su flexibilidad, también permite manipular tipos de
datos con gran soltura pese a su tipología (clave-valor). Redis permite asociar valores de
tipo string a una clave y facilita el uso de tipos de datos avanzados, los cuales encajan
bastante bien en muchos casos de uso.
Desde que se piensa en el uso de base de datos NoSQL, se da un valor importante a la
especialización en la gestión de datos. Redis precisamente es una de esas soluciones que
suele encajar como motor de almacenamiento, pero que busca integrarse con otras
bases de datos NoSQL y relacionales para sacar el mejor provecho al tratamiento de la
información. Esta es la razón por la que Redis se integra en muchos entornos e incluso
© Universidad Internacional de La Rioja (UNIR)
en grandes soluciones del cloud.
Bases de Datos para el Big Data
5
Tema 9. Ideas clave
Características de Redis
Las estructuras de datos son la clave principal de Redis. Esta base de datos soporta varias
estructuras de datos, las cuales se almacenan de tal forma que el concepto clave-valor
va un poco más allá. Las estructuras de datos que soporta Redis son:
String.
Lists.
Sets.
Sorted sets.
Hashes.
Bit arrays.
Streams.
HyperLogLogs.
Estas estructuras de datos no se usan de forma genérica, sino pensando en un caso de
uso concreto, y ahí radica la estrategia de Redis a la hora de proponerse como una base
de datos NoSQL. Otras características de Redis son las siguientes:
Soporta el patrón publicar/suscribir (pub/sub).
Se ejecuta del lado del servidor, principalmente en los sistemas operativos basados
en Unix como Linux y Mac, y también como un contenedor Docker en Microsoft
Windows.
La instalación de Redis es sencilla y su disponibilidad es casi inmediata una vez es
público.
El servidor espera las conexiones de los clientes, bien sea de forma programática o a
través de la interfaz de línea de comandos (CLI).
© Universidad Internacional de La Rioja (UNIR)
Como toda base de datos NoSQL, no es necesario definir un modelo de datos para
poder trabajar con Redis.
Lo anterior ocurre también con la creación de tablas; estas no son necesarias para
utilizar y sacar provecho de la base de datos.
Bases de Datos para el Big Data
6
Tema 9. Ideas clave
El comando SET se utiliza para crear datos dentro de la base de datos actual, sin la
necesidad de definir una estructura previa.
La instalación de Redis está muy documentada, consulta esta guía.
Flexibilidad de Redis y uso de memoria
Es importante destacar este aspecto de la base de datos. Cuando hay costumbre de
diseñar, definir y crear un modelo de datos que soporte nuestro trabajo en la base de
datos, Redis puede ser confuso al principio precisamente porque no requiere de esos
pasos previos. Sin embargo, justamente esta flexibilidad es la que le brinda la posibilidad
de adaptarse a diferentes escenarios para la explotación del dato.
Redis almacena los datos en la memoria de acceso aleatorio (RAM) del servidor donde
esté instalado. Conforme los datos crecen, el uso de memoria también se incrementa,
igual que ocurre con Spark. En la versión Enterprise, Redis puede usar la memoria flash
disponible para que la base de datos almacene datos (como una unidad de estado sólido
dedicada).
En este escenario, las claves se alojan en la RAM y solo determinados valores se guardan
en la memoria flash. Si lo observamos de forma lógica, los valores más próximos a ser
usados estarán en la RAM, mientras que los menos próximos, en flash. LRU es el
algoritmo que utiliza Redis para decidir qué valores alojar en una memoria o en otra.
La escritura de la base de datos en disco se lleva a cabo a intervalos variables totalmente
configurables. Se tiene en cuenta la cantidad de datos que cambian durante dicho
intervalo. En caso de fallo o caída del servidor, la escritura en disco garantiza la
© Universidad Internacional de La Rioja (UNIR)
durabilidad de la información. En un entorno productivo es común encontrar Redis
instalado sobre clústeres con alta disponibilidad.
Bases de Datos para el Big Data
7
Tema 9. Ideas clave
ACID en Redis
Redis emplea diferentes métodos para cumplir con las propiedades ACID (Atomicity,
Consistency, Isolation y Durability). Estos métodos son:
Atomicidad: proporciona comandos que potencian las transacciones, tales como
WATCH, MULTI y EXEC. Estos comandos aseguran que las operaciones en la base de datos
sean indivisibles e irreductibles.
Coherencia: permite realizar solo escrituras autorizadas, mediante la validación o
autenticación que proporciona Redis.
Aislamiento: cada comando o transacción que utiliza MULTI o EXEC queda aislado,
porque Redis es de un solo subproceso.
Durabilidad: es posible confirmar que se ha llevado a cabo una operación de escritura
en el disco gracias a la configuración de respuesta a una escritura del cliente.
9.3. Modelo de datos, estructura y módulos
Los modelos de datos representan la forma en que se almacenan estos en una base de
datos. Cualquier aplicación que utilice dicho modelo estará sujeta a él para explotar de
la menor manera la forma de persistir los datos. Con el auge de las tecnologías NoSQL
como Redis, el modelo de datos puede ser un reflejo de la aplicación en sí.
© Universidad Internacional de La Rioja (UNIR)
En este sentido, Redis es una base de datos que soporta múltiples modelos de datos para
que estos se representen de múltiples formas, permitiendo así representar varios casos
de uso simultáneamente.
Bases de Datos para el Big Data
8
Tema 9. Ideas clave
Pese a los múltiples beneficios de este enfoque, no todo es color rosa a la hora de asumir
este enfoque de Redis. Una base de datos de cualquier tipo obliga a pensar y decidir
sobre la forma de representar los datos dentro del almacén de datos. La forma que se
decida es la que luego definirá cómo se insertarán los datos y cómo se leerán.
Redis almacena los datos mediante claves, las cuales pueden ser de cualquier tipo
porque realmente son elementos binarios. Para comprender este concepto, una imagen
puede ser usada como clave dentro de la base de datos. Aunque existe esta posibilidad,
por lo general las claves son cadenas simples.
Para trabajar con los distintos tipos de datos, Redis dispone de una serie de comandos
que permiten manipular dichos datos. SET y GET son dos de los comandos más usados
para tal fin. SET crea o cambia un valor que corresponde a una clave determinada. GET
recupera el valor asociado a una clave determinada.
SET sobrescribe los valores si se llama dos veces para la misma clave. El valor
último será el que se almacene con dicha instrucción. Los valores que
corresponden a una clave determinada se pueden formatear de muchas
formas para crear un modelo de datos específico para las necesidades de la
organización.
String y bitmaps
En Redis el tipo de valor más simple es un string. Los string se pueden agregar como
valor a la base de datos mediante el comando SET. La sintaxis de SET requiere una
clave y un valor para crear la entrada.
© Universidad Internacional de La Rioja (UNIR)
Por ejemplo, para crear una clave llamada cliente con un valor de Pepe, es necesario
ejecutar desde la CLI de Redis:
> SET idcliente Pepe
Bases de Datos para el Big Data
9
Tema 9. Ideas clave
Observa que las comillas dobles no son necesarias en este caso porque el valor es una
única palabra, Pepe. Esta instrucción ha creado un valor de cadena simple Pepe que
se ha almacenado en la base de datos.
Lo siguiente es recuperarlo con GET:
> GET idcliente
“Pepe”
Otra forma de provechar los valores es mediante el uso de contadores. En estos
casos, el comando INCR (abreviatura de incremento) permite incrementar el valor de
una clave.
> SET sesioncount 1
> INCR sesioncount
(entero) 2
> GET logincount
"2"
No se pueden usar comandos destinados a datos numéricos en datos de
cadenas.
Los bitmaps, por su parte, son una forma de almacenamiento de cadenas donde se
pueden representar muchos elementos de datos que posean, por ejemplo, un estado
determinado activado (1) o desactivado (0) (el ejemplo más común es un usuario que
está activo o inactivo).
En un escenario donde solo se quiere saber estos estados, Redis es útil por el rápido
© Universidad Internacional de La Rioja (UNIR)
acceso y manipulación de dichos valores. Debido a que solo puede ser uno de dos
valores, puede representar esos datos de manera eficiente. 512 MB es el tamaño
máximo de un valor de cadena (según la versión de Redis), lo cual permite almacenar
232 valores posibles en dicha cadena.
Bases de Datos para el Big Data
10
Tema 9. Ideas clave
SETBIT y GETBIT son comandos específicos para trabajar con tipos bitmaps. Se utilizan
para crear o cambiar un valor y recuperar un valor, respectivamente. Otros comandos
son BITOP y BITFIELD.
Lists
En determinados escenarios una lista puede ser una matriz, pero Redis la utiliza como
lista vinculada que permite operaciones de escrituras muy rápidas. Se usan para
almacenar datos con algún tipo de relación. En el caso de las operaciones de lectura,
estas pueden verse afectadas por la posición donde se encuentre el elemento en la
lista.
Aunque no siempre es la mejor opción debido a los valores repetidos, cuando las
operaciones de lectura son importantes, se puede usar un SET. List implementa una
clave que contiene varios valores ordenados almacenados como string.
Los valores se pueden añadir al principio (left) o al final (right) de la lista y recuperar
dichos valores por su índice. Como existe libertad para almacenar valores, estos
podrán repetirse y hacer uso de claves diferentes para su consulta.
LPUSH y RPUSH permiten la inserción de un valor en una lista. El nuevo valor se
posiciona bien al principio de la lista o bien al final respectivamente.
>LPUSH cliente Pepe Javier Juan
La lista cliente almacena tres elementos, indexados de 0 a 2. Como en toda lista, es
posible recuperar cada elemento mediante LINDEX.
© Universidad Internacional de La Rioja (UNIR)
>LINDEX cliente 0
“Juan”
>LINDEX cliente 1
“Javier”
>LINDEX cliente 2
Bases de Datos para el Big Data
11
Tema 9. Ideas clave
“Pepe”
Observa el orden de los elementos cuando fueron insertados y el orden que les
corresponde al consultarlos.
Supongo que el lector de este tema podrá imaginar qué ocurrirá si se intenta acceder
a una posición de la lista que no existe. En el caso de querer recuperar un rango de
valores, con el comando LRANGE es posible, indicando como parámetro la primera y
última posición.
> LRANGE cliente 0 -1
“Juan”
“Javie”
“Pepe”
(-1) significa hasta el final de la lista.
Sets
Los sets son parecidos a las lists, pero se diferencian en dos aspectos:
1. En la forma de almacenar los valores porque utiliza una sola clave para almacenar
varios valores.
2. En la forma de recuperar los valores; no se usa índice de posición y tampoco se
ordenan.
A diferencia de las listas, los conjuntos no pueden tener miembros repetidos dentro
de la misma clave. Para evitarlo, Redis gestiona el almacenamiento interno de los
sets. Los sets tampoco tienen la operativa de asignar los valores left o right. Para
© Universidad Internacional de La Rioja (UNIR)
añadir valores se utiliza el comando SADD. Consultar todos los elementos de un set es
posible gracias a al comando SMEMBERS.
> SADD sesion user1
> SMEMBERS session
Bases de Datos para el Big Data
12
Tema 9. Ideas clave
1) “user1”
También es posible comprobar si existe un elemento dentro de set empleando el
comando SISMEMBER. Cuando el elemento existe, se devuelve el entero 1. Si el
elemento no existe, devuelve un entero 0.
> SISMEMBER session user1
(integer) 1
Hashes
Se emplean para almacenar colecciones de pares clave-valor. Un hash tiene una
clave, pero dentro de su estructura hay espacio para más campos y valores. El estado
actual de una aplicación es algo que se suele almacenar en un hash.
El comando para crear el hash es HSET. Este permite recuperar valores concretos en
un hash concreto.
> HSET applicationID session 12 requests 123 forms “register and login”
> HGET applicationID session
12
Sets ordenados
Una variante de sets es su versión ordenada de los valores. Este tipo de datos se
utiliza cuando se quiere almacenar datos que deben estar clasificados. Al igual que
hash, una sola clave puede almacenar varios elementos. Cada valor está puntuado
con un número. Un ejemplo para este caso podría ser las veces que determinados
© Universidad Internacional de La Rioja (UNIR)
usuarios retuitean durante el día:
Pepe: 51.
Ana: 18.
Farith: 33.
Bases de Datos para el Big Data
13
Tema 9. Ideas clave
> ZADD usuariosRetweet 51 Pepe 18 Ana 33 Farith
Si se quiere conocer el set y sus valores, se emplea el comando ZRANGE. Similar a
LRANGE, existe el comando ZRANGE que permite recuperar los valores de una lista.
> ZRANGE usuariosRetweet 0 -1
ZRANGE recupera los miembros, pero no sus valores (el número de retuits). Para
recuperar tanto los nombres de los elementos como sus retuits, se añade el
parámetro WITHSCORES.
> ZRANGE usuariosRetweet 0 -1 WITHSCORES
1) "Ana"
2) "18"
3) "Farith"
4) "33"
5) "Pepe"
6) "51"
Observa que los elementos se ordenan de menor a mayor por el número de retuits.
Una forma de consultarlos con el orden contrario es mediante el comando ZREVRANGE.
> ZREVRANGE usuariosRetweet 0 -1 WITHSCORES
Los elementos se pueden manipular de forma individual. El comando ZINCRBY
permite incrementar cualquier número. Para incrementar el número de retuits del
usuario Pepe en 11, se emplea el siguiente comando:
© Universidad Internacional de La Rioja (UNIR)
> ZINCRBY usuariosRetweet 11 Pepe
“62”
Bases de Datos para el Big Data
14
Tema 9. Ideas clave
Con el comando ZRANK es posible determinar en qué parte del set se encuentra un
elemento dado.
HyperLogLog
Este es un tipo de datos especializado muy útil en Redis. Se utiliza para mantener un
recuento estimado de elementos únicos. Un caso de uso común es emplearlo para
llevar a cabo un seguimiento de un recuento general de visitantes únicos al aula
virtual.
Este tipo de datos utiliza hash interno para determinar si ya existe el valor.
Si el valor existe, este no se guarda; en caso contrario, sí se almacena. PFADD se usa
tanto para crear una clave como para añadir nuevos elementos a una clave en este
tipo de datos.
> PFADD estudiante [Link]
Si la IP [Link] es la primera vez que visita el aula virtual, el comando retorna
1 para indicar que se ha añadido la nueva IP. En caso contrario, retorna 0 si la IP ya
existe. PFCOUNT permite estimar el número de elementos únicos dentro de un
HyperLogLog.
Estructuras
Una funcionalidad interesante de Redis es el patrón publisher/subscriber (pub/sub)
© Universidad Internacional de La Rioja (UNIR)
el cual actúa como un mecanismo para intercambiar mensajes. Al usarlo, un
publicador crea un par clave-valor y otros clientes se suscriben a él para recibir dicho
mensaje (el par clave-valor creado).
Bases de Datos para el Big Data
15
Tema 9. Ideas clave
Para lograr esta comunicación, se usa el comando PUBLISH para crear el valor y
publicarlo.
> PUBLISH clima temperatura:32c
El mensaje clima se publica en el canal independientemente de si hay o no clientes
suscritos. El cliente que esté suscrito recibirá un mensaje como el siguiente:
1) "mensaje"
2) "clima"
3) "temperatura:32c"
Un cliente podrá suscribirse a determinado canal utilizando el comando SUBSCRIBE.
Es importante que el cliente sepa qué formato tiene el mensaje para poder
procesarlo. Los canales pub/sub se pueden dividir para crear una estructura
jerárquica por convención o personalización.
Supón que quieres publicar sobre el clima, en concreto, la temperatura de
determinada zona de Madrid.
> PUBLISH clima:Madrid temperatura:33c
Un cliente podrá suscribirse a la Comunidad de Madrid para recibir los datos del
clima. En el caso de que el cliente quiera todas las subclaves, es posible usar el
comodín (*).
> PSUBSCRIBE clima:*
© Universidad Internacional de La Rioja (UNIR)
Geoespacial
La indexación geoespacial es un patrón común utilizado para codificar datos basados
en la latitud y la longitud, la cual facilita y agiliza el trabajo con datos espaciales.
Bases de Datos para el Big Data
16
Tema 9. Ideas clave
Cuando los datos están almacenados, es posible calcular la distancia entre dos puntos
(datos) utilizando funciones integradas.
> GEOADD torreMadrid -31.278 33.589 picaso
> GEOADD torreMadrid -44.155 22.894 bankia
> GEODIST torreMadrid pisaco bankia
> GEODIST torreMadrid pisaco bankia mi
En la última instrucción se calcula la distancia entre las dos torres de Madrid usando
el comando GEODIST. Por defecto este comando devuelve valores en metros, si se
quiere utilizar, por ejemplo, millas, se añade al final mi.
Streams
En esta estructura, stream hace referencia a un patrón de transmisión mucho más
potente que pub/sub. Con PUBLISH no se almacenan los datos que se publican. En el
caso de stream, los consumidores crean un identificador único para gestionarlo ellos
mismos.
Como puede que los emisores o publicadores almacenen datos antiguos, los nuevos
consumidores podrán en cualquier momento pedir todos los mensajes disponibles.
Otra característica importante radica en que los mensajes se pueden etiquetar como
leídos por un cliente determinado. El comando XADD crea un stream y otros comandos
como XRANGE permiten manipular dicho elemento.
Al solicitar los mensajes, se pueden pedir solo aquellos que estén pendientes y, en
© Universidad Internacional de La Rioja (UNIR)
base a esos, realizar otras acciones.
Bases de Datos para el Big Data
17
Tema 9. Ideas clave
Módulos
Módulos principales
Implementa una base de datos de grafos en Redis. Las bases de
Redis Graph datos de grafos proporcionan un método para implementar la
teoría de grafos sobre los datos relacionados.
Es un motor de búsqueda de texto completo basado en el
almacenamiento de documentos dentro de Redis. Este módulo
RedisSearch utiliza funciones de búsqueda de alto rendimiento. Dentro de sus
características está el uso de búsquedas ponderadas, la lógica
booleana y el autocompletar, entre otras.
Permite almacenar datos de series de tiempo y trabajar con
RedisTimeSeries
dichos datos de una forma rápida.
Tabla 1. Módulos implementados por Redis para datos específicos.
9.4. Arquitectura y topología
Los entornos productivos se caracterizan por su nivel de rendimiento y redundancia
(Carlson, 2013). Para conseguir el rendimiento de una base de datos, se pueden emplear
varios mecanismos, entre ellos, la agrupación en clústeres y la fragmentación (Paksula,
2010). Un fragmento de base de datos es una pequeña porción de una base de datos
mucho más grande. Estas partes de la gran base de datos se ubican entre diferentes
servidores para que cada uno se haga responsable de un subconjunto de los datos.
La versión Enterprise de Redis puede realizar agrupamiento en clúster integrados. Esas
partes de la base de datos de Redis se comparten también en un conjunto de servidores.
Siguiendo la descripción anterior, cada servidor dentro de un clúster concreto es
© Universidad Internacional de La Rioja (UNIR)
responsable solo de su propio conjunto de datos.
Redis separa la administración del clúster de la arquitectura para que las solicitudes sean
atendidas tan rápido como lo serían si el servidor no se estuviera ejecutando en un
Bases de Datos para el Big Data
18
Tema 9. Ideas clave
clúster (Da Silva y Tavares, 2015). Un servidor dentro de un clúster se denomina nodo
en Redis. Los nodos podrán ser primarios o secundarios.
El clúster de Redis Enterprise consta de los siguientes componentes:
Capa de datos: en esta capa los datos se almacenan y administran, haciendo parte del
mismo núcleo como si se tratase de una única instancia de Redis (open source).
Administrador de clústeres: se encarga del estado general del clúster, su supervisión,
el reequilibrio, la compartición, el aprovisionamiento y el desaprovisionamiento de
nodos, entre otras tareas.
Proxy de latencia cero: los nodos del clúster utilizan un proxy para proporcionar
comunicación sin estado y multiproceso entre el cliente y el nodo.
API REST: se utiliza para la gestión del clúster.
Alta disponibilidad
Es importante en este punto volver a diferenciar las dos versiones que ofrece Redis para
trabajar. Por un lado, está Redis Open Source y, por otra parte, está Redis Enterprise.
Cuando se quiere conseguir una alta disponibilidad, con Redis Open Source el gasto en
RAM dificulta las réplicas del dato de forma simultánea.
Recordemos que, para proporcionar una alta disponibilidad en el caso de divisiones de
red, es necesario ejecutar tres réplicas de los mismos datos simultáneamente (Choi et
al., 2016). En caso de un fallo en la red, los dos nodos restantes que pueden comunicarse
© Universidad Internacional de La Rioja (UNIR)
pasan a ser autorizados.
Redis Enterprise, por su parte, ofrece alta disponibilidad sin necesidad de una tercera
réplica. En lugar de ello, emplea un tercer servidor mucho más pequeño para la
resolución del quorum en el caso de divisiones de red. Esta manera evita la necesidad de
Bases de Datos para el Big Data
19
Tema 9. Ideas clave
una RAM costosa, lo que, en cualquier escenario, significa ahorros de costos directos. La
replicación en RAM se lleva a cabo entre maestro y esclavo.
Otra ventaja es que monitorea tanto a nivel de nodo como a nivel de clúster,
garantizando que los procesos relacionados con el rendimiento de los nodos funcionen
correctamente. Si un nodo deja de estar disponible o no responde, el guardián del nodo
comienza el proceso de conmutación por error del fragmento.
9.5. Despliegue en Docker
Para que puedas poner en marcha un servidor de Redis, en este apartado se propone
una instalación basada en Docker que permita de forma rápida acceder a Redis y realizar
las pruebas de los comandos antes vistos. A continuación, se indican los pasos de
instalación.
Paso 1: inicia Docker Desktop.
Paso 2: ejecuta la instrucción de descarga y configuración de imagen de Redis.
docker run -d --cap-add sys_resource --name rp -p 8443:8443 -p 9443:9443 -p
12000:12000 redislabs/redis
Docker con RS se ejecuta en su host local con el puerto 8443, el cual está abierto para
conexiones HTTPS, 9443 para conexiones de API REST y el puerto 12 000 abierto para
conexiones de cliente de Redis.
© Universidad Internacional de La Rioja (UNIR)
Si lo deseas, puedes utilizar otros puertos con -p <host_port>: <container_port> o usar
la opción --network host para abrir todos los puertos a la red host.
Bases de Datos para el Big Data
20
Tema 9. Ideas clave
Figura 2. Ejecución de un contenedor desde Docker hub.
Si revisas Docker Desktop, deberías poder ver la nueva imagen de Redis en ejecución.
Figura 3. Ejecución de un contenedor desde Docker hub.
Paso 3: inicia la aplicación web del servidor de Redis en la siguiente URL:
[Link] y da clic en el botón Setup para configurar tu servidor local.
© Universidad Internacional de La Rioja (UNIR)
Figura 4. Web principal de Redis.
Bases de Datos para el Big Data
21
Tema 9. Ideas clave
Paso 4: asigna un nombre (FQDN) a tu clúster: «clusterlocal», por ejemplo, y luego da
clic en el botón Next.
Figura 5. Configuración y creación de base de datos en Redis.
Paso 5: cuando solicite la licencia omite introducirla y da clic en Next. Luego introduce
un correo y asigne una contraseña a su cuenta de administrador.
© Universidad Internacional de La Rioja (UNIR)
Figura 6. Creación de cuenta administrador de Redis.
Bases de Datos para el Big Data
22
Tema 9. Ideas clave
Paso 6: marca la opción Crear base de datos y haz clic en el botón Next.
Figura 7. Selección del tipo de base de datos, base de datos normal o en memoria.
Paso 7: asigna como nombre «databasetest», luego haz clic en Show advance
options y en el campo Endpoint port number indica el puerto 12 000.
Si el puerto 12 000 no está disponible, ingresa cualquier puerto disponible entre
10 000 y 19 999 y conéctate a la base de datos con ese número de puerto.
Observa cómo cada base de datos utiliza un puerto por defecto en las
instalaciones por defecto: MySQL utiliza el puerto 3306, MongoDB el puerto
27017, Neo4J el puerto 7474… Por seguridad, los administradores de bases de
© Universidad Internacional de La Rioja (UNIR)
datos cambiarán puertos menos comunes.
Bases de Datos para el Big Data
23
Tema 9. Ideas clave
Figura 8. Configuración de la base de datos en Redis.
Después de crear la base de datos en Redis, la página web que debes ver es la
siguiente.
© Universidad Internacional de La Rioja (UNIR)
Figura 9. Configuración avanzada de la base de datos en Redis.
Bases de Datos para el Big Data
24
Tema 9. Ideas clave
Si no puedes activar la base de datos debido a una limitación de memoria,
asegúrate de que Docker tenga suficiente memoria asignada.
Paso 8: inicia redis-cli, conéctate a la base de datos creada y practica con todos
los comandos vistos en este tema.
> docker exec –it rp Bash
> redis-cli –p 12000 –a supasswordsilopuso
Figura 10. Consola Bash de Redis desde un contenedor en Docker hub.
9.6. Drivers
Redis se integra con muchos lenguajes de programación conocidos. De forma
programática, desde estos lenguajes, es necesario crear los mecanismos para realizar
dicha conexión. Los clientes y controladores generalmente se comparten bajo una
licencia de código abierto, aunque la licencia varía según el proyecto.
Consulta [Link] para obtener más información sobre clientes de
Redis.
© Universidad Internacional de La Rioja (UNIR)
A continuación, una lista de lenguajes compatibles con Redis:
Python: se integra con Redis a través del paquete redis-py, aunque también
existen otros paquetes igual de compatibles.
Java: mediante estos tres clientes: Jedis, Lettuce y Redisson.
Bases de Datos para el Big Data
25
Tema 9. Ideas clave
[Link]: el cliente recomendado para [Link] es node_redis.
C#: dos clientes populares son [Link] y [Link].
PHP: tiene varios clientes con PHP, pero el más recomendado es Predis.
C: el cliente oficial de Redis para el lenguaje C es hiredis. Por otro lado, también
esta hiredis-vip, el cual permite obtener información sobre compatibilidad con el
lenguaje C relacionado con el clúster.
Usando Python
A continuación, se indican los pasos para usar Python con la instalación de Redis
llevada a cabo en el apartado anterior. Sigue las siguientes instrucciones desde
Jupyter de Anaconda u otra instalación similar.
pip install redis
import redis
r = [Link](host='localhost', port=12000, db=0,
password=supassword)
# instrucciones de ejemplo
print ("set key1 123")
print ([Link]('key1', '123'))
print ("get key1")
print([Link]('key1'))
© Universidad Internacional de La Rioja (UNIR)
Figura 11. Notebook Python con instrucciones de la práctica.
Bases de Datos para el Big Data
26
Tema 9. Ideas clave
Después de leer todo el tema, en la lección «Características principales de Redis»
podrás repasar los conceptos generales de la base de datos y revisar los tipos de datos
que maneja Redis. De igual forma, podrás ver una breve descripción del uso de Redis
en determinados casos de uso.
Vídeo 1. Características principales de Redis.
Accede al vídeo a través del aula virtual
9.7. Referencias bibliográficas
Carlson, J. L. (2013). Redis in action. Manning Publications.
Choi, J. M., Jeong, D. W., Yoon, J. S., y Lee, S. J. (2016). Digital forensics investigation
of Redis database. KIPS Transactions on Computer and Communication
Systems, 5(5), pp. 117-126.
Da Silva, M. D., y Tavares, H. L. (2015). Redis Essentials. Packt Publishing.
© Universidad Internacional de La Rioja (UNIR)
Paksula, M. (2010). Persisting objects in Redis key-value database. University of
Helsinki. [Link]
Bases de Datos para el Big Data
27
Tema 9. Ideas clave
A fondo
Documentación oficial: Redis motor NoSQL
Redis Labs. (2021). Get started with Redis [Página web]. [Link]
started-with-redis/
Redis es una base de datos que cuenta con una documentación muy detallada y
orientada a casos de usos que pueden apoyarse en este tipo de bases de datos. En su
página web la documentación de la herramienta se enfoca en tres aspectos
importantes: configuraciones de uso, conexión a la base de datos y uso de clientes
para explotar Redis.
Documentación oficial: Redis en su versión Enterprise, mejoras funcionales
Redis Labs. (2021). Documentation [Página web].
[Link]
El equipo de Redis dispone de la documentación de la versión Enterprise de esta
herramienta. Aunque es una versión de pago, es interesante que el estudiante revise
dicha documentación para que conozca las funcionalidades que cubre dicha versión,
con respecto a la versión open source.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
28
Tema 9. A fondo
Fundamentos de Redis: Redis Crash Course
Traversy Media. (19 de marzo de 2017). Redis Crash Course Tutorial [Archivo de vídeo].
[Link]
En el siguiente vídeo se lleva a cabo una presentación de los fundamentos de Redis.
En el vídeo se discuten y demuestran las principales características de la base de
datos, incluyendo su definición e instalación, el cliente redis-cli, los tipos de datos,
cadenas, listas, conjuntos, conjuntos ordenados, hash y la persistencia de datos.
Ejemplo de soluciones con Redis: casos de uso comerciales
Redis Labs. (2021). Case Studies [Página web]. [Link]
La mejor manera de comprender el uso que se le puede dar a las bases de datos como
Redis es analizando casos de estudios donde actualmente se esté implementando. La
web oficial de Redis dispone de varios casos de uso que pueden ser estudiados para
aprender el dominio de este tipo de base de datos. Consulta estos casos de uso, pero
© Universidad Internacional de La Rioja (UNIR)
sobre todo céntrate en descubrir en qué escenario se está implementado Redis y de
qué forma cubre la problemática o necesidad planteada.
Bases de Datos para el Big Data
29
Tema 9. A fondo
Test
1. Las siguientes son estructuras de Redis:
A. String, integer, float, sets y lists.
B. Lists, sets, hashes, stream y bit arrays.
C. HyperLogsLogs, hashes, sets, string y float.
D. Ninguna de las anteriores es correcta.
Estos son algunos de los tipos de datos que utiliza Redis para almacenar y manipular
los datos. Float, por su parte, no es un tipo de datos de Redis.
2. ¿Cuál de estas afirmaciones es verdadera?
A. No es necesario definir previamente un modelo de datos antes de usar o
guardar datos en Redis.
B. Redis se caracteriza por el tratamiento de distintos tipos de datos, los cuales
se pueden aplicar en distintos casos de uso.
C. Redis es una base de datos clave-valor.
D. Todas las anteriores son correctas.
Todas las afirmaciones son ciertas, hacen parte de las características relevantes de la
base de datos.
3. ¿Cómo se llama el cliente de Redis?
A. Cliente Redis Long.
B. redis-cli.
C. cli-rediss.
D. Ninguna de las anteriores es correcta.
Redis llama a su consola o terminal redis-cli, abreviatura de cliente redis en inglés.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
30
Tema 9. Test
4. ¿Cuál de estas instrucciones muestra todos los elementos de una lista llamada
clientes?
A. LINDEX clientes 0.
B. LRANGE clientes 0 -1.
C. LRANGE clientes 0 *.
D. GET clientes 1.
Los valores 0 y -1 indican que se muestren los valores desde la posición 0 hasta el
final de la lista.
5. ¿Cuál de estas instrucciones permite añadir un elemento a la colección llamada
frutas?
A. SADD frutas mango.
B. SADD mango frutas.
C. SMEMBERS frutas mango.
D. SISMEMBERS frutas mango.
SADD permite añadir elementos a una colección, seguido se indica el nombre de la
colección y luego el elemento a añadir.
6. ¿Qué hace la siguiente instrucción: SET user pep?
A. Establece un usuario en pep.
B. Crea un elemento llamado user con el valor pep.
C. Muestra el valor de user y pep.
D. Guarda el valor user en pep.
SET crea un elemento, seguido se indica el nombre del elemento y luego su valor.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
31
Tema 9. Test
7. ¿Qué son las colecciones ordenadas?
A. Una colección cuyos elementos se ordenan por la clave.
B. Una colección cuyos elementos se ordenan por el orden en que se añaden
los valores.
C. Una colección cuyos elementos se ordenan por los valores.
D. Ninguna de las anteriores es correcta.
Las colecciones ordenadas se ordenan por los valores que se añaden a dicha
colección, no por su clave.
8. El patrón pub/sub permite:
A. Publicar datos cada cierto tiempo en un puerto concreto.
B. Crea un canal para que los clientes se suscriban y reciban los valores
emitidos.
C. Publicar datos en stream para ser consumido.
D. Todas las anteriores son correctas.
Según la configuración que se le aplique al patrón, este permitirá hacer las tres
operaciones que se indican previamente.
9. Redis es una base de datos clave-valor que utiliza:
A. RAM y memoria flash.
B. Solo RAM.
C. RAM y memoria caché.
D. RAM SSD y Sweap.
Redis posee funciones especializadas para usar tanto la memoria RAM como las
memorias flash, incluso en SSD.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
32
Tema 9. Test
10. ¿Qué afirmación es verdadera?
A. Dentro de un clúster de Redis, un servidor determinado se denomina cliente.
B. Cada nodo puede ser un nodo primario (maestro), pero no un nodo
secundario (esclavo).
C. La administración del clúster se realiza en una capa de la arquitectura del
clúster de Redis.
D. El almacenamiento de datos de series de tiempo es otra tarea común en
Redis.
Redis dispone de un módulo que permite tratar datos de series de tiempo.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
33
Tema 9. Test
Tema 10
Bases de Datos para el Big Data
Datos en el cloud
Índice
Esquema 3
Ideas clave 4
10.1. Introducción y objetivos 4
10.2. Cloud computing 5
10.3. Modelos de cloud computing 6
10.4. Tipos de servicios cloud 9
10.5. Virtualización 13
© Universidad Internacional de La Rioja (UNIR)
10.6. Docker 16
10.7. Manos a la obra con Docker 21
10.8. Iniciar un contenedor con MongoDB 23
10.9. Referencias bibliográficas 31
A fondo 32
Test 35
© Universidad Internacional de La Rioja (UNIR)
CLOUD COMPUTING y VIRTUALIZACIÓN
CLOUD VIRTUALIZACIÓN
Ser vicios Hipervisores: Docker, LXD, OpenVZ, MultiDocker, Lithos, Contained.
Ofrecer servicios a demanda en
1 Docker Docker es un motor de código abierto cuya función
la nube.
principal es facilitar la implementación de
aplicaciones en contenedores.
Mod elo
Imágenes Las imágenes son el «código fuente» de su
Cloud privado. contenedor, son portables y, lo más importante,
Cloud público. se pueden compartir, almacenar y actualizar.
Cloud híbrido. docker pull image_name
Tipos Registros Existen dos tipos de registros: públicos y privados.
Docker almacena las imágenes que crea en
Virtualización de Escritorio. registros. Docker, Inc. utiliza un registro público de
Virtualización de red. imágenes, llamado Docker Hub.
Virtualización de software.
Virtualización de datos. Docker permite crear e implementar
Contenedores
contenedores donde luego empaqueta
aplicaciones y servicios. A partir de las imágenes,
los contenedores se lanzan con uno o más
IaaS: AWS. PaaS: IBM bluemix, Heroku, Amazon procesos en ejecución.
SaaS: Microsoft, AWS, GCP. Elastic Beanstalk, etc.
CaaS: Docker Cloud, Amazon ECS, etc. FaaS: AWS Lambda, Google Cloud docker run …
Functions, etc.
Tema 10. Esquema
Bases de Datos para el Big Data
Esquema
3
Ideas clave
10.1. Introducción y objetivos
En este tema se conocerán algunos aspectos claves del uso del cloud para la carga y
análisis de los datos. En la asignatura hasta el momento se han estado revisando
bases de datos concretas aplicadas en el ámbito NoSQL. Las bases de datos vistas no
son el único activo utilizado para persistir y analizar la información. El cloud es otra
alternativa que cubre gran número de soluciones, tanto para las grandes empresas
como para las compañías más pequeñas.
Además de conocer la definición del cloud como solución tecnológica, se describirán
los beneficios que conllevan el uso de la computación en la nube, de persistir los
datos y delegar determinada gestión de las bases de datos y de poder desplegar
procesos de análisis de forma ágil en entornos productivos.
El uso del cloud implica, por un lado, confiar en la infraestructura de otros
proveedores y, por otra parte, usar y explotar nuestra información siguiendo
determinados protocolos. Existen proveedores que cuentan con sus propias
infraestructuras en el cloud. En otros casos, algunos dependen de otros proveedores
del cloud para proporcionar los mismos servicios.
Los objetivos que se abordan en este tema son los siguientes:
Entender el concepto de computación en la nube.
© Universidad Internacional de La Rioja (UNIR)
Conocer los beneficios y desventajas de tratar los datos en el cloud.
Entender los distintos tipos de servicios que se ofrecen en el cloud.
Diferenciar servicios como PaaS, IaaS, SaaS y FaaS.
Comprender los conceptos de virtualización.
Hacer uso de Docker como herramienta de virtualización.
Bases de Datos para el Big Data
4
Tema 10. Ideas clave
10.2. Cloud computing
Oracle define el cloud computing como la capacidad de alquilar sus tecnologías de la
información, en lugar de comprarlas. En lugar de invertir mucho en bases de datos,
software y equipos, las empresas optan por acceder a la potencia de cálculo a través de
Internet y pagar por lo que consumen (Oracle, 2021).
Cuando la compañía da el paso de «ir al cloud», afronta el reto de llevar todo lo que se
considera infraestructura de TI a un entorno ajeno al suyo, a un centro de datos que
dirige y gestiona un proveedor cloud como Amazon, Azure, Google, Oracle, IBM o
Informática, entre otros.
Los proveedores cloud asumen el control y la gestión de estas infraestructuras en
nombre de sus clientes, y sobre ellas vinculan aplicaciones y entornos de desarrollo para
construir nuevas capacidades de negocio y nuevas funcionalidades que les permitan a
las empresas asumir los cambios en la demanda del mercado.
Entre los beneficios más destacados que ofrece el cloud computing se mencionan los
siguientes:
Escalabilidad horizontal y vertical: cuando aumentan las necesidades de las
compañías debido a su propio negocio, el cloud se adapta y crece en función de la
demanda de recursos.
Migraciones flexibles: las empresas pueden migrar ciertos recursos hacia o desde
la nube, o hacia diferentes proveedores de nube, según lo deseen, o
automáticamente para obtener mejores ahorros de costos, un mejor rendimiento
© Universidad Internacional de La Rioja (UNIR)
o para usar nuevos servicios a medida que surgen.
Infraestructura: los clientes pueden estimar y calcular los recursos para los
distintos elementos de la infraestructura. Aunque suene negativo, los
administradores de TI no tienen la tarea de estimar y gestionar directamente los
recursos de la compañía.
Bases de Datos para el Big Data
5
Tema 10. Ideas clave
Resistencia cargas de trabajo: el servicio en la nube provee el almacenamiento
constante de los datos en distintas ubicaciones en todo el mundo.
Pago por uso: los costes se aplican por unidades concretas de recursos usados, sin
recargos y con una facturación de servicios muy transparente.
Protección antidesastres: el cloud elimina la necesidad de invertir en hardware para
copias de seguridad. Los servidores son globales y la gestión de copias la lleva
directamente el proveedor a nivel mundial.
Actualizaciones automáticas, trabajo remoto y aumento de la capacidad de
colaboración: no es necesario llevar a cabo procesos de actualización de hardware o
software. los servicios de cara al usuario operan independientemente de la
infraestructura, todo lo que el cliente necesita es un mecanismo de conexión a través
de Internet.
Seguridad: el cloud brinda los mejores estándares de seguridad disponibles en el
mercado. El cliente, las aplicaciones, los datos y el código están protegidos y
monitorizados las 24 horas.
10.3. Modelos de cloud computing
Existen tres formas de cloud computing según su implementación:
Cloud privado: como su nombre indica, son servicios cloud creados para una
organización específica y solo para ella. La organización, al tratarse de un servicio
exclusivo, puede personalizar dicho servicio eligiendo, por ejemplo, el hardware a
utilizar, el software y las alternativas de almacenamiento que mejor se adapten al
volumen de los datos. Se considera que sigue siendo la figura de centro de datos
© Universidad Internacional de La Rioja (UNIR)
central para una organización.
La razón por la que este modelo es atractivo es porque las dependencias con
proveedores externos son mínimas.
Bases de Datos para el Big Data
6
Tema 10. Ideas clave
Algunos proveedores que brindan este tipo de cloud son:
• OpenStack: [Link]
• CloudStack: [Link]
• VMware: [Link]
Figura 1. Esquema simple de un cloud privado.
Cloud público: las empresas en este caso acceden a servicios del cloud a través de
Internet. Estos servicios se ajustan a la demanda del servicio y se miden (a efectos de
costes y facturación) con la demanda del servicio por minutos u horas. Las
suscripciones son otra forma de prolongar el contrato y los servicios.
© Universidad Internacional de La Rioja (UNIR)
Figura 2. Esquema simple de un cloud público.
Bases de Datos para el Big Data
7
Tema 10. Ideas clave
Cuando se alquila una máquina virtual, por ejemplo, los costes cubren la duración de
dicha MV, la capacidad de almacenamiento o el ancho de banda que esta consume.
Estas características no solo pueden variar de un proveedor a otro, sino también entre
servicios y suscripciones.
Algunos proveedores que brindan este tipo de cloud son:
• Microsoft Azure: [Link]
• Google Cloud Platform (GPC): [Link]
• Servicios web de Amazon: [Link]
• IBM: [Link]
Cloud híbrido: es una fusión de servicios de cloud público (GCP, AWS o Azure) y un
cloud privado local. Las soluciones en local se usarán más para aplicaciones críticas
dentro de la compañía, mientras que el cloud público abordará las demandas del
servicio.
© Universidad Internacional de La Rioja (UNIR)
Figura 3. Esquema simple de un cloud híbrido.
Bases de Datos para el Big Data
8
Tema 10. Ideas clave
Algunos proveedores que brindan este tipo de cloud son:
• IBM: [Link]
• AWS: [Link]
Otro tipo de cloud que se escucha con más frecuencia es el cloud comunitario, el cual
se define como aquel que conforman diferentes empresas u organizaciones con el fin
de promover o impulsar un objetivo común.
10.4. Tipos de servicios cloud
A continuación, se describen los cinco tipos de servicios que se ofrecen en el cloud.
Software as a Service (SaaS)
En este tipo de servicios, el proveedor del cloud centra su servicio en alojar e
implementar software del cliente en su entorno. El cliente accede a sus aplicaciones
a través de Internet y se evita así comprar y mantener su propia infraestructura de
proceso. El modelo económico empleado es el genérico en las plataformas cloud, el
cual consiste en el pago por uso de cada tiempo de recurso.
Este tipo de servicios se ajusta a aquellas empresas que demandan acceso rápido a
tecnología innovadora. Al delegar al proveedor esta responsabilidad, las
actualizaciones automáticas pasan a ser una parte inherente del servicio, reduciendo
así la carga de recursos propios de la organización destinados a este tipo de tareas.
© Universidad Internacional de La Rioja (UNIR)
El servicio funciona a demanda, si es necesario se amplían o reducen los mismos,
según el volumen de trabajo. Algunos productos software que se suelen contratar
bajo esta tipología son ERP, herramientas para la gestión de cadena de suministro y
sistemas contables, entre otros.
Bases de Datos para el Big Data
9
Tema 10. Ideas clave
Platform as a Service (PaaS)
Este tipo de servicio ofrece acceso a herramientas y plataformas adecuadas para
cubrir las necesidades de entornos de desarrollo para crear y gestionar aplicaciones
web, móviles o de proceso. De esta forma, se reduce la inversión en la infraestructura
que hay alrededor de los equipos de desarrollo internos del cliente.
Por lo general, este tipo de cloud provee la infraestructura y middleware que luego
el cliente consulta a través de portales web.
Infrastructure as a service (IaaS)
También llamado HaaS o Hardware as a Service. En este otro tipo, el servicio se
enfoca en ofrecer infraestructura como servicio para que el cliente haga uso del
mismo a demanda. Los clientes solo tienen que preocuparse de sus procesos y
análisis, delegando a los proveedores del servicio los componentes de infraestructura
con capacidad de cómputo, almacenamiento y de red para ejecutar los procesos del
cliente.
En IaaS el proveedor dispone de infraestructura para proveer de máquinas virtuales
a sus clientes. Con ellas se abstraen los recursos de un ordenador con un hypervisor
o VMM (Virtual Machine Monitor), el cual crea capas entre máquina host y el sistema
operativo virtualizado. La virtualización a grandes rasgos permite montar entornos
hardware mediante software.
Es importante destacar que el cliente, en este modelo de negocio, es quien se hace
responsable de la instalación, la configuración, la protección de datos y la gestión de
© Universidad Internacional de La Rioja (UNIR)
las aplicaciones de la infraestructura como bases de datos o middleware.
Bases de Datos para el Big Data
10
Tema 10. Ideas clave
Function as a Service (FaaS)
Otro de los servicios que se ofrecen sobre el cloud son funciones como servicio. Este
servicio lo utilizan desarrolladores para implementar la lógica de back-end sin la
necesidad de configurar y levantar un servidor. Dentro de las arquitecturas sin
servidor, este servicio está siendo muy utilizado en casi gran parte de las compañías
que ofrecen servicio tecnológico en la nube.
Container as a Service (CaaS)
Es un modelo de servicio en la nube que permite a los usuarios cargar, organizar,
iniciar, detener, escalar y administrar contenedores, aplicaciones y clústeres. La base
de este servicio es la virtualización basada en contenedores, una interfaz de
programación de aplicaciones (API) y una interfaz de portal web.
Con CaaS los usuarios pueden construir soluciones sobre contenedores escalables y
seguros a través de centros de datos locales o el cloud. Los contenedores y clústeres
se utilizan como servicio con este modelo y se implementan en la nube o en centros
de datos in situ.
Enfoque del servicio
Estos servicios brindan varios niveles de abstracción sobre las máquinas que
finalmente ejecutan dichos servicios. Cada servicio opera sobre un nivel diferente de
responsabilidad dentro del entorno del proveedor.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
11
Tema 10. Ideas clave
Figura 4. Abstracción de los distintos servicios ofrecidos por el cloud. Fuente:
[Link]
Actualmente, los desarrolladores pueden optar por implementar código para:
IaaS: Amazon EC2, máquinas virtuales de Azure, etc.
Caas: Docker Cloud, Amazon ECS, etc.
Paas: Heroku, Amazon Elastic Beanstalk, etc.
Faas: AWS Lambda, Google Cloud Functions, etc.
Cada servicio proporciona un nivel diferente de abstracción y unidad de escala
adecuado a sus necesidades. A nivel de aplicaciones, en la Figura 5 se pueden ver
cómo distintas tecnologías se enmarcan dentro del tipo de cloud ofrecido.
© Universidad Internacional de La Rioja (UNIR)
Figura 5. Enfoque de servicio por tipo de cloud de IBM. Fuente: IBM Cloud Strategy for Data-Intensive
Enterprises
Bases de Datos para el Big Data
12
Tema 10. Ideas clave
10.5. Virtualización
La virtualización permite crear entornos virtuales simulando un entorno físico. El
entorno virtual por lo general incluye características y versiones del hardware que
representa, de los sistemas operativos que ejecuta, de los dispositivos de
almacenamiento configurados, de la memoria RAM empleada, etc.
Con la virtualización es posible convertir un único equipo físico o servidor en varias
máquinas virtuales. En él, cada máquina virtual puede interactuar
independientemente y levantar sistemas operativos o aplicaciones diferentes
mientras comparten los recursos de la máquina host.
Lo que se gana con este mecanismo es mejorar la escalabilidad y las cargas de trabajo
sobre determinado proceso, al tiempo que permite usar menos servidores
reduciendo así el consumo de energía, el mantenimiento y los costes de
infraestructura, que pueda acarrear una infraestructura física real.
El uso generalizado de la virtualización redujo la dependencia de un solo proveedor
y se transformó en la base del cloud computing. Su uso actualmente es tan frecuente
que requiere del uso de sistemas de software de administración de la virtualización
especializados para poder realizar un seguimiento de todas las instancias que puedan
crearse o existir.
Los IaaS utilizan con frecuencia la virtualización de servidores para ofrecer sus
servicios. Mediante un software de virtualización crean sobre un servidor físico
máquinas virtuales que luego se ofrecen a los clientes para su uso. Los clientes eligen
© Universidad Internacional de La Rioja (UNIR)
las capacidades de hardware que necesitan y otras características como estructuras
de red, cortafuegos, copias de seguridad o réplicas, aplicaciones preinstaladas (Spark,
Apache, Hadoop, etc.).
Bases de Datos para el Big Data
13
Tema 10. Ideas clave
Figura 6. AWS y los servicios que ofrece al momento de configurar la capa gratuita de servicios. Fuente:
[Link]
order=asc
Hipervisores
Los hipervisores son software que se encargan de separar los recursos físicos de los
entornos virtuales. Estos se pueden instalar en un hardware concreto como servidor
o hacer parte de un sistema operativo existente. En el primer caso, es el mecanismo
que utilizan las grandes empresas dedicadas a la virtualización. En el segundo caso,
se refiere a lo que se suele hacer a la hora de virtualizar algún sistema operativo sobre
un ordenador con sistema operativo funcionando.
El hipervisor gestiona los recursos físicos y los divide de tal forma que todos los
entornos virtuales puedan usarlos. Estos recursos se comparten según las demandas
de cada virtualización y del propio entorno físico donde están alojadas. Cuando un
© Universidad Internacional de La Rioja (UNIR)
usuario interactúa con una virtualización, lo hace dentro del entorno virtual conocido
comúnmente como máquina de guest o máquina virtual.
La máquina virtual funciona como un fichero de datos. El hecho de que sea un fichero
sin más dentro del sistema de archivos permite que la máquina virtual se pueda llevar
Bases de Datos para el Big Data
14
Tema 10. Ideas clave
de un ordenador a otro. Una vez copiado en otro ordenador, al abrirla esta se adapta
al nuevo host y usa sus recursos para poder funcionar. En esta portabilidad radica la
importancia de los entornos virtualizados, ya que permiten que un sistema
virtualizado creado en un host pueda ser llevado a otro host y ejecutarse sin problema
alguno.
Tipología de la virtualización
La virtualización se divide en cuatro categorías, que son:
Virtualización de escritorio: permite que un servidor centralizado ofrezca y
administre escritorios de forma individual. Es común confundirla con la
virtualización de los sistemas operativos. Sin embargo, en la virtualización de los
escritorios existe la figura de administrador o herramienta de administración
automatizada que configura los entornos simulados de escritorio en cientos de
máquinas físicas al mismo tiempo. En un entorno de escritorio tradicional es
necesario instalar herramientas, configurar y actualizar cada máquina una a una;
mientras que con la virtualización de escritorios los administradores desde un
único punto llevan a cabo estas tareas de forma masiva en todos los escritorios
virtuales.
Virtualización de red: se caracteriza porque divide el ancho de banda de una red
en canales independientes que se asignan a servidores o dispositivos específicos.
La virtualización de las funciones de red (NFV) permite separar las funciones de
una red para luego distribuirlas entre los entornos correspondientes. Esta
virtualización reduce la cantidad de componentes físicos tales como
conmutadores, enrutadores, servidores, cables, centrales, entre otros, necesarios
© Universidad Internacional de La Rioja (UNIR)
para crear redes independientes.
Virtualización de software: se encarga de separar las aplicaciones del hardware y
el sistema operativo. En el caso de la virtualización del sistema operativo, esta se
lleva a cabo en el kernel (los administradores de tareas de los sistemas operativos).
Bases de Datos para el Big Data
15
Tema 10. Ideas clave
De esta manera, es posible ejecutar entorno Linux y Windows de forma paralela
en una misma máquina. Por otra parte, la virtualización de un servidor permite
ejecutar más funciones específicas e implica dividirlo, para que los elementos se
puedan utilizar para realizar varias funciones a la vez.
Virtualización de datos o almacenamiento: combina recursos de almacenamiento
en red y los muestra como un solo dispositivo de almacenamiento accesible para
varios usuarios. La virtualización de datos permite a las empresas aplicar sobre
ellos capacidad de procesamiento, reuniéndolos desde varias fuentes y facilitando
la integración de nuevos orígenes de datos. Las herramientas de virtualización de
los datos trabajan sobre varias fuentes de datos y los tratan como si fuesen un
único origen.
10.6. Docker
Docker es un motor de código abierto cuya función principal es facilitar la
implementación de aplicaciones en contenedores. Su creador es Docker Inc,
conocidos en fechas pasadas como dotCloud Inc, pioneros de los servicios del cloud
Plataforma como servicio (PaaS). Está disponible bajo la licencia Apache 2.0.
Docker propone un sistema de implementación de aplicaciones sobre un entorno de
ejecución de contenedores virtualizado. Su entorno se caracteriza por ser rápido,
ligero y por facilitar la ejecución de su código. Dentro de su método de trabajo, define
un flujo eficiente que permite llevar desarrollos de ordenadores personales a
entornos de prueba, integración y producción (Schenker, 2018; Turnbull, 2019).
© Universidad Internacional de La Rioja (UNIR)
Docker se diferencia de una máquina virtual por su sencillez y requerimientos
mínimos para ejecutar un host. De hecho, es posible iniciar Docker con un host
mínimo que solo ejecute un kernel de Linux compatible con Docker (Schenker, 2018).
Bases de Datos para el Big Data
16
Tema 10. Ideas clave
Actualmente, existen muchas distribuciones de kernel Linux totalmente compatibles
con Docker.
Cómo funciona Docker
En un principio Docker usaba LinuX Containers (LXC) para crear sus contenedores,
pero posteriormente cambió a runC (libcontainer). Este último se ejecuta en el mismo
sistema operativo que su host, permitiendo compartir los recursos del sistema
operativo del host. El sistema de archivos que utiliza se basa en capas (AuFS) y
permite gestionar las redes del mismo.
AuFS es un sistema de archivos basado en capas, lo cual permite que se fusionen
capas de solo lectura y capas de escritura. En una capa de solo lectura se pueden
almacenar las partes comunes del sistema operativo y luego dotar a cada contenedor
con su propio montaje para escritura. Esto a su vez permitiría compartir entre todos
sus contenedores la capa del sistema operativo.
Supón que dispones de una imagen de contenedor de 2 GB. Si se usa una máquina
virtual completa, se necesitan los 2 GB multiplicados por la cantidad de máquinas
virtuales que demandes. Al usar Docker y AuFS, puedes compartir la mayor parte de
esos 2 GB entre todos los contenedores y, entre 30 contenedores, no llegar a ocupar
más de 2 GB de espacio en el sistema operativo de los contenedores (suponiendo,
claro, que todos ejecutan el mismo sistema operativo).
Máquinas virtuales vs. Docker
Una máquina virtual completa utiliza su propio conjunto de recursos asignados y
© Universidad Internacional de La Rioja (UNIR)
comparte los mínimos recursos posibles. Está mucho más aislada y por ello es muy
pesada (requiere más recursos propios). Docker ofrece menos aislamiento, pero sus
contenedores son más livianos (requieren menos recursos). Esto último permite que
Bases de Datos para el Big Data
17
Tema 10. Ideas clave
se ejecuten muchos contenedores en un mismo host sin destrozarlo (McKendrick et
al., 2017).
Figura 7. Implementación de un contenedor Docker vs. una máquina virtual. Fuente:
[Link]
En el caso de máquinas virtuales completas, en un host es probable que el número
de máquinas ejecutándose a la vez sea muy limitado. Por otro lado, una máquina
virtual suele tardar unos minutos en iniciarse (como cualquier sistema operativo
común), mientras que los contenedores Docker/LXC/runC tardan unos pocos
segundos.
Existen pros y contras para cada tipo de virtualización. Si se necesita un aislamiento
total con recursos garantizados, una máquina virtual completa es la mejor opción. Si
por el contrario solo desea aislar procesos concretos entre sí y desea ejecutar muchos
de ellos en un único host de tamaño razonable, Docker/LXC/runC podría ser de
mucha utilidad.
Componentes de Docker
© Universidad Internacional de La Rioja (UNIR)
Los componentes centrales que constituyen Docker son:
El cliente y el servidor de Docker.
Imágenes.
Bases de Datos para el Big Data
18
Tema 10. Ideas clave
Registros.
Contenedores.
Cliente y servidor de Docker
Docker es una aplicación cliente-servidor. El cliente se comunica con el servidor o
demonio de Docker, que es quien hace todo el trabajo. Docker incluye cliente
mediante línea de comandos, el cual implementa una API RESTful completa. Tanto el
servidor (demonio) como el cliente de Docker se pueden ejecutar en un mismo host.
También es posible que el cliente Docker local se conecte a un demonio remoto
alojado en otro host (Turnbull, 2019).
Imágenes
Las imágenes son los componentes básicos de Docker. Los contenedores se ejecutan
a partir de imágenes concretas. Las imágenes definen el ciclo de vida de Docker y se
basan en un formato en capas. Dichas capas utilizan sistemas de archivos que se
crean paso a paso mediante una serie de instrucciones.
Las imágenes son el «código fuente» de su contenedor, son portables y, lo más
importante, se pueden compartir, almacenar y actualizar.
Registros
Existen dos tipos de registro: públicos y privados. Docker almacena las imágenes que
crea en registros. Docker, Inc., utiliza un registro público de imágenes, llamado
Docker Hub. Es recomendable crear una cuenta en Docker Hub y usarla para
© Universidad Internacional de La Rioja (UNIR)
compartir y almacenar tus propias imágenes.
Considera Docker Hub como un repositorio de imágenes al que nos conectamos para
descargar dichas imágenes. En el último recuento, existen más de 10 000 imágenes
que otros usuarios han creado y compartido.
Bases de Datos para el Big Data
19
Tema 10. Ideas clave
También es posible almacenar imágenes privadas para compartirlas solo con quien
consideres oportuno. Estas imágenes pueden incluir código fuente u otra
información que desees mantener segura o solo compartir con otros miembros de tu
equipo u organización.
Contenedores
Docker permite crear e implementar contenedores donde luego empaqueta
aplicaciones y servicios. A partir de las imágenes, los contenedores se lanzan con uno
más proceso en ejecución. Algunos autores como James Turnbull (2019) definen un
contenedor como:
Un formato de imagen.
Un conjunto de operaciones estándar.
Un entorno de ejecución.
El concepto de contenedor es similar al de contenedor de mercancía, utilizado para
el transporte a nivel internacional. La diferencia principal es que Docker mueve
aplicaciones software en sus contenedores. Cada contenedor contiene una imagen
de software sobre la que es posible realizar un conjunto de operaciones, por ejemplo,
crear, iniciar, detener, reiniciar y destruir (Turnbull, 2019).
Docker no tiene en cuenta qué contiene el contenedor. Al manipularlo,
independientemente de si un contenedor es una aplicación web, una base de datos
u otra cosa, cada contenedor se carga igual que cualquier otro. Dicho contenedor se
cargará en su ordenador personal, en un servidor o en un registro, para luego
descargarlo en un servidor físico o virtual, o implementarlo en un clúster de hosts
© Universidad Internacional de La Rioja (UNIR)
Amazon EC2.
Bases de Datos para el Big Data
20
Tema 10. Ideas clave
10.7. Manos a la obra con Docker
En este apartado llevarás a cabo la instalación de Docker sobre Windows.
Posteriormente, crearás un contenedor de desarrollo con MongoDB en su versión
más reciente.
Instalar Docker Desktop en Windows
En Google, ubica el ejecutable de Docker Desktop para Windows. Cuando lo hayas
descargado, ejecuta dicho instalador. Visita la página de Docker Hub para más
información.
Figura 8. Opciones de instalación disponibles en Docker Hub.
Si aún no has descargado el instalador (Docker Desktop [Link]), puedes
obtenerlo de Docker Hub. Por lo general, se descarga en la carpeta de Descargas,
aunque también puedes ejecutarlo desde la barra de descargas recientes en la parte
inferior de tu navegador web.
La instalación en algún momento te pedirá que habilites la opción Enable Hyper-
V Windows Features. Asegúrate que esté seleccionada en la página Configuración.
© Universidad Internacional de La Rioja (UNIR)
Sigue las instrucciones del instalador, autoriza las diferentes opciones de acceso a
recursos de tu ordenador.
Si tu cuenta de administrador es diferente a tu cuenta de usuario, debes agregar
el usuario al grupo docker-users. Ejecuta Computer Management como
administrador y dirígete a Usuarios y Grupos locales> Grupos> docker-users. Haz
Bases de Datos para el Big Data
21
Tema 10. Ideas clave
clic derecho para agregar el usuario al grupo. Cierra la sesión y vuelve a iniciarla
para que los cambios surtan efecto.
Iniciar Docker Desktop
Docker Desktop no se inicia automáticamente después de la instalación. Para iniciar
Docker Desktop, debes buscar Docker en Inicio y seleccionar Docker Desktop en los
resultados de la búsqueda.
Figura 9. Menú Inicio y la opción Docker Desktop después de instalado.
Cuando el icono de la ballena en la barra de tareas permanezca fijo, Docker Desktop
estará en funcionamiento y listo para ser usado desde cualquier consola.
© Universidad Internacional de La Rioja (UNIR)
Figura 10. Aviso de Docker en ejecución sobre Windows.
Bases de Datos para el Big Data
22
Tema 10. Ideas clave
Cuando se completa la inicialización, Docker Desktop inicia el tutorial de
incorporación. El tutorial incluye un ejercicio simple para crear una imagen de Docker
de ejemplo, ejecutarla como un contenedor, empujar y guardar la imagen en Docker
Hub.
Figura 11. Inicio de Docker Desktop sobre Windows.
Las instrucciones de instalación se basan en las indicaciones de la página oficial de
Docker Inc. Consulta la URL oficial para mayor información: Docker Inc Instalación.
10.8. Iniciar un contenedor con MongoDB
Paso 1: instala la imagen de MongoDB en su Servidor Docker Desktop.
> docker pull mongo
© Universidad Internacional de La Rioja (UNIR)
Figura 12. Instalación de imagen de MongoDB en Docker.
Bases de Datos para el Big Data
23
Tema 10. Ideas clave
Paso 2: si deseas instalar una versión concreta, debes indicar la versión
correspondiente, por ejemplo:
> docker pull mongo:4.2.2
Paso 3: consulta todas las imágenes que tienes instaladas en tu ordenador:
> docker images
Figura 13. Consulta de imágenes disponibles Docker sobre Windows.
Paso 4: crea un directorio donde almacenar los documentos de la base de datos.
Por ejemplo: E:/MongoDB/mongodata.
Paso 5: despliega una instancia de MongoDB como contenedor; para ello escribe
la siguiente instrucción:
> docker run -it -v e:/MongoDB/mongodata:/data/db --name mongodb -d mongo
• -it: proporciona una shell para comunicarse con el contenedor.
• -v: asocia la ruta local E:/MongoDB/mongodata con la ruta del contenedor
/data/db-. Cuidado: Docker te pedirá permisos para acceder al disco E.
• -d: el contenedor se inicia en background (podemos hacer otras cosas en la
© Universidad Internacional de La Rioja (UNIR)
terminal).
• --name: nombre del contenedor.
Bases de Datos para el Big Data
24
Tema 10. Ideas clave
Figura 14. Visualizar imágenes en Docker sobre Windows.
Paso 6: consulta los contenedores activos en tu servidor Docker:
> docker ps
Figura 15. Consultar imágenes de Docker sobre Windows.
Paso 7: realiza las siguientes operaciones con tu nuevo contenedor.
• Para el contenedor.
• Vuelve a ponerlo en marcha.
• Vuelve a parar el contenedor.
• Borra dicho contenedor.
> docker stop 72b9d3fdc0d9
> docker start 72b9d3fdc0d9
> docker stop 72b9d3fdc0d9
> docker rm 72b9d3fdc0d9
Para manipular el contenedor, se recomienda usar el id del mismo. Este id se asigna
al momento de crearse y es la forma como podemos referirnos a él.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
25
Tema 10. Ideas clave
Figura 16. Detener y borrar un contenedor en Docker sobre Windows.
Paso 8: vuelve a crear el contenedor con la siguiente instrucción:
> docker run -it -v e:/MongoDB/mongodata:/data/db -p 27017:27017 --name
mongodb -d mongo
Figura 17. Ejecutar contenedor de Docker sobre Windows.
Ahora hemos añadido la opción –p, la cual permite establecer el puerto de mongo en
nuestro ordenador y luego el puerto de mongo en el contenedor.
Paso 9: atención, es muy probable que, al ejecutar este paso, el contenedor de
mongodb no se haya levantado correctamente. Comprueba que el contenedor
está funcionando (Paso 6). Si la columna STATUS indica «Exit» en su contenido o
el puerto PORTS está vacío, significa que tu contenedor no está levantado.
Paso 10: comprueba que el contenedor se creó, pero no se levantó:
© Universidad Internacional de La Rioja (UNIR)
> docker ps –al
Bases de Datos para el Big Data
26
Tema 10. Ideas clave
Figura 18. Ejecutar contenedor de Docker sobre Windows especificando puertos.
Paso 11: consulta el log del contenedor creado, utiliza la siguiente instrucción:
> docker logs mongodb
Figura 19. Visualizar el log del contenedor de Docker sobre Windows.
Paso 12: ¿puedes deducir cuál es el problema? Tómate tu tiempo y repasa
mentalmente los pasos 4 a 11. Revisa la información del log de MongoDB y deduce
cuál puede ser el problema. No continúes con el siguiente paso hasta que no
identifiques el problema tú mismo.
Paso 13: ¡enhorabuena! Has dado con el error. Asignaste la ruta
E:/MongoDB/mongodata, como directorio para los datos. Al hacerlo, MongoDB
© Universidad Internacional de La Rioja (UNIR)
creó allí copia de todos tus datos. Cuando borraste el contenedor, no borraste lo
que había en este directorio y, al crear un nuevo contenedor, MongoDB se
encontró allí con el directorio ocupado y no pudo crear los nuevos ficheros de la
base de datos. Borra el contenedor creado (revisa el Paso 7 y el Paso 10), limpia
este directorio o asigna otro diferente y vuelve a crear el contenedor (Paso 8).
Bases de Datos para el Big Data
27
Tema 10. Ideas clave
Figura 20. Visualizar imágenes ocultas o con errores en Docker sobre Windows.
Paso 14: conéctate a la consola de mongodb (tu contenedor) y ejecuta algunas
instrucciones como las siguientes.
• Lista las bases de datos existentes.
• Crea una base de datos llamada productos.
• Inserta en esta base de datos el documento {"nombre": "teclado", tipo:
"hardware", coste: 125.12, moneda: "EURO"}). Utiliza exit dos veces para
salir de mongo y la consola Bash.
> docker logs mongodb
Escribe mongo en la terminal Bash.
© Universidad Internacional de La Rioja (UNIR)
Figura 21. Ejecutar contenedor MongoDB de Docker sobre Windows.
Bases de Datos para el Big Data
28
Tema 10. Ideas clave
Figura 22. Usar el contenedor MongoDB de Docker sobre Windows.
Paso 15: utiliza MongoDB Compass para conectarte a tu contenedor. MongoDB
Compass se instala por defecto con el instalador de MongoDB. En los temas
anteriores es probable que ya hayas hecho la instalación de MongoDB y, por ende,
de Compass.
• Si esto es así, para el servicio local de MongoDB en tu ordenador (Servicios en
Windows, buscar MongoDB en la lista y Detener).
• Luego, ejecuta MongoDB Compass y New Connections, da clic en Connect.
• Repara en que no indicas la URL de conexión, MongoDB usa la URL de conexión
por defecto. La URL de conexión del contenedor coincide con tu URL de
conexión al servidor de mongo que instalaste en los temas anteriores. Esto es
así porque nunca cambiaste el puerto por defecto.
• Desde Compass, consulta la base de datos productos y la colección que creaste
en el Paso 14. Si no has sido capaz de llegar a este punto, consulta en el Foro
todas tus dudas.
© Universidad Internacional de La Rioja (UNIR)
Figura 23. Conectar MongoDB Compass local con una instancia de Docker sobre Windows.
Bases de Datos para el Big Data
29
Tema 10. Ideas clave
Figura 24. Visualizar datos de MongoDB en instancia de Docker sobre Windows.
27017 es el puerto predeterminado para instancias mongod y mongos.
27018 es el puerto predeterminado para mongod cuando se ejecuta con la
opción de línea de comandos --shardsvr o el valor de shardsvr para la
configuración clusterRole en un archivo de configuración.
27019 es el puerto predeterminado para mongod cuando se ejecuta con la
opción de línea de comandos --configsvr o el valor configsvr para la
configuración clusterRole en un archivo de configuración.
Después de leer todo el tema, en el vídeo «Cloud computing: aspectos claves» podrás
repasar la definición de cloud, los modelos de cloud que existen y los tipos de servicios
que se ofrecen a través de él.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
30
Tema 10. Ideas clave
Vídeo 1. Cloud computing: aspectos claves.
Accede al vídeo a través del aula virtual
10.9. Referencias bibliográficas
McKendrick, R., Raj, P., Chelladhurai, J. S., y Singh, V. (2017). Docker Bootcamp. Packt
Publishing.
Oracle. (2021). ¿Qué significa «Cloud Computing»? [Página web].
[Link]
computing/#:~:text=En%20t%C3%A9rminos%20sencillos%2C%20Cloud%20C
omputing,pagar%20por%20lo%20que%20consumen.
Turnbull, J. (2019). The Docker book: containerization is the new virtualization. James
Turnbull.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
31
Tema 10. Ideas clave
A fondo
Cloud computing: Cloud Analytics with Google Cloud Platform
Thodge, S. (2018). Cloud Analytics with Google Cloud Platform: An end-to-end guide to
processing and analyzing big data using Google Cloud Platform. Packt Publishing.
Este libro combina el poder de la analítica y la computación en la
nube para obtener información más rápida y eficiente. Describe
el concepto de analítica en la nube y cómo las organizaciones lo
utilizan; también muestra las consideraciones de diseño mientras
aplica una solución de analítica en la nube.
Accede al documento a través de la Biblioteca Virtual UNIR
Cloud computing: methodology, systems, and applications
Wang, L., Ranjan, R., Chen, J. y Benatallah, B. (2011). Cloud computing: methodology,
systems, and applications. Taylor & Francis Group.
En este libro se cuenta cómo la computación en la nube ha creado
un cambio del uso de hardware físico y plataformas habilitadas
por software administradas localmente al de servicios
virtualizados alojados en la nube. La nube ensambla grandes
© Universidad Internacional de La Rioja (UNIR)
redes de servicios virtuales, que incluyen hardware (CPU,
almacenamiento y red) y recursos de software (bases de datos,
sistemas de cola de mensajes, sistemas de monitoreo y balanceadores de carga).
Accede al documento a través de la Biblioteca Virtual UNIR
Bases de Datos para el Big Data
32
Tema 10. A fondo
Post de ayuda de Docker Inc.
Docker Inc. (2020). Home [Página web]. [Link]
Mortensen, P. (28 de agosto de 2018). How is Docker different from a virtual machine?
Stack overflow [Mensaje en un foro].
[Link]
virtual-machine
Documentación de apoyo donde se describen las características de los contenedores
en Docker.
Documentación oficial: Docker Hub
Docker Inc. (2020). Docker Hub Quickstart [Página web].
[Link]
Docker Hub es un servicio proporcionado por Docker para buscar y compartir
imágenes de contenedores con tu equipo. Es el repositorio de imágenes de
contenedores más grande del mundo con una variedad de fuentes de contenido que
incluyen desarrolladores de comunidades de contenedores, proyectos de código
abierto y proveedores de software independientes (ISV) que crean y distribuyen su
© Universidad Internacional de La Rioja (UNIR)
código en contenedores.
Bases de Datos para el Big Data
33
Tema 10. A fondo
Curso de introducción a Docker
Fazt Code. (10 de mayo de 2020). Docker, Curso Práctico para principiantes (desde Linux)
[Archivo de vídeo]. [Link]
Este vídeo es una introducción práctica a Docker desde Linux. En este ejemplo se
aprende a instalar este programa para la creación y administración de contenedores.
También se enseñan los comandos básicos.
Bibliografía
Kane, S. P., & Matthias, K. (2018). Docker: up & running: shipping reliable containers
in production. O'Reilly Media.
Kropp, A., & Torre, R. (2020). Docker: containerize your application. En Computing in
Communication Networks (pp. 231-244). Academic Press.
Miell, I., & Sayers, A. (2019). Docker in practice. Simon and Schuster.
© Universidad Internacional de La Rioja (UNIR)
Nickoloff, J., & Kuenzli, S. (2019). Docker in action. Simon and Schuster.
Surovich, S., & Boorshtein, M. (2020). Kubernetes and Docker-An Enterprise Guide:
Effectively containerize applications, integrate enterprise systems, and scale
applications in your enterprise. Packt Publishing Ltd.
Bases de Datos para el Big Data
34
Tema 10. A fondo
Test
1. ¿Cuáles son los beneficios del cloud computing?
A. Escalabilidad, flexibilidad, seguridad, pago por uso…
B. Flexibilidad, pago por uso y seguridad.
C. Escalabilidad y portabilidad.
D. Ninguno de los anteriores.
Los beneficios del cloud computing son muchos, pero los más mencionados son estos.
2. ¿Cuántos modelos de cloud existen?
A. Dos: público y privado.
B. Tres: público, privado y de pago.
C. Tres: público, privado e híbrido.
D. Ninguno de los anteriores.
Los tres modelos de cloud son público, privado e híbrido. Los privados son de pago.
3. Una afirmación verdadera sobre SaaS:
A. SaaS es ofrecer servicios de sistemas operativos virtualizados.
B. Se centra en alojar e implementar software del cliente en el cloud para que
este luego lo use a demanda.
C. Significa Software como Servicio y ofrece al cliente licencia de todo tipo de
software.
D. El cliente usa este servicio como repositorio para guardar todo el software
que compra la compañía y así no instalarlo en sus servidores principales.
El cliente aloja en cloud solo aquellos programas que le representen una alta
demanda de recursos en local. Estos recursos pueden ser capacidad de cómputo,
© Universidad Internacional de La Rioja (UNIR)
recursos físicos, etc.
Bases de Datos para el Big Data
35
Tema 10. Test
4. ¿En qué se parecen PaaS e IaaS?
A. En nada, cada uno ofrece servicios totalmente diferentes.
B. PaaS ofrece determinados servicios como parte de un contexto de
plataforma; IaaS, por su parte, puede que ofrezca servicios similares, pero de
forma independiente.
C. Ambos ofrecen servicios parecidos, solo que uno le da un enfoque más
corporativo y el otro se centra más en resolver problemas puntuales del cliente.
D. Ninguna de las anteriores es correcta.
Tal y como se indica, los servicios podrán ser similares en ciertos casos, pero el
enfoque del primero va orientado a que el cliente disfrute de las ventajas de toda una
plataforma de trabajo y no de servicios individualizados.
5. ¿Qué clase de servicio se podría considerar Google Docs?
A. IaaS.
B. PaaS.
C. SaaS.
D. PaaS y SaaS.
Google Docs ofrece software a sus clientes mediante el cloud, por ende, el modelo
de servicio que más se ajusta es SaaS.
6. El encargado de gestionar los recursos físicos y distribuirlos de forma equitativa
para que las virtualizaciones hagan uso de ellos es:
A. Docker.
B. Cloud computing.
C. SaaS.
D. Hipervisor.
Esta es la responsabilidad del hipervisor. Docker incorpora un hipervisor, pero existen
© Universidad Internacional de La Rioja (UNIR)
otros que utilizan otros mecanismos y configuraciones.
Bases de Datos para el Big Data
36
Tema 10. Test
7. Los componentes de Docker son:
A. Los registros.
B. Las imágenes.
C. Los contenedores.
D. Todos los anteriores son correctos.
Los tres anteriores y el cliente-servidor de Docker son sus componentes principales.
8. Para trabajar con contenedores en Docker, ¿qué es lo primero que debemos
descargar?
A. El propio contenedor.
B. Imágenes.
C. Registros.
D. Ninguno de los anteriores.
La imagen posee el kernel del sistema operativo sobre el cual se creará el contenedor.
Por lo tanto, es lo primero que debemos descargar.
9. ¿Qué hace el comando docker rm id_contenedor?
A. Borra todos los contenedores que se hayan creado previamente.
B. Borra el contenedor y limpia la imagen para crear nuevos contenedores.
C. Borra el contenedor cuyo id corresponde con el descrito siempre que esté
detenido.
D. Borra un contenedor cuyo id es id_contenedor.
Docker no permite borrar contenedores que se estén ejecutando, por ello,
previamente debemos detener el contenedor y luego borrarlo con esta instrucción.
Es necesario también usar el id del contenedor que se quiere borrar.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
37
Tema 10. Test
10. ¿Qué hace el comando docker images?
A. Muestra la lista de imágenes creadas o existentes.
B. Muestra las imágenes con sus correspondientes contenedores asociados.
C. Muestra las imágenes que se están ejecutando.
D. Ninguna de las anteriores.
Este comando permite visualizar todas las imágenes creadas hasta el momento en
Docker. Con él podrás conocer el repositorio de cada máquina, su etiqueta y el
tamaño del espacio ocupado.
© Universidad Internacional de La Rioja (UNIR)
Bases de Datos para el Big Data
38
Tema 10. Test