0% encontró este documento útil (0 votos)
27 vistas36 páginas

No SQL

Las bases de datos NoSQL son sistemas de almacenamiento que surgieron para abordar problemas de escalabilidad y rendimiento de las bases de datos relacionales, especialmente con el crecimiento exponencial de datos en la web 2.0. Se caracterizan por no seguir el modelo entidad-relación, permitiendo estructuras de datos más flexibles como clave-valor, documentos, grafos y objetos. Las ventajas incluyen menor requerimiento de recursos, escalabilidad horizontal y capacidad para manejar grandes volúmenes de datos sin cuellos de botella.

Cargado por

jjoseuih
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas36 páginas

No SQL

Las bases de datos NoSQL son sistemas de almacenamiento que surgieron para abordar problemas de escalabilidad y rendimiento de las bases de datos relacionales, especialmente con el crecimiento exponencial de datos en la web 2.0. Se caracterizan por no seguir el modelo entidad-relación, permitiendo estructuras de datos más flexibles como clave-valor, documentos, grafos y objetos. Las ventajas incluyen menor requerimiento de recursos, escalabilidad horizontal y capacidad para manejar grandes volúmenes de datos sin cuellos de botella.

Cargado por

jjoseuih
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

BASES DE DATOS NoSQL

Introduccion
 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.


Qué son las bases de datos NoSQL
 Se puede decir que la aparición del término NoSQL aparece con la llegada de la web
2.0 ya que hasta ese momento sólo subían contenido a la red aquellas empresas que
tenían un portal, pero con la llegada de aplicaciones como Facebook, Twitter o
Youtube, cualquier usuario podía subir contenido, provocando así un crecimiento
exponencial de los datos.

 Aquí empiezan a aparecer los primeros problemas de la gestión de toda esa


información almacenada en bases de datos relacionales. En un principio, para
solucionar estos problemas de accesibilidad, las empresas optaron por utilizar un
mayor número de máquinas pero pronto se dieron cuenta de que esto no solucionaba
el problema, además de ser una solución muy cara. La otra solución era la creación
de sistemas pensados para un uso específico que con el paso del tiempo han dado
lugar a soluciones robustas, apareciendo así el movimiento NoSQL.
 Por lo tanto hablar de bases de datos NoSQL es hablar de estructuras que nos
permiten almacenar información en aquellas situaciones en las que las bases de
datos relacionales generan ciertos problemas debido principalmente a
problemas de escalabilidad y rendimiento de las bases de datos relacionales
donde se dan cita miles de usuarios concurrentes y con millones de consultas
diarias.

 las bases de datos NoSQL son sistemas de almacenamiento de información que


no cumplen con el esquema entidad–relación. Tampoco utilizan una estructura
de datos en forma de tabla donde se van almacenando los datos sino que para
el almacenamiento hacen uso de otros formatos como clave–valor, mapeo de
columnas o grafos
Ventajas de los sistemas NoSQL
 Se ejecutan en máquinas con pocos recursos: Estos sistemas, a diferencia de
los sistemas basados en SQL, no requieren de mucha 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.
Principales diferencias con las bases de datos SQL

 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.
Tipos de bases de datos NoSQL
Dependiendo de la forma en la que almacenen la información se tiene:

 1.- Bases de datos clave – valor 000


Felix Conde
001 521-89
: :
Lisa Cusi
873 521-12
: :
Milton Chua
998 521-50
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
2.- Bases de datos documentales
cod nombre Paterno Cel ciudad
{
“ID”:1, 1 Felix Conde 23 lp
“NOMBRE”: ”Felix”
2 Maria Ramos 44 or
“PATERNO”: ”Conde”,
“CEL”: ”23”,
“CIUDAD”: “lp”
= 3 Carlos Perez 20 lp
} 4 Andres Poma 32 sc
JSON

 Este tipo almacena la información como un documento, generalmente


utilizando para ello una estructura simple como JSON o XML y donde se
utiliza una clave única para cada registro. Este tipo de implementación
permite, además de realizar búsquedas por clave–valor, realizar
consultas más avanzadas sobre el contenido del documento. Son las
bases de datos NoSQL más versátiles. Se pueden utilizar en gran
cantidad de proyectos, incluyendo muchos que tradicionalmente
funcionarían sobre bases de datos relacionales. Algunos ejemplos de
este tipo son MongoDB o CouchDB.
3.- Bases de datos en grafo
Id: 2
Nombre:Raul
Edad: 30

