tarea academica sistemas distribuidos i
TRANSCRIPT
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
1/13
Facultad de Ingeniera de Sistemas, Computacin y Telecomunicaciones
NO SQL Y SU USO EN LA
COMPUTACIN EN LA NUBE
Presentado por
Franco Infantas Raineiro Patricio
Tacna Per
Mayo 2012
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
2/13
2
INDICE
Que es NoSQL 03
Caractersticas de NoSQL 04
MongoDB 07
Caractersticas 08
Ejemplo de implementacin de BD con MongoDB 10
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
3/13
3
QUE ES NOSQL
NoSQL fue desarrollado por primera vez en finales de 1990 por Carlo
Strozzi se refiere a una nueva arquitectura de sistemas de bases de datos,
generalmente distribuidos, que no requieren tablas con esquemas fijos,
evitan el uso de la operacin JOIN, tpicamente escalan de forma
horizontal y no siempre exponen sus datos mediante interfaces SQL. Es de
notar que existen proveedores NoSQL tanto propietarios como basados en
software libre. En algunos casos el termino NoSQL incluso se utiliza con el
significado de un sistema totalmente no relacional, pero en la prctica no es
tan sencillo como a decir que los sistemas RDBMS y NoSQL son
totalmente opuestos, ya que existen diferentes soluciones y bibliotecas
intermedias que adicionan y complementan los sistemas NoSQL con las
caractersticas ACID de los sistemas RDBMS.
Por lo general, en el mbito acadmico a este tipo de bases de datos a e se
les refiere como almacenamiento estructurado, trmino que tambin incluye
a las bases de datos relacionales clsicas.
Werner Vogels, CTO de Amazon dice no llamarlos "bases de datos", se
refiere a su sistema Dynamo como "un almacenamiento de clave-valor de
alta disponibilidad". Google llama a su BigTable, otro de los modelos para
muchos simpatizantes de NoSQL, "un sistema de almacenamiento
distribuido para gestionar datos estructurados".
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
4/13
4
CARACTERSTICAS DE NOSQL
Entre las caractersticas que ms demandan las aplicaciones actuales y han
incidido en la creacin e incremento en el uso de las bases de datos NoSQL
se pueden enumerar las siguientes:
Gran cantidad de peticiones de lectura y escritura de forma concurrente. La
propia complejidad de la lgica detrs del funcionamiento de las bases o a
de datos relacionales, tiende a perder eficiencia en relacin al crecimiento o
de los datos. Esto hace responder con poca latencia en el caso de las
aplicaciones que atienden un gran nmero de pedidos a la misma vez.
Necesidad de almacenar y gestionar eficientemente cantidades masivas de
datos.
Aplicaciones multimedia, redes sociales o los buscadores, por solo citar
algunos ejemplos, requieren almacenar y gestionar cantidades de datos
continuamente crecientes sin que esto implique una perdida de eficiencia.
Estas son aplicaciones para los cuales los RDBMS en general no estndiseados.
Brindar un servicio alta escalabilidad y alta disponibilidad. Para la gestin
de altos volmenes de datos y para garantizar su disponibilidad, se hacen
necesarios sistemas redundantes y fciles de escalar. Los sistemas NoSQL
estn diseados para lograr fcilmente un escalado en forma horizontal a
diferencia de los clsicos sistemas relacionales que escalan a verticalmente.
Disminuir costos de operacin y de mantenimiento. La existencia de
buenos proveedores NoSQL basados en Software Libre y de los bajos
costes del hardware necesario para un escalado horizontal, convierten los
sistemas NoSQL en una opcin econmicamente ventajosa. Es por todo lo
anterior, que el concepto NoSQL no se entiende solamente como una forma
de llamar a los sistemas diferentes a los tradicionales, sino que se refieren a
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
5/13
5
las ventajas que estos traen sobre los clsicos sistemas RDBMS a como una
interpretacin en abreviatura de Nosolo SQL.
Pueden manejar enormes cantidades de datos. Hypertable, una
implementacin de cdigo abierto basada en BigTable, se usa dentro del
motor de bsqueda Zvents para escribir 1000 millones de celdas de datos
por da, segn cuenta el ingeniero Doug Judd.
A su vez, BigTable, en conjunto con su tecnologa hermana MapReduce,
procesa hasta 20 petabytes de datos por da.
Definitivamente la cantidad de datos es tan grande que las personas estn
buscando otras tecnologas", dice Travis de SpringSource, que con su
tecnologa VPork ayuda a los usuarios de NoSQL a realizar benchmarks de
rendimiento de sus bases de datos alternativas.
"No slo de SQL"
No relacionales: base de datos de archivo plano horizontal
Escalable: los nuevos nodos o mdulos puede ser fcilmente aadidos
para los usuarios ms.
Verticalmente escalable: se puede aadir ms informacin.
Almacenamiento estructurado: por lo general una coleccin de tablas de
datos estructurados (como las tablas hash o un diccionario).
No esquema predefinido
No es necesario trazar diseos orientados a objetos en un modelo
relacional.
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
6/13
6
Ejemplos: BigTable de Google, el Dynamo de Amazon. Cassandra
(utilizado en la bandeja de entrada de Facebook de bsqueda) y HBase
(Apache) son de cdigo abierto.
Ventajas de NoSQL
Barato, fcil de aplicar
Los datos se replican y se puede dividir
Fcil de distribuir
No se requiere un esquema
Puede escalar hacia arriba y abajo
procesar rpidamente grandes cantidades de datos
Relax el requisito de consistencia de los datos (PAC)
Desventajas de NoSQL
Nuevo y con errores a veces,
Los datos se duplican por lo general, el potencial de inconsistencia
No esquema normalizado
No existe un formato estndar para consultas
Ninguna lengua estndar
La mayora de los sistemas de NoSQL evitar que en la memoria de
almacenamiento
Dificultad para imponer estructuras complicadas
Confe en la capa de aplicacin para hacer cumplir la integridad de datos
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
7/13
7
MongoDB
MongoDB es un sistema de bases de datos NoSQL orientado a
documentos, a diferencia de MySQL, este no es una base de datos
relacional.
Es open source y esta entre nosotros desde el 2009. Est escrito en C++ y
tiene intencin de aumentar la escalabilidad de un sistema. Es compatible
con Linux, OS X, Windows y Solaris.
Adems de MongoDB existen otros sistemas NoSQL como por ejemplo
Cassandra, CouchDB, Redis, Riak, Membase, Neo4j y HBase.
Considera que mongoDB fue diseado para ser un motor de bsqueda
sobre aplicaciones en la nube, debes de ser bien especfico al momento de
elegir un sistema NoSQL. Esto porque tienen diferentes funciones o estn
optimizados para diferentes tareas: Como Cassandra que fue diseado para
bsquedas en Facebook.
Una base de datos en MongoDB tiene diferentes conceptos a una base de
datos regular como MySQL. Cada registro o unidad bsica de datos se le
denomina documento. Y cada conjunto de documentos, que formaran una
tabla, se le llama coleccin.
Un documento se podra comprar con el concepto de fila y una coleccin a
una tabla.
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
8/13
8
Caractersticas
MongoDB es un sistema de base de datos multiplataforma orientado a
documentos, de esquema libre. Esto significa que cada entrada o registro
puede tener un esquema de datos diferentes, con atributos o columnas
que no tienen por qu repetirse de un registro a otro. Est escrito en C++, lo
que le confiere cierta cercana a los recursos de hardware de la mquina, de
modo que es bastante rpido a la hora de ejecutar sus tareas. Adems, est
licenciado como GNU AGPL 3.0, de modo que se trata de un software de
licencia libre. Funciona en sistemas operativos Windows, Linux, OS X y
Solaris.
Las caractersticas que ms destacara de MongoDB son su velocidad y su
rico pero sencillo sistema de consulta de los contenidos de la base de datos.
Se podra decir que alcanza un balance perfecto entre rendimiento y
funcionalidad, incorporando muchos de los tipos de consulta que
utilizaramos en nuestro sistema relacional preferido, pero sin sacrificar en
rendimiento.
Los distintos documentos se almacenan en formato BSON, o Binary JSON,
que es una versin modificada de JSON que permite bsquedas rpidas de
datos. Para hacernos una idea, BSON guarda de forma explcita las
longitudes de los campos, los ndices de los arrays, y dems informacin
til para el escaneo de datos. Es por esto que, en algunos casos, el mismo
documento en BSON ocupa un poco ms de espacio de lo que ocupara de
estar almacenado directamente en formato JSON. Pero una de las ideas
claves en los sistemas NoSQL es que el almacenamiento es barato, y es
mejor aprovecharlo si as se introduce un considerable incremento en la
velocidad de localizacin de informacin dentro de un documento.
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
9/13
9
Sin embargo, en la prctica, nunca veremos el formato en que
verdaderamente se almacenan los datos, y trabajaremos siempre sobre un
documento en JSON tanto al almacenar como al consultar informacin.
Las caractersticas principales son:
Las consultas son a nivel de collection (sin joins)
Los ndices se generan en las collection
Los documentos tienen una ID nica
La atomicidad es a nivel de document.
MongoDB ofrece adems una serie de mtodos y herramientas novedosos
para hacer consultas (querying) y operaciones de una forma muy sencilla y
muy optimizado. Estos son:
Consultas:
Permite consultas dinmicas (cdigo JavaScript u objetos)
'Map/Reduce' (funciones JavaScript)
Creacin de indices secundarios (B-tree, R-tree, etc.)
Operaciones:
Replicacin
Master/Slave
Herramientas tiles:
Mongo shell, mongostat, mongo (dump,restore,export,import)
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
10/13
10
Ejemplo de implementacin de BD con MongoDB
Un ejemplo de un documento en MongoDB podra ser perfectamente ste:
{
_id : 4da2c0e2e999fb56bf000002
title : Una introduccin a MongoDB,
body : Loremipsum dolor sit amet,
published_at : 2012-05-09T18:17:07-07:00,
author_info : {
_id : 4dc8919331c0c00001000002
name : franco rai
},
tags : [MongoDB, NoSQL, Basesde datos]
comments : [
{
author_info : { name : rai franco,email : [email protected] },
body : Test,
created_at : 2012-05-10T10:14:01-07:00
},
{
author_info : { name : infantaspatricio, email : [email protected] },
body : Otrotest,
created_at : 2012-05-10T10:14:09-07:00
}
]
liked_by : [4d7cf768e999fb67c0000001,4da34c62ba875a19d4000001]
}
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
11/13
11
Como podemos ver en este documento pretende representar la manera en
que podran almacenarse los datos correspondientes a un post de un blog.
Los atributos _id o clave principal pueden tener el formato que se desee,
aunque MongoDB utiliza un valor parecido a un UUID en hexadecimal por
defecto si no se ha especificado ninguno. A pesar de parecer un valor
completamente aleatorio aunque ya se sabe que la aleatoriedad real no
existe en informtica, utilizan como base una semilla basada en la MAC de
la interfaz de red de la mquina y otros detalles de la misma para evitar que
dos mquinas diferentes puedan generar el mismo valor para la clave de un
documento. Y los primeros bytes corresponden a una marca de tiempo, de
modo que las claves se ordenan de forma natural por orden de creacin o
casi, pues est claro que las distintas mquinas corriendo MongoDB deben
tener la fecha y hora sincronizadas sin tener que mirar cul fue el ltimo
valor usado. Una solucin inteligente, a mi modo de ver bastante ms
eficiente que un campo autonumrico, en especial para evitar que una
mquina bloquee la insercin de registros en una coleccin slo paraasegurarse que no se dan condiciones de carrera al intentar dos mquinas
diferentes escribir un documento con el mismo valor para _id. Por cierto,
este atributo _id es el nico obligatorio para un documento.
Las etiquetas y los comentarios estn en el propio documento que
representa al post, en lugar de guardarlos en colecciones separadas y
utilizar claves forneas para referenciar a los mismos. Sin embargo, en el
atributo liked_by s que guardamos una relacin de claves, que
corresponden a los usuarios que han marcado el post como que les ha
gustado. Utilizar una forma u otra depender de las necesidades de acceso a
estos datos En este caso, por ejemplo, sabemos que no vamos a pintar
informacin sobre los usuarios que han marcado un post con un me
gusta, pero s queremos ver cuntos lo han marcado as, o si el usuario
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
12/13
12
actual ya lo ha marcado o no, con lo que almacenar nicamente las claves
de esos usuarios y guardar su informacin personal detallada en otra
coleccin es lo ms conveniente.
No es necesario pedir a MongoDB que nos devuelva todo el documento
cada vez que lo consultamos. Si por ejemplo vamos a pintar nicamente un
listado de posts recientes, seguramente sea suficiente obtener el atributo
title, con los documentos ordenados por published_at. As, ahorramos
ancho de banda entre el motor de base de datos y la aplicacin, al mismo
tiempo que memoria dado que no hay que instanciar todo el documento.
Adems, si tenemos muchos miles de visitantes, el atributo liked_by
podra llegar a crecer bastante. Aunque el tamao de un documento de
MongoDB puede llegar hasta los 16 Megabytes, con lo que podemos
almacenar bastante informacin dentro de un nico documento sin
necesidad de utilizar referencias, si as lo necesitamos. En caso de que
tuviramos que almacenar mucho ms, habra que optar por utilizar otro
esquema.
En momentos vamos a tener que desnormalizar para poder tener a mano la
informacin necesaria a la hora de pintar un post. Es por eso que en el
atributo author_info he utilizado una versin intermedia: Si bien tenemos
la clave principal del usuario que ha escrito este post, como es habitual que
pintemos el nombre del autor, he almacenado tambin dicho nombre en el
documento que representa al post, para que no sea necesario realizar una
segunda consulta a la coleccin usuarios. Estas desnormalizaciones
dependen nuevamente del uso que se den a los datos. En este caso, tengo
claro que el nombre de un usuario no va a cambiar demasiado, as que
recorrer todos los posts para cambiar este valor en caso de que el usuario
realice esta operacin, si bien es una modificacin que podra llevar un
tiempo considerable para ejecutarse, no es una operacin habitual frente a
-
7/31/2019 Tarea Academica Sistemas Distribuidos i
13/13
13
la consulta del nombre del autor, y por tanto compensa. Incluso podramos
llegar a tratar el post como algo ms permanente, de modo que aunque un
usuario cambiara su nombre a posteriori, el nombre utilizado para firmar
los posts anteriores no vare, o sencillamente los posts puedan firmarse con
diferentes pseudnimos.
Como creo que habr quedado patente a estas alturas, el modelado del
esquema de datos con MongoDB depende ms de la forma en que
consultaremos o actualizaremos los datos que de las limitaciones del propio
sistema.