Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cochabamba – Bolivia
2018
Agradezco a Dios y a mis padres, que han
Resumen……………..…………………………………………………………………………………... 4
Introducción……………………...……………………………………………………………………… 5
1 GENERALIDADES…………………….………………………………………………………….. 6
1.1 Antecedentes……………………….……………………………………………………….. 6
1.3 Alcance…………………………………………...………………………………………… 7
1.6 Justificación……….....……………………………………………………………………… 8
2 METODOLOGÍA………………………………………………………………..…………………. 9
1
5.2 Bases de Datos Orientadas a Columnas….……….………………………………..…16
6.3 Redis…….……………………………….………………………………………………..… 28
7 CUADROS COMPARATIVOS 34
8 CONCLUSIONES……………………………………………………………………………..… 39
9 BIBLIOGRAFÍA………………………………………………………………………………….. 41
10 ANEXOS………………………………………………………………………………………….. 43
2
ÍNDICE DE CUADROS Y FIGURAS
CUADROS
FIGURAS
3
Resumen
Las bases de datos NoSQL1, forman una agrupación dentro de las bases de datos,
diferenciándose de las demás al no seguir al modelo de bases de datos relacionales y sus
propiedades.
Las bases de datos NoSQL hacen referencia a variedad de bases de datos que tienen el
propósito de solventar algunas limitaciones que el modelo relacional presenta, se caracterizan
por no tener esquemas, no usan SQL2 como parte fundamental en el lenguaje de consultas, no
aseguran cumplir con la propiedad ACID3, los datos almacenados en una BD4 no requieren
necesariamente cumplir con estructuras fijas como tablas, por lo regular no sostienen
5
operaciones de tipo JOIN y tienden a tener un escalamiento horizontal, ocupan un extenso
recurso de la memoria principal del ordenador, solventan las dificultades en el elevado volumen
de información y las innumerables cantidades de consultas y transacciones que se realizan de
forma diaria.
4
Introducción
La expresión NoSQL denota las palabras en Ingles Not only SQL. Se usa para asociar
sistemas de administración de bases de datos distintos a los acostumbrados relacionales. Los
conceptos de Big Data, Big Users, y Cloud Computing han impulsado intensamente el
crecimiento de la tecnología NoSQL.
Con el paso del tiempo algunas compañías como Google, Facebook, Amazon, Mozilla, Adobe,
McGraw-Hill Education, Linkedln descubrieron limitaciones en el uso de la tecnología relacional
y optaron por desarrollar sus propios sistemas. Con la iniciativa de apoyar estos proyectos se
desarrollaron proyectos de código abierto y otros comerciales.
La expresión NoSQL tuvo fuerza en 1991 en un artículo especial de Unix y más adelante en
1998 se lo nombró para referenciar a una base de datos open-source, esta se caracterizaba
por no usar una interface SQL, sin embargo seguía el modelo relacional. Posteriormente en el
año 2009, se reutilizó la expresión en un evento enfocado a las bases de datos no relacionales
dirigido por Eric Evans, a partir de ese entonces las tecnologías NoSQL empezaron a tener una
aceptación y crecimiento considerable.
5
1 GENERALIDADES
1.1 Antecedentes
Son cientos de aplicaciones web que utilizan algún tipo de bases de datos para estar
funcionales en la red. Hasta ahora en su mayoría estamos habituados a utilizar en nuestras
aplicaciones bases de datos SQL como ser: MySQL, Oracle, MS SQL, entre otras, sin embargo
desde hace algunos años han aparecido otras que reciben el nombre de NoSQL y que han
llegado con la intención de subsanar aquellas falencias que tienen las BD relacionales.
Brindando la posibilidad de que las empresas usen modelos híbridos por que puede darse la
situación donde una BD Relacional no satisfaga las necesidades y una BD NoSQL si lo haga o
viceversa.
Las Bases de Datos NoSQL surgen para solventar estos nuevos requerimientos proponiendo
una estructura de almacenamiento más versátil, aunque logren este objetivo descuidando
funcionalidades importantes como las transacciones y operaciones en diferentes colecciones
de datos.
6
1.3 Alcance
Mostrará las características más relevantes y se darán ejemplos de los diferentes tipos de
DBMS6 NoSQL agrupados en:
Almacenamientos clave-valor
Almacenamientos de documentos
Almacenamientos de Columnas
Bases de Datos de grafos
Elaborar una monografía de compilación para evidenciar las tendencias actuales en cuanto al
uso de BD para manejo de grandes volúmenes de información en la WEB.
En el campo de los datos, este cambio fue detenido. Desde que en 1970 Edgar F. Codd publicó
sobre bases de datos relacionales, este paradigma ha dominado el panorama de los datos
sobre los sistemas. Su longevidad es debido en gran parte a que es un modelo bien fundado en
bases matemáticas, que puede representarse fácilmente usando algoritmos computacionales.
Gracias a esto existe una oferta amplia de RDBMS7, hecho que a su vez ha llevado a los
desarrolladores a usarlos en prácticamente todas sus aplicaciones.
Aun así, se llegó a un punto en que seguir usando bases de datos relacionales para todos los
casos es simplemente inviable. Existen varios problemas, para escalar un sistema cada vez se
necesita escalar servidores costosos, pues, las BD hacen un escalamiento vertical, que hace
que la escalación de los sistemas resulte simplemente no rentable debido a que se debe
aumentar recursos al mismo hardware, como por ejemplo aumentar memoria etc., en cambio
las BD NoSQL hacen un escalamiento horizontal lo cual es más viable económicamente
hablando por que se agrega ordenadores con las mismas características en recursos.
Las bases de datos NoSQL de código abierto tienen una implementación rentable. Debido a
que no requieren las tarifas de licencia y pueden ejecutarse en hardware de precio bajo.
8
2 METODOLOGÍA
El método que se utilizó para elaborar esta monografía es el método Bibliográfico que,
constituye una metodología de investigación y recolección de información de diferentes autores
para formar un recopilado general acerca de la nueva generación de Bases de Datos NoSQL, la
finalidad es la integración de las descripciones de diferentes autores que tienen diferentes
conceptos o experiencias en el uso de bases de Datos Relacionales y las Bases de Datos
NoSQL que son las que estudiaremos en esta presente monografía.
En este documento se hace una comparación entre las Bases de Datos Relacionales con las
Bases de Datos NoSQL, enfocándonos en su concepto, funcionalidad, características y sus
diferentes tipos de Bases de Datos NoSQL que existen.
Con toda la información obtenida de las Bases de Datos Relacionales y las Bases de Datos
NoSQL se desarrolla un análisis comparativo de las características, funcionalidades y el uso
recomendado para este tipo de Base de Datos, con el objetivo de orientar de manera clara
acerca del correcto uso de Base de datos acorde a cada proyecto de software.
9
3 BASES DE DATOS RELACIONALES
Las Bases de Datos Relacionales son una colección de elementos de datos relacionados
entre sí. Estos elementos están organizados en un conjunto de tablas compuesto por columnas
y filas. Las tablas están diseñadas para guardar información referente a los objetos de las
bases de datos. Cada columna de una tabla almacena un determinado tipo de dato y un campo
almacena el valor real de un atributo. Las filas de la tabla representan una recopilación de
valores relacionados de un objeto o entidad. Cada fila de una tabla podría marcarse con un
identificador único denominado clave principal, mientras que filas de varias tablas pueden
relacionarse con claves extranjeras. Se puede obtener acceso a estos datos de muchas formas
distintas sin reorganizar las propias tablas de la base de datos.[2]
SQL o conocido como lenguaje de consulta estructurada es la interfaz principal que se utiliza
para comunicarse con bases de datos relacionales.
Las bases de datos relacionales para aplicar la integridad de los datos en la base de datos
utilizan un conjunto de restricciones.
Las transacciones en una base de datos son sentencias SQL que se ejecutan en secuencia de
operaciones con la finalidad de formar una unidad lógica única de trabajo.
Todas las transacciones de base de datos deben cumplir con la propiedad ACID para garantizar
la integridad de los datos.
La consistencia requiere que los datos insertados en la base de datos como parte de la
transacción deben cumplir todas las reglas definidas, todas las restricciones, cascadas y
disparadores.
El aislamiento asegura que una operación no puede afectar a otras, son independientes.
La durabilidad asegura que una vez realizada la operación, ésta persistirá y no se podrá
deshacer aunque falle el sistema.
Cumpliendo estos 4 requisitos un sistema gestor de bases de datos puede ser considerado
ACID complaciente.[3]
10
3.3 Características principales en bases de datos Relacionales:
Una base de datos relacional con una proyección de gran alcance se la puede diseñar de
manera sencilla, por lo que no se requiere un mínimo de conocimiento de programación.
El registro de datos es más simple porque el usuario introduce los datos y estos se almacena
en un bit sólo una vez. De esta manera se tiene una menor entrada de datos y se reduce el
riesgo en la entrada de datos.
Los datos obtenidos en las consultas se pueden almacenar y actualizar de acuerdo a las
necesidades del usuario.
El diseño fino de una base de datos relacional brinda la generación de metadatos, o datos
sobre los datos.[3]
Es recomendable usar una BD Relacional cuando se requiere que los datos a ser
almacenados sean consistentes sin probabilidad a tener errores en el registro, también si la
información a ser almacenada requiere estar bien estructurada para su correcta lectura y si se
desea mantener una jerarquía en los datos.
11
3.6 Motor de Base de Datos Relacional
El Motor de base de datos es el servicio principal para almacenar, procesar y proteger los datos.
El Motor de base de datos proporciona acceso controlado y procesamiento de transacciones
rápido para cumplir con los requisitos de las aplicaciones consumidoras de datos más exigentes
de su empresa. Se usa el Motor de base de datos para crear bases de datos relacionales para
el procesamiento de transacciones en línea o datos de procesamiento analíticos en línea, se
pueden crear tablas para almacenar datos y objetos de base de datos como índices, vistas y
procedimientos almacenados para ver, administrar y proteger los datos.[4]
Entre los motores más comunes de Bases de datos, se puede mencionar los siguientes que se
ven en el Cuadro 1:
DBMS Definición
12
4 BASES DE DATOS NoSQL
Las Bases de Datos NoSQL son Bases de Datos que se caracterizan por no seguir el modelo
relacional SQL, es decir no recuperan los datos en una estructura basada en tablas.
Las bases de datos NoSQL son más flexibles y de escalabilidad horizontal, de esta manera
permite usar y generar tipo de datos complejos y de cambios constantes.
Las bases de datos NoSQL permiten agregar datos nuevos en cualquier momento sin tener
que definirlos previamente en el esquema de la Base de Datos, de esta manera puede procesar
grandes volúmenes de datos sin estructura.
El esquema de las bases de datos NoSQL, es dinámico y permite realizar desarrollos ágiles,
donde las iteraciones son rápidas y significativas, eliminando así el tiempo de inactividad.[5]
Porque tiene un mejor rendimiento, porque permiten resolver problemas con el escalado de
grandes volúmenes de datos relacionales estructurados, a la vez que hacen posible la latencia
baja y un rendimiento alto.
Porque son más flexibles para utilizar cantidades masivas de datos estructurados,
semiestructurados y no estructurados, así como datos no relacionales.
Porque tiene variedad de opciones de bajo costo y código abierto que ofrecen una arquitectura
eficiente y escalada horizontalmente en vez de una arquitectura costosa y monolítica.
13
4.4 ¿Cuándo usar una base de datos NoSQL?
Es muy útil al usar en una minería de datos, porque permite acceder a todos los registros en y
en diferentes servidores para relacionarlos y analizarlos.
Muchas empresas proporcionan a sus usuarios practicar informática social a través de foros de
mensajes, blogs, etc.
Muchas empresas tienen la necesidad de integrar datos de diferentes puntos de negocio con el
objetivo de integrar todas las fuentes de datos externos.
Las empresas tienen poco control sobre el formato en los datos que reciben y la frecuencia con
la que estos cambian.
Algunas veces es prioritario utilizar la base de datos para tener un análisis en tiempo real para
obtener métricas de rendimiento en sitios web (visitas a páginas, visitas únicas, páginas más
visitadas, ultimo visitante, etc.), esta función por lo general se obtiene con herramientas como
Google Analytics pero no son en tiempo real; es por ello necesario construir sistemas que
proporcionan estadísticas básicas en tiempo real.[7]
14
5 PRINCIPALES BASES DE DATOS NoSQL
Una base de datos orientada a Clave - Valor (también nombrada como almacén de valores-
clave y base de datos key-value) pertenece a las bases de datos NoSQL y se caracteriza por
almacenar datos utilizando el método simple de clave-valor.
La expresión clave-valor hace referencia que los datos se almacenan en una agrupación de
pares clave / valor. Este es un método sencillo y eficaz de almacenar datos, y como resultado
se tiene un buen escalamiento.
En muchos lenguajes de programación se usa como referencia el par clave-valor. Los lenguajes
de programación generalmente se refieren a una clave-valor como una matriz asociativa o
estructura de datos. Una clave-valor también es conocido como diccionario o hash.
Un almacenamiento de valor-clave es una base de datos simple que hace uso del modelo de
datos fundamental donde se asocia cada clave con un solo valor dentro de una colección. Esta
relación es conocida como el par Clave-Valor.[9]
a) La clave
La clave es representada como una cadena o hash y el valor puede ser representado como
algún tipo de datos como una imagen, archivo o documento de preferencia de cada usuario. El
valor se almacena como un objeto tipo fichero de datos que no requiere modelado de datos
inicial o que esté definido en el esquema.
La clave se caracteriza en un par clave-valor por ser única para acceder al valor asociado a
esta clave. La clave para ser definida podría depender del DBMS. Sin embargo debe evitar
tener una clave demasiado larga.[9]
b) El valor
El valor también podría ser representado por una lista, u otro par clave-valor incluido dentro de
un objeto, en resumen el valor podría ser de cualquier tipo de dato.[9]
15
Como ejemplo se puede ver un listado simple de clave-valor que es representado por un
identificador único a través de la clave y que permite acceder al valor asociado a esa clave con
su valor respectivo en el Cuadro 2:
Clave Valor
José (123) 694-8210
Antonio (569) 543-4744
Luciana (123) 125-4519
Gabriel (981) 415-47892
Redis
Bases de Datos Oracle NoSQL
DynamoBD
Voldemorte
Aerospike
Oracle Berkeley DB
Las bases de datos orientadas a columnas con un DBMS, se caracterizan por almacenar los
datos en columnas en lugar de la filas, es decir los datos se almacenan de columna en
columna. Esto las convierte más eficientes a la hora de realizar consultas analíticas.
Una base de datos columnar en la actualidad está ganando mucha importancia porque brinda
una mejor propuesta de valor a la hora de la carga de datos, de la misma manera para usar en
un Datawarehouse, que es una base de datos corporativa que se caracteriza por integrar y
depurar información de una o más fuentes.
En una base de datos columnar, físicamente se encuentran juntos todos los valores de la
columna 1, seguido por la columna 2, columna 3 etc. Los datos son almacenados en orden de
16
registro, por lo que la entrada número 50 para la columna 1 y la entrada número 50 para la
columna 2 se encuentran en el mismo registro de entrada. Esto ayuda que a los elementos de
datos individuales, se acceda a través de columnas como un grupo en lugar de individualmente
fila por fila.[8]
Como ejemplo se puede ver una base datos de 4 columnas y 3 filas en el Cuadro 3.
17
Uno de los principales beneficios de una base de datos columnar es que tienen la factibilidad de
comprimir los datos. La compresión de datos permite en operaciones columnares como MIN,
MAX, SUM, COUNT y AVG se desarrollen muy rápidamente. Otra ventaja es que utiliza menos
espacio en disco en relación a una base de datos relacional que contenga los mismos datos.
Sin embargo, a medida que se incrementa la utilización de análisis de datos en memoria, los
beneficios relativos de la base de datos columnar comparados con los de las bases de datos
orientadas a filas pueden llegar a ser menos importantes. La analítica en memoria no tiene en
cuenta la eficiencia en lectura y escritura de datos en un disco duro. En su lugar los datos se
consultan en la memoria de acceso aleatorio RAM.[8]
Una base de datos orientada a documentos se caracteriza por almacenar grandes volúmenes
de información de forma organizada estructuralmente para que pueda ser encontrada y utilizada
fácilmente. Estos volúmenes de información son guardados en archivos y es administrada por
un gestor de bases de datos
Una Base de Datos orientada a documentos es representada en formatos XML 10, JSON o
BJSON11 incluso en formatos binarios como PDF12 y Microsoft Office (MS Word, Excel y
demás), de esa manera llega a ser más flexible en esquemas de datos dinámicos, teniendo
una reducción considerable en la complejidad de las consultas para datos asociados.
Los documentos se pueden recuperar por medio de consultas dinámicas e inciertas, de esta
manera las bases de datos orientada a documentos suelen asociar cualquier número de
campos de cualquier longitud en un documento, por ejemplo junto con el nombre de una imagen
de perfil de un cliente los datos de nacimiento. En otra circunstancia se puede adicionar otros
datos como edad, sexo, etc. incluso si no se tomó en cuenta al principio.
Como desventaja de este gestor de base de datos orientada a documentos es que el modelado
del código no afecta directamente a la base de datos, sino en la misma aplicación llegando a
tener limitaciones en las consultas.[7]
18
Como ejemplo podemos ver su estructura de un documento:
Hijos:[
{Nombre:"Juan",Edad:9},
{Nombre:"Maria", Edad:7},
{Nombre:"Elena", Edad:5},
{Nombre:"Marco", Edad:2}
MongoDB, de 10gen
RavenDB, de Hibernating Rhinos.
djondb
SimpleDB
IBM Lotus Domino
Terrastore
CouchDB, de Apache CouchDB
CouchBase
eXist
BaseX
19
5.4 Bases de Datos Orientadas a Grafos
Una base de datos orientada a grafos se identifica por guardar la información en forma de
nodos de un grafo y en otros nodos sus relaciones respectivas, de esta manera sigue la teoría
de grafos para leer la base de datos y la convierte muy eficaz a la hora de almacenar
información en modelos con infinidad de relaciones como son las redes y conexiones sociales.
Cada nodo se compone por un grado que señala el número de aristas que tiene, a su vez cada
grafo puede ser dirigido o no dirigido, dependiendo directamente si las aristas tienen nodos
origen y/o nodos destino. El manejo de este tipo de bases de datos orientado a grafos está
relacionado con la lógica de negocio donde se desee almacenar esta información respectiva,
ya que no se puede aplicar en todos los ambientes, o no se podrá dar uso en su amplitud del
potencial que maneja este modelo de grafos.
Las bases de datos orientadas a grafos cumplen las siguientes características que las hacen
especiales en comparación a bases de datos relacionales u otro tipo de bases de datos
NoSQL:
El almacenamiento realiza recorridos en el grafo sin utilizar un índice para interacción entre
nodos.
No es indispensable la declaración del tipo de datos entre los nodos y sus relaciones.
Se aplica la teoría de los algoritmos de grafos para encontrar el camino más corto.
El uso de las bases de datos orientadas a grafos puede tener ventajas en escenarios donde los
sistemas a implementar requieran de una adaptación constante a los cambios de lógica de
negocio, y en modelos donde existe una alta dependencia funcional entre las entidades
involucradas en un sistema. El rendimiento es una fortaleza clave para el uso de bases de datos
con grafos; en comparación con el uso de bases de datos relacionales, donde su Bases de
datos orientadas a grafos, donde su rendimiento está fuertemente ligado al tamaño de los datos
y las numerosas relaciones entre las entidades, implicando que el rendimiento en las consultas
esté inversamente proporcional a la totalidad de los registros y relaciones envueltas entre las
entidades que satisfacen la consulta.
En un sistema donde se utilizan muchos niveles de profundidad de datos relacionados entre sí,
se puede ver la eficacia y velocidad en la ejecución de consultas en bases de datos orientadas
a grafos.[10]
20
Algunos ejemplos de este tipo de Bases de Datos :
Neo4j
InfinityGraph
OrientDB
*Dex
RDF
AllegroGraph
Sones
21
6 BASES DE DATOS NoSQL MÁS UTILIZADAS EN LA ACTUALIDAD
6.1 MongoDB
Dentro de las bases de datos existentes NoSQL, MongoDB es la base de datos más usada y
muy diferente al de las bases de datos relacionales, de esta manera se está convirtiendo en una
interesante alternativa.
MongoDB es un sistema de bases de datos que se caracteriza por ser NoSQL o no relacional,
multiplataforma y creada en base a la unión de dos tipos de bases de datos como es la
documental y clave/valor, el término Mongo proviene del término en inglés "humongous" que
significa “extremadamente largo”. Está liberada bajo licencia de software libre. MongoDB en
lugar de guardar los datos en registros, guarda los datos en documentos. Estos documentos
son almacenados en formato BJSON (JSON Compilado), de esta manera tiene la libertad de
manejar un esquema libre. En MongoDB no se usa tablas, no tiene registros y lo que es más
importante, no usa SQL. De esta manera MongoDB se convierte en una buena alternativa para
almacenar los datos de nuestras aplicaciones.[11]
{
Nombre: "Alberto",
Apellidos: "Quiroz Ramos",
Edad: 27,
Deportes: ["fútbol","tenis","ciclismo"],
Amigos: [
{
Nombre:"Elena",
Edad:25
},
{
Nombre:"Ana",
Edad:27
}
]
}
22
El documento anterior es un documento JSON, que presenta strings, arrays, subdocumentos y
números. En la misma colección se puede guardar un documento de otra manera:
{
Nombre: "Simón",
Estudios: "Ingeniería Comercial",
Amigos:7
}
Ambos documentos no siguen el mismo esquema, tiene diferentes campos, esto es algo
impensable en una base de datos relacional, sin embargo es muy permitido en MongoDB.
MongoDB realiza las consultas pasando objetos JSON como parámetro, sin embargo está
desarrollado en lenguaje C++,. En los propios documentos se almacenan en BJSON. Por
ejemplo:
db.Usuarios.find({Nombre:"Antonio"});
La consulta anterior realiza una búsqueda en todos los usuarios cuyo nombre sea Antonio.
MongoDB viene por defecto con una consola construida sobre JavaScript desde la que
podemos ejecutar los distintos comandos, también se puede definir variables, funciones o
utilizar bucles.
MongoDB se puede utilizar en variedad de los proyectos que son desarrollados en la actualidad.
Cualquier aplicación que necesite almacenar datos semi estructurados puede usar MongoDB.
como son las típicas aplicaciones CRUD13.
MongoDB no tiene capacidad para uso de transacciones, Solo garantiza operaciones atómicas
a nivel de documento. Si las transacciones son algo indispensable en el desarrollo, se debe
pensar en otro sistema de BD.
Al necesitar consultas del tipo JOINS se debe realizar consultas de agregación. MongoDB
tiene un framework para realizar consultas de este tipo llamado Aggregation Frameworko o Map
Reduce. Sin embargo estos métodos no se comparan al sistema relacional. Si se necesita
explotar informes complejos, se debe pensar en utilizar un RDBMS clásico.[12]
La instalación es sencilla, primero se debe bajar los binarios para el sistema operativo. Existen
versiones para Windows, Linux y MacOs. Una vez bajado el binario correspondiente se puede
arrancar el servicio de MongoDB con un solo comando:
Con este comando se arranca el servicio MongoDB e iniciará y escuchará las peticiones a
través del puerto 27017. También es importante el parámetro --dbpath, con la ruta dónde se
almacenarán los ficheros de nuestra base de datos.[11]
24
6.2 Cassandra
Se tiene una disponibilidad continua, tanto para los datos como para los nodos, lo que
permite que siempre el sistema esté en funcionamiento.
Todos los nodos tienen la capacidad de leer y escribir, lo que quiere decir que es una
arquitectura descentralizada, evitando cuellos de botella de red.
Puede manejar diferentes modelos de datos, tanto los relacionales como los no-
relacionales, con altas tasas de lectura y escritura.
La escalabilidad lineal permite aumentar los nodos, sin producir pérdidas en producción,
reconociendo inmediatamente la mejora en el desempeño del sistema.
Maneja un lenguaje conocido como CQL14, que es una especie de SQL para hacer más
sencilla la transición de las personas que vienen del mundo de las bases relacionales.
Cassandra funciona basado en un modelo de datos compuesto en filas particionadas que son
almacenadas en tablas con un nivel de consistencia configurable. Las tablas se indexan por
medio de llaves e indica que el primer componente de la llave primaria de una tabla, primary
key, es la llave de partición, partition key. Estas son definidas por las columnas que definen una
entrada en la tabla. Dentro de cada partición, las filas se almacenan siguiendo el orden de las
columnas restantes que conforman la llave, estas son la llamadas clustering keys.
El nivel de consistencia hace mención a como se sincronizan y actualizan réplicas de las filas
de datos a lo largo del cluster (nodos). El nivel de consistencia viene marcado en cada lectura o
escritura en función de las necesidades de velocidad y precisión.
La interfaz primaria y por defecto para comunicarnos con Cassandra es CQL. Su sintaxis es
muy similar a SQL con la principal diferencia de que Cassandra no soporta joins o subqueries.
Para ejecutar sentencias CQL, Cassandra viene con una herramienta por consola llamada
Cqlsh.[14]
26
6.2.2 Uso de Cassandra
Cuando se requiere una base de datos que permita una escalación lineal con alto rendimiento y
de alta disponibilidad, es una gran opción optar por Cassandra.
Cuando se trabaja con grandes cantidades de datos y preferimos la velocidad para acceder a
los datos en comparación a necesitar la normalización de estos datos, entonces Cassandra es
una buena opción.
Apple usa 75,000 nodos de Cassandra para iMessage, iTunes passwords y otros
servicios más
La Organización Europea para la Investigación Nuclear, más conocida como Cern, usa
un prototipo basado en Cassandra para el experimento ATLAS15 para archivar su
sistema de monitorización on-line
Netflix usa Cassandra como base de datos de back-end para su servicio de streaming
eBay lo utiliza, entre otros, para anotar los clic del usuario en los botones "Like", "Want"
or "Own" en su página de favoritos.
Con la instalación, varias herramientas son instaladas en el sistema, una de ellas es la interfaz
web de Cassandra llamada OpsCenter, a la cual se debe ingresar si colocamos en nuestro
navegador la siguiente dirección:
http://localhost:8888/opscenter/index.html
Esta interfaz permite realizar varias acciones, aunque no es lo más óptimo para trabajar con
Cassandra.[14]
6.3 Redis
El desarrollo de Redis fue iniciado por Salvatore Sanfilippo a principios del 2009, para acelerar
los tiempos de respuesta de un producto de servicio web llamado LLOGG 16. Pronto fue
ganando popularidad, hasta que en Marzo del 2012 la empresa VMWare17 contrató a Salvatore
para trabajar a tiempo completo en Redis. Poco después VMWare contrató también a uno de
los principales desarrolladores de Redis, Pieter Noordhuis. Desde entonces Redis ha
evolucionado muy rápidamente, incluyendo funcionalidades que le hacen tan útil.
Redis es un motor de base de datos open source con licencia BSD 18 y viene del acrónico de
Remote Dictionary Server (servidor de diccionario remoto). Es un depósito de estructura de
datos de valores de clave en memoria rápido y de código abierto, es decir basa su
funcionamiento en el uso de tablas de hashes (clave – valor) además incorpora un conjunto de
estructuras de datos en memoria versátiles que permiten crear con facilidad diversas
aplicaciones personalizadas, también puede llegar a usarse como base de datos persistente.
Entre los casos de uso principales de Redis se encuentran el almacenamiento en caché, la
administración de sesiones, pub/sub y las clasificaciones. Es el almacén de valores de clave
más popular en la actualidad. Está escrito en código C optimizado y admite numerosos
lenguajes de desarrollo.[16]
28
6.3.1 Funcionamiento de Redis
Redis asiente ajustar la información usando las siguientes estructuras de datos que puede
reconocer:
a) Strings
En Redis un string es una serie de bytes, lo que permite almacenar cualquier dato, como
cadenas de texto, números, imágenes, vídeos, o un objeto serializado.
La información recolectada es opaca para la BBDD, lo que significa que ésta no tiene noción de
la estructura de la información, ni tiene capacidad para operar sobre ella, permite utilizarlo para
generar identificadores únicos desde múltiples clientes, o en general para casos de uso en los
que se requieran contadores, como contabilizar votos de usuarios, visualizaciones de
productos, cantidades compradas de un artículo, visitas a una página, en otras palabras se
puede usar los strings para almacenar y recuperar información como sesiones de usuario,
carritos de la compra, contadores, caché de HTML, caché de consultas a BBDD o llamadas a
un API, y en general objetos serializados en XML, JSON o cualquier otro formato.[17]
b) List
Las listas permiten coleccionar secuencias de strings en el orden en el que fueron insertadas,
también permiten casos de uso del tipo “muéstrame las últimas n actualizaciones de algo”. Las
listas en Redis también se usan para implementar sistemas del tipo productor-consumidor, en
los que un proceso añade tareas a la lista, y uno o más procesos sacan dichas tareas de la lista
para llevarlas a cabo, disponiendo la capacidad de limitar el número de elementos de una
lista.[17]
c) Sets
Los sets son colecciones de strings, sin ningún orden particular, en los que se garantiza que los
elementos del mismo son únicos y no pueden estar duplicados. Se debe añadir el mismo
elemento 10 veces, pero Redis garantiza que sólo existirá una vez, lo que permite añadir
elementos sin tener que preocuparse previamente de si ya existen o no.[17]
d) Sorted Sets
Son conjuntos agrupados con las propiedades de estos sets, que además permiten la
ordenación de los elementos en base a un valor (score) numérico asociado a cada uno de ellos.
Es importante aclarar que la unicidad de los elementos se hace sólo teniendo en cuenta los
datos almacenados, y no el valor del score. Si se añade el mismo elemento varias veces con
29
distintos valores del score, el elemento sólo existirá una vez, y el score será el de la última
actualización.
Otro caso de uso que sea tan conocido, es utilizar este tipo de dato como un índice para otras
estructuras que se tengan que almacenar en Redis. Si por ejemplo se tiene un hash de usuarios
con la información de los mismos, se puede recuperar la información de un usuario de manera
muy rápida por la clave asociada al hash, pero no por cualquier otro atributo del usuario. Para
remediar esto, se puede utilizar un set ordenado como índice secundario en el que se mantenga
el atributo que se desea indexar. Se suele utilizar para generar índices invertidos para sistemas
de búsqueda con autocompletado.[17]
e) Hashes
Un hash permite asociar a una clave una colección de pares clave-valor, habitualmente usado
para representar objetos. Con un hash se puede almacenar cualquier entidad con sus atributos
asociados (como una especie de tabla o diccionario), de forma que se pueda recuperar
únicamente el atributo de interés en cada momento. Además, Redis almacena los hashes de
forma muy eficiente, lo que permitirá sacar el máximo partido a la memoria disponible.
Redis gestiona la información en memoria, lo que hace que sea muy rápido almacenando y
recuperando datos, a la vez que permite persistir los datos en disco. Además se puede
configurar la expiración automática de las claves, y tiene funcionalidades de
publicación/suscripción (para crear canales), pipelines para ejecutar comandos en grupo y
transacciones.
Con todas estas capacidades, Redis es una base de datos clave-valor que ayudará a resolver
más casos de negocio de los que hubiéramos imaginado.[17]
El principal uso que se da a Redis es de caché para plataformas web y que acceden miles de
usuarios registrados por hora por ejemplo cada vez que un usuario visita una página de una
plataforma, se debe hacer varias consultas a la base de datos para saber si ese usuario con
esa cookie está registrado y está autorizado para ver esa página.
30
Si por ejemplo por promedio se tiene 10.000 usuarios por hora y cada usuario se ha movido por
una plataforma unas 50 veces, querrá decir que tendrás que hacer medio millón de consultas a
la base de datos por hora, conectarte, mandarle los datos, esperar a que responda, procesar la
información y devolverla al usuario. Esto con Redis no pasaría ya que, si retendrías en memoria
la primera vez los datos del usuario, se ahorraría 490.000 consultas de verificación por hora. Al
final del día se habrá ahorrado más de 11 millones de peticiones a la base de datos para ver si
el usuario está autentificado; Redis es ideal para retener archivos en memoria, dado que al
almacenar la información en RAM ésta es muy rápidamente accesible.[16]
Tiene soporte para PHP19, no dispone de un estándar ya preinstalado en PHP por lo que se
debe instalar el módulo si se desea usar Redis para PHP.
Los lenguajes soportados por Redis son los siguientes: Lua, PHP, Ruby, Python, ActionScript,
C, C++, C#, Clojure, Common Lisp, Erlang, Go, Haskell, haXe, Io, Java, Node.js, Objective-C,
Perl, Pure Data, Scala, Smalltalk y Tcl.[16]
No se recomienda usar Redis para guardar tablas enteras ni muchos datos, debido a que
almacena los datos en la memoria del servidor. Aunque si está permitido guardar datos en
JSON (realmente se guarda en String) y aunque se puede conseguir crear una especie de
tablas, Redis está pensando sobre todo como una base de datos Clave-Valor.[16]
31
6.3.4 Instalación de Redis
Actualmente Redis no ofrece soporte oficial para Windows, pero puedes instalar una de las
versiones del grupo de desarrollo de Microsoft Open Technologies, Inc a través de los
repositorios de github https://github.com/MicrosoftArchive/redis. Microsoft Open Technologies,
Inc se ha encargado del desarrollo y mantenimiento de Redis para Windows, si se desea
montar esto en producción se debe asegurar que está configurado para ello.
Para los que usan sistemas operativos como Linux o Mac, la instalación es más sencilla ya que
se debe copiar y pegar unas líneas de código en la consola / terminal.
wget http://download.redis.io/releases/redis-stable.tar.gz
cd redis-stable
Compilamos e instalamos.
32
A continuación se muestra de forma gráfica la estructura de Redis en la figura 4.
33
7 CUADROS COMPARATIVOS ENTRE LAS BASES DE DATOS NoSQL Y LAS
RELACIONALES
Se puede ver una comparación de los aspectos principales en las Bases de Datos relacionales
y las NoSQL en el Cuadro 4.[19]
Ubicación de Datos Los datos llegan desde una o Los datos pueden llegar
pocas ubicaciones. desde distintas ubicaciones.
34
Esquema No se puede hacer cambios Se pueden hacer cambios en
en el esquema sin tener que el esquema sin tener que
parar la BD. parar la BD.
35
Se puede observar una comparación de las Funcionalidades de NoSQL y las bases de datos
relacionales en la Figura 5.
Figura 5. Funcionalidades de NoSQL y las Bases de Datos Relacionales. Mohamad Altarade, 2016.
Fuente: https://www.toptal.com/database/the-definitive-guide-to-nosql-databases
A continuación se puede observar una comparación de cuando usar Bases de Datos NoSQL o
Bases de datos relacionales en el Cuadro 5.[20]
36
Además se puede ver las principales diferencias entre las Bases de Datos relacionales y las
Bases de Datos NoSQL en la Figura 6.
Figura 6. Diferencias entre las Bases de Datos Relacionales y NoSQL. Alberto Tizcape, 2015.
Fuente: https://es.slideshare.net/albertortizcape/20150429-nosql-riojadotnet
37
Mediante la Figura 7. Podemos ver el teorema CAP20, también llamado Conjetura de Brewer,
que indica que es imposible tener más de dos de estas tres características: Consistencia,
Tolerancia y Disponibilidad en un sistema de Cómputo distribuido, en esta figura se puede
apreciar las características que presentan diferentes BD Relacionales y BD NoSQL.
El objetivo de esta monografía es ampliar los conocimientos sobre las Bases de Datos NoSQL
y comparar ciertas características respecto a las Bases de Datos Relacionales a las que se
está más familiarizado, en definitiva de esta manera se llega a la conclusión que las Bases de
Datos NoSQL no son un reemplazo ni superiores o inferiores a las BD Tradicionales SQL, sino
que son una alternativa que ofrece otras posibilidades o beneficios para explotarlos en
determinados proyectos que requieren una alta escalabilidad y que los recursos son escasos y
la integridad de los datos no es lo más importante, como sí ocurre en cambio en aplicaciones
especializadas como por ejemplo en transacciones bancarias que son indispensables el
manejarlas con BD Relacionales.
A lo largo del contenido de esta monografía se pudo evidenciar que la gran diferencia entre los
dos tipos de bases de datos es la estructuración, es decir las BD NOSQL utilizan un tipo
almacenamiento no estructurado, todo lo contrario a una SQL. En este caso usan bases de
datos sin una tabla fija como las que sí se encuentran en las bases de datos relacionales, lo que
permite tener mayor escalabilidad en ellas. Además son flexibles a soportar diferentes tipos de
datos y no necesita tantos recursos para ejecutarse y el hardware necesario no es de un costo
muy elevado. En este sentido se tiene un menor coste si se desea expandir, ya que no
necesitan la actualización permanente en el hardware utilizado, sino que basta con hacer un
escalado horizontal, con más máquinas similares para distribuir la carga completa.
Se pudo evidenciar que las bases NoSQL no son perfectas, ya que al no existir tanta
estandarización, se limita el número de aplicaciones seguras para realizar transacciones o llevar
a cabo consultas SQL, lo que hace necesario un lenguaje de consulta que realice este tipo de
procesos.
Al ver un panorama más amplio de las diferentes BD NoSQL se evidencio que cuando se
trabaja con datos no estructurados o cuando no se define el tipo de datos que se almacenará, y
surge la necesidad de crear tablas adicionales en un sistema relacional y que obligan a realizar
JOINS para poder mostrar el resultado, en estos casos es cuando es recomendable utilizar las
bases de datos NOSQL como Cassandra ó MongoDB.
Se puede resaltar que las bases de datos NoSQL no tienen la necesidad de utilizar máquinas
más potentes cuando el crecimiento de solicitudes y datos afecta el rendimiento de la base de
datos, sino que basta con añadir más máquinas al mismo nivel, lo cual es un gran ahorro de
coste.
39
Por todo lo comentado anteriormente, se puede decir que las Bases de Datos NoSQL tienen
mucho recorrido por avanzar y mejorar lo obtenido hasta ahora si desean sacar una ventaja y
ponerse por encima de las bases de datos relacionales. De momento representan una
interesante alternativa para aplicarla en determinados proyectos que no son muy favorables al
usar Bases de Datos Relacionales.
40
9 BIBLIOGRAFÍA
Libros Consultados
https://www.ecured.cu/Base_de_datos_relacional
http://www.uoc.edu/masters/oficiales/img/913.pdf
http://www.wrox.com/WileyCDA/WroxTitle/Professional-NoSQL.productCd-047094224X.html
10 Claudia Pinilla, Mauricio Bello y Cristian Peña. Bases de datos orientadas a grafos, 2017
http://revistas.udistrital.edu.co/ojs/index.php/tia/article/viewFile/8769/pdf
https://www.seas.es/blog/informatica/bases-de-datos-nosql/
4 Gustavo Rodriguéz, “Motores de Bases de datos”, Octubre 2015
https://prezi.com/ry9ckaivktcx/motores-de-base-de-datos/
6 Diego López de Ipiña, “Bases de Datos No Relacionales (NoSQL)”, Noviembre de 2012
https://es.slideshare.net/dipina/bases-de-datos-no-relacionales-nosql
http://www.slideshare.net/marin_dimitrov/nosql-databases-3584443
https://www.slideshare.net/ruflin/nosql-or-not-nosql/
https://www.tecnologias-informacion.com/clave-valor.html
https://www.genbeta.com/desarrollo/mongodb-que-es-como-funciona-y-cuando-podemos-
usarlo-o-no
41
12 Kristof Kovacs. “Comparativa de diferentes soluciones NoSQL”, Febrero 2013
http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
https://fireosoft.com.co/blogs/que-es-la-base-de-datos-apache-cassandra/
14 Manuel Zaforas “Cassandra, la dama de las bases de datos NoSQL”, Marzo de 2016
https://www.paradigmadigital.com/dev/cassandra-la-dama-de-las-bases-de-datos-nosql/
https://db-engines.com/en/system/Cassandra%3BMongoDB%3BRedis
https://www.drauta.com/que-es-redis
https://www.paradigmadigital.com/dev/no-solo-clave-valor-estructuras-de-datos-en-redis/
https://www.sololinux.es/instalar-redis-y-phpredis-debian-ubuntu-derivados/
https://es.slideshare.net/dipina/bases-de-datos-no-relacionales-nosql
http://www.ciberespacio.com.ve/2015/10/articulos/sql-vs-nosql-cual-debo-usar/
42
ANEXOS
Glosario de Acrónimos
3 ACID (Atomicity, Consistency, Isolation and Durability), que en español quiere decir:
Atomicidad, consistencia, aislamiento y durabilidad.
15 ATLAS (A Toroidal LHC ApparatuS), que en español quiere decir: Aparatos de El Gran
Colisionador de Hadrones toroidales.
18 BSD (The Berkeley Software Distribution), que en español quiere decir: La distribución de
software de Berkeley.
14 CQL (Cassandra Query Language), que en español quiere decir: Lenguaje de Consulta de
Cassandra.
13 CRUD (Create, Read, Update and Delete), que en español quiere decir: Crear, Leer,
Actualizar y Borrar.
9 JSON (JavaScript Object Notation), que en español quiere decir: Notación de objetos de
JavaScript.
16 LLOOGG (Realtime Log Analyzer Web App), que en español quiere decir: Aplicación web de
analizador de registro en tiempo real.
1 NoSQL (Not Only SQL), que en español quiere decir: No Solo SQL.
12 PDF (Portable Document Format), que en español quiere decir: formato de documento
portátil.
43
7 RDBMS (Relational Database Management System), que en español quiere decir: Sistemas
de Bases de Datos Relacionales .
2 SQL (Structured Query Language), que en español quiere decir: Lenguaje de Consulta
Estructurado.
10 XML (Extensible Markup Language), que en español quiere decir: Lenguaje de Marcado
Extensible.
44