Id: 1
Nombre:Cris
Edad: 18
Id: 4
Nombre:Israel
Edad: 33

 En este tipo de bases de datos, la información se representa como nodos de


un grafo y sus relaciones con las aristas del mismo, de manera que se puede
hacer uso de la teoría de grafos para recorrerla. Para sacar el máximo
rendimiento a este tipo de bases de datos, su estructura debe estar
totalmente normalizada, de forma que cada tabla tenga una sola columna y
cada relación dos. Este tipo de bases de datos ofrece una navegación más
eficiente entre relaciones que en un modelo relacional. Algunos ejemplos de
este tipo son Neo4j, InfoGrid o Virtuoso
Por ejemplo, el arco "FRIENDS" contendría la fecha en que

Ejemplo se creó la relación, permitiéndonos enumerar todos los


amigos en el orden de tiempo.

Esto nos muestra rápidamente que tenemos toda la


potencia a la que estamos acostumbrados desde el modelo
Relacional, pero con la flexibilidad a la que estamos
acostumbrados desde el modelo de documentos.

Ahora para responder una consulta de ejemplo "Encontrar


todos los amigos de cualquier usuario que le haya gustado
una de mis publicaciones, en orden alfabético de nombre
de usuario".

Esto se puede resolver de la siguiente manera (utilizando el


lenguaje de consulta Cypher)

MATCH (:User {id:{author}}) <-[:AUTHOR]- (:Post) <-


[:LIKES]- (:User) <-[:FRIENDS]- (u:User) RETURN (u)

Lo más importante es que no le estamos diciendo al motor de la base de datos cómo vincular los Nodos. Simplemente le
decimos que siga una Relación de cierto tipo y maneje todo para nosotros automáticamente.
4.- Bases de datos orientadas a objetos

 En este tipo, la información se representa mediante objetos, de la misma forma que son
representados en los lenguajes de programación orientada a objetos (POO) como ocurre en
JAVA, C# o Visual Basic .NET. Algunos ejemplos de este tipo de bases de datos son Zope,
Gemstone o Db4o.
Ejemplos de bases de datos NoSQL

 1.- Cassandra

 Se trata de una base de datos creada por Apache del tipo


clave–valor. Dispone de un lenguaje propio para realizar
consultas CQL (Cassandra Query Language). Cassandra es
una aplicación Java por lo que puede correr en cualquier
plataforma que cuente con la JVM.
2.- Redis

 Se trata de una base de datos creada por Salvatore Sanfilippo y Pieter


Noordhuis y está apoyado por VMWare. Se trata de una base de datos del
tipo clave–valor. Se puede imaginar como un array gigante en memoria
para almacenar datos, datos que pueden ser cadenas, hashes, conjuntos
de datos o listas. Tiene la ventaja de que sus operaciones son atómicas y
persistentes. Por ponerle una pega, Redis no permite realizar consultas, sólo
se puede insertar y obtener datos, además de las operaciones comunes
sobre conjuntos (diferencia, unión e inserción). Creado en ANSI C, por lo
tanto es compatible y funciona sin problemas en sistemas Unix, Linux y sus
derivados, Solaris, OS/X sin embargo no existe soporte oficial para
plataformas Windows.
3.- MongoDB

Se trata de una base de datos creada por 10gen del tipo orientada a
documentos, de esquema libre, es decir, que cada entrada puede
tener un esquema de datos diferente que nada tenga que ver con el
resto de registros almacenados. Es bastante rápido a la hora de ejecutar
sus operaciones ya que está escrito en lenguaje C++. Para el
almacenamiento de la información, utiliza un sistema propio de
documento conocido con el nombre BSON, que es una evolución del
conocido JSON pero con la peculiaridad de que puede almacenar
datos binarios. En poco tiempo, MongoDB se ha convertido en una de
las bases de datos NoSQL favoritas por los desarrolladores.
4.- CouchDB

 Se trata de un sistema creado por Apache y escrito en lenguaje


