SQL No Estructurados
SQL No Estructurados
SQL No Estructurados
ANTENOR ORREGO
FACULTAD DE INGENIERÍA
ESCUELA PROFESIONAL DE
INGENIERÍA DE COMPUTACION Y SISTEMAS
0
1
7
Índice
1. INTRODUCCION
2. Estado del arte
2.1. ¿Qué es Big Data?
2.2. ¿Para qué sirve el Big Data?
2.3. Características del Big Data: las 3 V’s
2.4. Sistemas Tradicionales de Almacenamiento de Información
2.4.1. Base de Datos Relacionales
2.4.2. Base de datos NoSQL
3. NoSQL
3.1. El movimiento NoSQL
3.1.1. Motivaciones principales del movimiento NOSQL
3.1.2. Escepticismo desde el punto de vista del negocio
3.1.3. EL NOSQL como un producto con mucho “Hype”
3.1.4. El NoSQL entendido como un rechazo al SQL
3.1.5. Necesidad de administradores de sistemas y operadores de
hardware
3.2. Base de Datos No SQL
3.2.1. ¿Qué son las bases de datos NoSQL
3.2.2. Consistencia
3.2.2.1. El Teorema CAP
3.2.2.2. ACID vs BASE
3.2.3. Almacenamiento
3.2.3.1. Almacenamiento basado en filas
3.2.3.2. Almacenamiento basado en columnas
3.2.3.3. Arboles LSM(Log Structured Merge)
3.2.4. Consultas
3.2.5. Procesamiento con MapReduce
3.2.6. Ventajas
3.2.7. Diferencias con las bases de datos SQL
3.2.8. Tipos
3.2.8.1. Bases de datos clave – valor
3.2.8.2. Base de datos documentales
–
3.2.8.3. Bases de datos en grafo
3.2.8.4. Base de datos orientadas a objetos
3.2.9. Ejemplos
3.2.9.1. DynamoDB
3.2.9.2. Redis
3.2.9.3. HBase
3.2.9.4. Cassandra
3.2.9.5. Mongo DB
3.2.9.6. Neo4j
4. Conclusiones
5. Bibliografía
1. INTRODUCCION
En los últimos años, la cantidad de datos digitales que se genera el mundo se
ha multiplicado. Las redes sociales y el cada vez más fácil acceso a Internet
del que disponemos las personas hacen que el volumen de tráfico y de datos
que se generan sea cada vez mayor. Con el surgimiento de las bases de datos
relacionales las empresas encontraron el aliado perfecto para cubrir sus
necesidades de almacenamiento, disponibilidad, copiado de seguridad y
gestión de sus datos. Pero debido a las tendencias actuales de uso de Internet,
este tipo de sistemas han comenzado a experimentar dificultades técnicas, en
algunos casos bloqueantes, que impiden el buen funcionamiento de los
sistemas de algunas de las empresas más importantes de Internet. Este tipo de
datos que son masivamente generados reciben un nombre: BigData, y un tipo
de tecnología ha surgido para tratar de poner solución a muchos de los
problemas de los que adolecen los sistemas de almacenamiento tradicionales
cuando intentan manejar este tipo de datos masivos. Esta tecnología se
conoce como NoSQL.
Son muchas las aplicaciones web que utilizan algún tipo de bases de datos
para funcionar. Hasta ahora estábamos acostumbrados a utilizar bases de
datos SQL como son MySQL, Oracle o MS SQL, pero desde hace ya algún
tiempo han aparecido otras que reciben el nombre de NoSQL (Not only SQL –
No sólo SQL) y que han llegado con la intención de hacer frente a las bases
relacionales utilizadas por la mayoría de los usuarios.
2. Estado del arte
En el estado del arte se analizará qué es el Big Data, cómo surge, y qué
características tiene. Además, se verá qué bases de datos existían hasta ahora
para hacer frente a las necesidades de almacenamiento actuales, y si estas
bases de datos, unidas al Big Data, presentan algún problema. Finalmente, se
hará un repaso general de las distintas soluciones NoSQL que han surgido en
los últimos años para tratar de cubrir los distintos tipos de necesidades.
2.1.¿Qué es Big Data?
Diversas personalidades con autoridad en el mundo de Internet han
plasmado su opinión respecto a este tema.
Ed Dumbill forma parte del staff de O’Really Media, la conocida marca
editorial que publica multitud de libros técnicos al año, y dice esto en el libro
Big Data Now:
“Big data is data that exceeds the processing capacity of conventional
database systems. The data is too big, moves too fast, or doesn’t fit the
strictures of your database architectures. To gain value from this data, you
must choose an alternative way to process it.” (O'Really 2012)
En el blog oficial de Microsoft Enterprise se puede leer:
“Big data is the term increasingly used to describe the process of applying
serious computing power – the latest in machine learning and artificial
intelligence – to seriously massive and often highly complex sets of
information” (HowieT 2013)
Adrian Merv, de la revista Teradata expone la siguiente definición:
“Big data exceeds the reach of commonly used hardware environments
and software tools to capture, manage and process it within a tolerable
elapsed time for its user population” (Merv 2011)
Esto es tan solo una pequeña parte de la cantidad de definiciones y de
autores que se puede encontrar en la red.
Atendiendo a estas definiciones, se podría hacer un resumen, a grandes
rasgos y proponer nuestra propia definición sobre lo que el Big Data
significa:
Big Data es la ingente cantidad de información, en su mayor parte
desestructurada, que hoy en día generamos toda la sociedad como
consecuencia de nuestra actividad tanto en Internet como fuera de ella.
Además, debido a cantidad de datos de los que se está tratando, se
necesita un nuevo y diferente enfoque a los que existen hasta ahora en lo
que a la captura, almacenamiento y procesado de toda esta información se
refiere. Esta es la única manera de que se pueda gestionar eficientemente
toda esta información. Las bases de datos tradicionales existentes se
quedan cortas, se necesitan nuevas herramientas que ayuden a llevar a
cabo todo lo expuesto
anteriormente
Si algo se repite cada vez que alguien realiza un ejercicio comparativo entre
las nuevas tendencias (Big Data, NoSQL) y los sistemas y bases de datos
más tradicionales, y que es importante tener en cuenta, es que las
tecnologías relacionadas con el Big Data son unas soluciones que atienden
a una serie de problemas muy concretos, y por lo tanto, sería un error
pretender generalizar en ellas.
Cada problema ha de ser analizado y comprendido antes de poder darle
una solución. Dar el salto automáticamente y proponer una tecnología de
este tipo para abordar cualquier tipo de problema puede costarnos muy
caro el día de mañana.
Hay que tener claro que el Big Data es una tecnología en constante cambio
y crecimiento. De igual forma, el mercado y sus necesidades también se
encuentran en continuo cambio, por lo que es necesario mantener un
proceso de actualización para no quedarse atrás.
2.4. Sistemas Tradicionales de Almacenamiento de Información
A lo largo de la historia han surgido multitud de sistemas de
almacenamiento de información (bases de datos, ficheros, etc.) para cubrir
necesidades que se iban presentando en materia de almacenamiento. Así,
se pueden encontrar las bases de datos jerárquicas, que estructuran su
información en forma de árbol, y sirven por ejemplo para mantener el
espacio de nombres que manejan los servidores de nombres de dominio o
DNSs (Domain Name Servers). O bien las bases de datos en red, que son
un modelo de base de datos ampliado de las bases de datos jerárquicas,
formadas por un conjunto de datos que están interconectados entre sí
mediante conexiones de red.
Se hará especial hincapié en este apartado en las bases de datos
relacionales, una de las opciones más utilizadas hoy en día, con la finalidad
de comprobar si éstas son útiles para el almacenamiento eficiente de Big
Data.
2.4.1. Base de Datos Relacionales
El modelo relacional ha sido desde principios de los 70 y aun hoy en
día continúa siendo la forma habitual de estructurar y almacenar la
información en cualquier tipo de aplicación informática, sobre todo
en las transaccionales (aquellas aplicaciones con numerosos
usuarios que permiten actualizaciones de la BBDD de forma
continuada y consultas pocos complejas).
Las bases de datos relacionales son aquellas bases de datos que
cumplen con el modelo relacional, que se fundamenta en el uso de
relaciones. Una relación no es más que un vínculo entre dos
entidades de la base de datos. La información contenida en las
bases de datos relacionales y las relaciones de dependencia que se
establecen entre sí, interpretados, persiguen describir el mundo real
3.2.2.2. ACID vs
BASE
El mundo de las bases de datos relacionales está familiarizado
con las transacciones ACID.
Las transacciones que se producen en el lenguaje SQL, sea
cual sea el sistema gestor de base de datos cumplen siempre
las propiedades ACID. Este tipo de transacciones se llaman así
porque garantizan la Atomicidad, la Consistencia, el aislamiento
(Isolation) y la Durabilidad.
- Atomicity (Atomicidad). Las transacciones han de ejecutarse
por completo o no ejecutarse, pero la transacción no puede
quedar a medias.
- Consistency (Consistencia o Integridad). Los datos que se
guardan tras la transacción han de ser siempre datos validos.
- Isolation (Aislamiento). Las transacciones son
independientes y no se afectan entre sí.
- Durability (Durabilidad). Una vez finalizada una operación,
esta perdurará en el tiempo.
3.2.3. Almacenamiento
La capa de almacenamiento depende en gran medida del tipo de
base de datos que se esté tratando
3.2.3.1. Almacenamiento basado en filas
Este almacenamiento se basa en juntar de forma secuencial
todas las filas de una tabla y escribirlas juntas a disco. La
ventaja de este tipo de almacenamiento es que si se están
realizando operaciones de lectura / escritura de varias filas
seguidas, la operación se realiza en un solo acceso a disco.
3.2.3.2. Almacenamiento basado en columnas
Almacenamiento basado en la serialización de las columnas, y
la escritura conjunta a disco. Por consiguiente, las operaciones
que involucran accesos completos a los datos de las columnas
quedan favorecidos. Por otro lado, se penalizan los accesos a
información que se encuentra consecutiva dentro de una misma
fila.
3.2.3.3. Arboles LSM(Log Structured Merge)
Los Arboles LSM son un tipo de estructuras que facilitan la
organización y el almacenamiento de los sistemas de bases de
datos, especialmente de aquellos que poseen una tasa muy alta
de inserciones.
En los árboles LSM existen dos tipos de estructuras en forma de
árbol. El primer componente, más pequeño, reside
exclusivamente en memoria, mientras que el segundo persiste
directamente a disco. El proceso consiste en que cada vez que
hay que escribir un nuevo registro, este se escribe primero en el
memoria, en el primer componente, de tal forma que cuando
este primer componente alcanza un tamaño determinado, se
realiza un volcado de una parte de los registros aquí contenidos
a disco, al segundo componente, y se liberará la memoria que
estos estaban ocupando.
Este tipo de almacenamiento de la información presenta
ventajas muy interesantes, como el uso muy eficiente que hace
de la memoria principal, por lo que es capaz de responder
peticiones muy rápidamente, además de optimizar el uso del
disco de la máquina, haciendo volcados a disco sólo cuando es
necesario para volcar una cantidad importante de información.
Por todo ello, es utilizado por sistemas gestores de bases de
datos tan importantes como son SQLite, HBase o Cassandra.
3.2.4. Consultas
Existen varias diferencias con respecto a cómo los distintos tipos de
bases de datos permiten a los usuarios / aplicaciones realizar
consultas. Desde las consultas más básicas por clave primaria,
como por ejemplo, los almacenes clave – valor, pasando por otros
que ofrecen un acceso a la información algo más complejo. En este
terreno se encontrarían las bases de datos documentales.
En general, la flexibilidad y la riqueza de las querys no son
demasiado elevadas, puesto que lo que se prima por encima de las
consultas es el rendimiento y la escalabilidad, por lo que es habitual
que se delegue a la aplicación el implementar opciones más
avanzadas en este terreno.
Un método de consulta llamado Companion SQL database consiste
en tener una base de datos auxiliar (que puede ser una base de
datos SQL o una TextDB) de forma que se utilice esta secundaria
para almacenar ciertos metadatos importantes para realizar la
búsqueda, y se empleen para facilitar la búsqueda posterior en el
contenedor NoSQL.
Búsqueda local dispersa. Otra forma de realizar consultas
consiste en, puesto que se tiene el conjunto de datos repartido entre
los distintos servidores, repartir de igual modo la consulta, de forma
que cada servidor ejecute localmente cada consulta y reenvíe los
resultados a un nodo maestro, que sería el encargado de juntar
todos los resultados y presentárselos a la aplicación.
Arboles B+ Distribuidos.
Una forma eficiente de acelerar las búsquedas consiste en
mantener un árbol B+ que forme un índice de entradas a la base de
datos NoSQL (Aquilera, Golab and Shah 2008).
El procedimiento consistiría en sacar los valores hash de los
atributos que nos interese indexar, y construir con ellos el árbol B+.
Cuando se quiera realizar una consulta, se comenzará desde la raíz
y se irá descendiendo en orden hasta llegar a la hoja
correspondiente, que nos dará la entrada concreta donde se
encuentra el registro que se está buscando.
Al tratarse de un árbol B+, se debe tener en cuenta las
particularidades de este tipo de estructura de datos a la hora de
realizar los mantenimientos necesarios, las inserciones y borrados
que puedan hacer redimensiones en el árbol, etc.
3.2.5. Procesamiento con MapReduce
En secciones anteriores se ha hecho una introducción al framework
de programación y procesamiento en paralelo, Hadoop. Se ha
expuesto también que, entre otras cosas, una de las principales
características que posee este sistema de almacenamiento y
procesado de grandes cantidades de información es que ha
adoptado MapReduce como modelo de programación para la
plataforma, para dar soporte a la computación en paralelo de los
datos almacenados en el sistema.
Pues bien, uno de los motivos por los que este modelo de
programación cuadra tan bien con el modelo de Hadoop es porque
está especialmente pensado para grandes cantidades de
información. Las bases de datos NoSQL también comparten parte
de este modelo de datos, por lo que el procesamiento con un
framework basado en MapReduce.
Además, tanto la función map como la función reduce han de ser
entendidas de una manera realmente funcional e independiente de
la máquina donde se ejecuten, por tanto, ante la misma entrada, en
el mismo entorno de ejecución, se producirá exactamente la misma
salida. Esto significa que el particionado de la entrada en trozos más
pequeños y el reparto de éstos a través del clúster, no afectará al
resultado.
Por último, juntando algunos conceptos vistos anteriormente, se
puede utilizar el Consistent Hashing como forma de orquestación
para el paradigma
MapReduce.
Así, se puede
repartir el
conjunto de
datos de la entrada
de igual modo
que se hace con el Consistent Hashing, por lo que los nodos
comenzarán a procesar los datos en sentido horario. Después, la
muestra de información intermedia volverá a ser consistentemente
hasheada para que los nodos finalicen con la segunda parte del
proceso, el reduce, y produzcan el resultado final.
3.2.6. Ventajas
Esta forma de almacenar la información ofrece ciertas ventajas
sobre los modelos relacionales. Entre las ventajas más significativas
podemos destacar:
- Se ejecutan en máquinas con pocos recursos: Estos
sistemas, a diferencia de los sistemas basados en SQL, no
requieren de apenas computación, por lo que se pueden montar
en máquinas de un coste más reducido.
- Escalabilidad horizontal: Para mejorar el rendimiento de estos
sistemas simplemente se consigue añadiendo más nodos, con
la única operación de indicar al sistema cuáles son los nodos
que están disponibles.
- Pueden manejar gran cantidad de datos: Esto es debido a
que utiliza una estructura distribuida, en muchos casos mediante
tablas Hash.
- No genera cuellos de botella: El principal problema de los
sistemas SQL es que necesitan transcribir cada sentencia para
poder ser ejecutada, y cada sentencia compleja requiere
además de un nivel de ejecución aún más complejo, lo que
constituye un punto de entrada en común, que ante muchas
peticiones puede ralentizar el sistema.
3.2.7. Diferencias con las bases de datos SQL
Algunas de las diferencias más destacables que nos podemos
encontrar entre los sistemas NoSQL y los sistemas SQL están:
- No utilizan SQL como lenguaje de consultas. La mayoría de
las bases de datos NoSQL evitan utilizar este tipo de lenguaje o
lo utilizan como un lenguaje de apoyo. Por poner algunos
ejemplos, Cassandra utiliza el lenguaje CQL, MongoDB utiliza
JSON o BigTable hace uso de GQL.
- No utilizan estructuras fijas como tablas para el
almacenamiento de los datos. Permiten hacer uso de otros
tipos de modelos de almacenamiento de información como
sistemas de clave–valor, objetos o grafos.
- No suelen permitir operaciones JOIN. Al disponer de un
volumen de datos tan extremadamente grande suele resultar
deseable evitar los JOIN. Esto se debe a que, cuando la
operación no es la búsqueda de una clave, la sobrecarga puede
llegar a ser muy costosa. Las soluciones más directas consisten
en desnormalizar los datos, o bien realizar el JOIN mediante
software, en la capa de aplicación.
- Arquitectura distribuida. Las bases de datos relacionales
suelen estar centralizadas en una única máquina o bien en una
estructura máster–esclavo, sin embargo en los casos NoSQL la
información puede estar compartida en varias máquinas
mediante mecanismos de tablas Hash distribuidas.
3.2.8. Tipos
Dependiendo de la forma en la que almacenen la información, nos
podemos encontrar varios tipos distintos de bases de datos NoSQL.
Veamos los tipos más utilizados.
3.2.8.1. Bases de datos clave – valor
Son el modelo de base de datos NoSQL más popular, además
de ser la más sencilla en cuanto a funcionalidad. En este tipo de
sistema, cada elemento está identificado por una llave única, lo
que permite la recuperación de la información de forma muy
rápida, información que habitualmente está almacenada como
un objeto binario (BLOB). Se caracterizan por ser muy eficientes
tanto para las lecturas como para las escrituras.
Algunos ejemplos de este tipo son Cassandra, BigTable o
HBase.
Tipo de Datos
Redis es capaz de reconocer y manejar cinco tipos de datos
diferentes, lo cual es una ventaja con respecto a otras bases de
datos que únicamente trabajan con cadenas de caracteres
(String). Esto le da ventaja en lo que a manejo de los datos y
almacenamiento de los mismos se refiere. Los tipos de datos
son:
• String
• Set
• Hash
• List
• Sorted Set
En la sección Modelo de Datos en la que se describe el modelo
de datos con mayor profundidad, se expondrán distintos
ejemplos de utilización de estos tipos de datos.
Poder manejar varios tipos de datos de forma nativa otorga al
sistema diversas ventajas. Cada uno de ellos ofrece una serie
de métodos para acceder y manipular la información que
almacena. Dependiendo del tipo de uso que se le vaya a hacer a
esos datos. Redis da la opción de elegir que estructura se
adapta mejor a las necesidades
3.2.9.3. HBase
HBase es un SGBD, la base de datos NoSQL de Hadoop.
HBase fue concebida inicialmente a partir de los artículos que
liberó Google sobre BigTable allá por 2004. Se podría decir que
HBase es la implementación Open Source del proyecto Bigtable
de Google.
HBase es un software construido sobre Hadoop, sin el cual no
podría funcionar a día de hoy. Hadoop confiere a HBase una
característica indispensable en su modelo de datos: la capa de
almacenamiento que proporciona disponibilidad y fiabilidad
(HDFS), mientras que la otra capacidad de Hadoop, el entorno
de computación de alto rendimiento (MapReduce)
frecuentemente es utilizado junto con HBase para acceder a la
base de datos y tratar datos en ella.
3.2.9.4.
Cassandra
Es un almacén clave valor, altamente escalable, distribuido y
eventualmente consistente.
Cassandra es similar a DynamoDB con respecto a la
consistencia eventual que implementa en su sistema, y a la vez,
toma prestados de Google y de su proyecto BigTable el modelo
de datos estilo columnar.
Cassandra ha sido concebido e inicialmente desarrollado por
Facebook hasta que su código fue liberado en el año 2008.
Desde 2010 forma parte de los proyectos de primer nivel de
Apache. Cassandra fue inicialmente ideado para mejorar la
barra de búsqueda de la popular red social Facebook, y uno de
sus creadores originales, Avinash Lakshman, llegó de trabajar
directamente con Amazon, formando parte del grupo de
ingenieros que dio forma a DynamoDB. Actualmente Cassandra
se utiliza en varios de los sitios más conocidos y con más
necesidades en cuanto a tráfico y almacenamiento tienen en el
mundo, como por ejemplo, Netflix, Ebay, Spotify, Twitter, Reddit,
SoundCloud o Digg entre otros.
Características Principales
Cassandra, al tener un modelo de datos tan similar al
presentado por Google en BigTable, comparte muchas de las
características con las que se han expuesto en el apartado
anterior de HBase. Aunque como se verá, a nivel arquitectónico
son dos sistemas muy diferentes, por lo que resulta interesante
analizarlas por separado (Lakshman and Malik 2009). Se puede
afirmar que Cassandra y HBase son las dos bases de datos
orientado a columnas que más se utilizan de todas las
existentes.
3.2.9.5. Mongo DB