Erlang que funciona en la mayoría de sistemas POSIX, incluyendo
GNU/LINUX y OSX, pero no así en sistemas Windows. Como
características más importantes cabe destacar el uso de Restfull HTTP
API como interfaz y JavaScript como principal lenguaje de
interacción. Para el almacenamiento de los datos se utiliza archivos
JSON. Permite la creación de vistas, que son el mecanismo que
permite la combinación de documentos para retornar valores de
varios documentos, es decir, CouchDB permite la realización de las
operaciones JOIN típicas de SQL.
Algunas de las razones que nos pueden llevar a
decantarnos por el uso de las bases de datos NoSQL
en lugar de las clásicas SQL son:
 No deberías empezar el diseño del modelo de datos hasta que
sepas las consultas y escrituras que va a hacer la aplicación
 Y el modelo se diseña para satisfacer estas consultas
 Tener los datos lo más juntos posible, y no tener varias colecciones
diferentes para luego hacer joins en tiempo de ejecución.
 Cuando el volumen de los datos crece muy rápidamente en
momentos puntuales, pudiendo llegar a superar el Terabyte de
información.
 Cuando la escalabilidad de la solución relacional no es viable
tanto a nivel de costes como a nivel técnico.
 Cuando tenemos elevados picos de uso del sistema por parte de
los usuarios en múltiples ocasiones.
 Cuando el esquema de la base de datos no es homogéneo, es
decir, cuando en cada inserción de datos la información que se
almacena puede tener campos distintos.
Una diferencia clave entre las bases de datos de NoSQL y
las bases de datos relacionales tradicionales, es el hecho
de que NoSQL es una forma de almacenamiento no
estructurado.
Mongo db

Conexión por shell


mongo
Visualización de bases de datos existentes
show dbs
Consultar la base de datos actual
db
Crear una base de datos
No se crean como tal hasta que no se produce una inserción en alguna de sus colecciones.
use relaciones
Nota: Este comando solo indica que se va a utilizar la base de datos amigos.
Visualizar colecciones de la base de datos actual
show collections
Insertar Insertar elementos desde un fichero jsom
Insertar un elemento directamente ./mongoimport --host localhost --port 27666
--db test --collection people --file
db.amigos.insert({
ejemplo.json --jsonArray
Nombre: "Marisa",
Apellidos: "García",
Edad: 18,
Aficiones: ["senderismo","tenis","pintura"],
Amigos: [
{
Nombre:"Monica",
Edad:20
}
]
})
Mongo db

Comando de búsqueda
db.amigos.find({[CONSULTA_1]},{[PROYECIÓN_2]})
Este comando puede recibir dos parámetros: una consulta y una proyección. Estos comandos son opcionales.
1. Consulta de datos
Personas mayores de 25 años
db.amigos.find({"Edad": {$gt: 25}})
2. Mostrar proyección
Mostrar nombre y apellidos de las Marisas encontradas
db.amigos.find({Nombre: "Marisa" },{Nombre:1, Apellidos:2})

Mostar todos los datos de una colección

Formato básico
db.amigos.find()
Cassandra
 Lenguaje de Consultas
 SQL es un lenguaje de consultas ampliamente conocido, por lo que resulta muy interesante
que una base de datos NoSQL permita manejar una sintaxis SQL-like para evitar tener que
aprender otro lenguaje (véase el caso de MongoDB). Cassandra nos ofrece su propio
lenguaje SQL-like: CQL (Cassandra Query Language).
 CQL no tiene nada que ver con SQL, tan solo se le parece, ayudando así a los que vienen del
mundo relacional. Exige un cambio de mentalidad: NO HAY RELACIONES. Incluye sintaxis
SELECT, INSERT, UPDATE, DELETE, TRUNCATE, CREATE, DROP,…
 Veamos algunos ejemplos de este lenguaje de consultas:
Base de datos en grafo con neo4j
 Creación de un grafo
 Vamos a ver como crear un grafo sencillo en neo4j. Para crear cualquier elemento del grafo, esto es, nodos y
relaciones, tenemos que utilizar la sentencia «Create» del lenguaje Cypher. El formato de la instrucción Create para
crear un nodo es el siguiente:

 CREATE (alias:etiqueta{propiedad:valor,propiedad:valor})

 El elemento alias permite asociar un identificador al nodo para poder referenciarlo en una instrucción posterior,
mientras que etiqueta representa la categoría o tipo que le queremos asociar al nodo. A continuación de la
etiqueta se indican las propiedades del nodo en formato JSON

 Por su parte, la creación de una relación con la sentencia Create seguirá el siguiente formato:

 CREATE (nodo1)-[:etiqueta_relacion {propiedad:valor,propiedad:valor}]->(nodo2)

 Donde nodo1 y nodo2 son los alias de los nodos que vamos a relacionar y etiqueta_relaciones la categoría o tipo
asociada a la relación. Como vemos, sobre una relación también se pueden definir propiedades

 Las sentencias de creación de nodos y relaciones deben ejecutarse conjuntamente, como una única unidad de
transacción.
Por ejemplo, crear un grafo en el que representemos una serie de cursos y alumnos, donde los
alumnos se asocian a cursos mediante una relación de tipo Realiza. El conjunto de instrucciones que
tendremos que incluir en la línea de comandos de la página de neo4j será el siguiente:
 CREATE (java:Curso {curso:'Programación Java estándar', duracion:120, precio:80})

 CREATE (angular:Curso {curso:'Angular', duracion:30, precio:110})

 CREATE (spring:Curso {curso:'Spring', duracion:80, precio:200})

 CREATE (pepe:Alumno {nombre:'Pepe', edad:20})

 CREATE (ana:Alumno {nombre:'Ana', edad:40})

 CREATE (elena:Alumno {nombre:'Elena', edad:34})

 CREATE (mario:Alumno {nombre:'Mario', edad:19})

 CREATE (pepe)-[:Realiza {horario:'Mañana'}]->(java)CREATE (pepe)-[:Realiza {horario:'Tarde'}]->(angular)CREATE (elena)-[:Realiza


{horario:'Tarde'}]->(java)CREATE (ana)-[:Realiza {horario:'Mañana'}]->(angular)CREATE (mario)-[:Realiza {horario:'Mañana'}]-
>(spring)

 CREATE (pepe)-[:Amigo {rol:'Amigo de estudios'}]->(ana)


 Una vez introducidas las instrucciones anteriores, para ejecutarlas pulsaremos el botón play
que aparece en la parte superior a la derecha. Si todo ha ido bien, nos aparecerá en la
página un mensaje informándonos de los elementos añadidos al grafo:

 Pulsando el primer botón del menú de la izquierda podemos ver un resumen con la
información creada y almacenada en la base de datos.
 Si pulsamos sobre el botón que indica el número de nodos (7), veremos en la parte central
de la página una imagen gráfica de nuestro grafo:
 Pulsando el primer botón del menú de la izquierda podemos ver un resumen con la información
creada y almacenada en la base de datos.
 Si pulsamos sobre el botón que indica el número de nodos (7), veremos en la parte central de la
página una imagen gráfica de nuestro grafo:
 Inserción de nuevos nodos a un grado
 Anteriormente comentamos que los nodos y sus relaciones se deben crear conjuntamente
durante el proceso de creación del grafo. ¿Pero qué pasa si posteriormente queremos añadir
nuevos nodos al grafo?

 El proceso es muy sencillo, simplemente crearemos los nuevos nodos que queramos incluir y
después los incorporaremos al grafo mediante la instrucción Merge. A través de esta instrucción
relacionamos el nuevo nodo con alguno de los ya existentes en el grafo.

 Por ejemplo, la siguiente instrucción relaciona un nuevo nodo Alumno cuyo nombre es Beatriz
con uno de los nodos cursos existentes, concretamente con el curso de Spring:

 >match(a:Alumno{nombre:»Beatriz»}),(c:Curso{curso:»Spring»}) merge (a)-[:Realiza]->(c)


 Consultas en el grafo
 Mediante la instrucción Match de Cypher podemos realizar consultas en el grafo, consultas que permiten
establecer condiciones tanto sobre nodos como sobre las relaciones, lo que nos ofrece una gran potencia a
la hora de buscar datos en la estructura.
 A continuación, vamos a ver algunos ejemplos de utilización de la instrucción match para realizar búsquedas
en nuestro grafo de alumnos y cursos.
 Por ejemplo, para recuperar todos los nodos del árbol con sus relaciones utilizamos el comando:
 >match(n) return n
 La letra n representa simplemente el alias del nodo. Dado que no hemos establecido ninguna condición, la
instrucción return nnos devolverá el grafo completo.
 En este otro ejemplo, recuperamos solamente los nodos de tipo alumno:
 >match(n:Alumno) return n

También podría gustarte