Tabla de Contenido Agradecimientos.................................................................................................. .................. .......... ........ 3 Acerca del autor............................................................................................................... ......4 ...... 4 Lo que debes saber...............................................................................................................5 Capítulo 1: Introducción a No!L........................................................................................." 1.1. #!u$ es No!L%......................................................................................................." 1.&. #!u$ N' es No!L%.................................................................................................( 1.3. )ipos )ipos de bases de datos No!L................................................................................ ( 1.3.1. *ases de datos orientadas a documentos..........................................................+ 1.3.&. *ases de datos orientadas a cla,e-,alor............................................................ 1.3.3. *ases de datos orientadas a gra/os.................................................................... 1.4. istema de gestión de bases de datos 0*2....................................................... 1 1.5. Lista de *2 No!L.............................................................................................1 1.". #or qu$ usar No!L%............................................................................................1& Capítulo &: Conociendo 6ongo2*......................................................................................14 &.1. 6ongo2*..................................................................................................................14 &.&. )$rminos b7sicos entorno a 6ongo2*....................................................................14 &.&.1. 8'N 9 8a,acript 'bect Notation...................................................................14 &.&.&. 2ocumento........................................................................................................15 &.&.3. Colección...........................................................................................................15 &.3. Instalando 6ongo2*................................................................................................15 &.3.1. Instalación en Linu; desde la /uente.................................................................15 &.3.&. Instalación en Linu; desde los repositorios......................................................1" &.3.&.1. Instalación en ed ?at Linu; @nterprise otras distribuciones..........................................................................................................1" &.3.3. Instalación en 6ac ' B..............................................................................1( &.4. La consola interacti,a de 6ongo2*.........................................................................1+ &.4.1. Auda Auda en la consola interacti,a.................................................................... .....1 &.5. Conectando a una base de datos............................................................................. 1 &.5.1. eleccionando la base de datos.......................................................................1 &.". Nuestro primer documento.......................................................................................& 3. C>2 en 6ongo2*.........................................................................................................&1 3.1. #!u$ es C>2%.......................................................................................................&1 3.&. Create.......................................................................................................................&& 3.&.1. insert0...............................................................................................................&& 3.&.&. .sa,e0................................................................................................................&3 3.3. >ead.........................................................................................................................&3 3.3.1. /ind0...................................................................................................................&4 3.3.&. /ind'ne0............................................................................................................&5 3.4. pdate......................................................................................................................&" 3.4.1. update0.............................................................................................................&" 3.5. 2elete........................................................................................................................&" 3.5.1. remo,e0............................................................................................................&( 3.5.&. drop0.................................................................................................................&( Lo que queda pendiente......................................................................................................& Aportes........................................................................................................................... ......& ...... &
Agradecimientos
A mis padres= padres= mi Dermano mi no,ia por todo lo que me Dan podido brindar en mi desarrollo pro/esional personal.
Acerca del autor 6i nombre es Yohan D. Graterol= so un programador acti,ista pro9<' 0
bases
de datos
no relacionales=
computación en la nube= otros temas relacionados con so/tEare libre. o miembro del proecto
Lo que debes saber Antes de entrar al mundo de no!L debes conocer conceptos como: ¿Qué es una base de datos?, ¿Para que sirven?, ¿!uales son las a"licaciones #undamentales en el mundo real?, saber sobre bases de datos relacionales es opcional= a que cambia el paradigma en el tratamiento de la in/ormación. @ste libro estar7 con/ormado por ,arios tomos que tratar7n de abarcar todos los puntos importantes en consultas, administraci$n escalamiento de una base de datos documental. @ste primer tomo est7 en/ocado 1H a la parte b7sica del motor de bases de datos 6ongo2*.
!a"%tulo &' (ntroducci$n a )o*QL &.&. ¿Qué es )o*QL?
No!L o No solamente !L 0Not 'nl !L es un t$rmino acuJado por Carlo troKKi en 1+ nue,amente retomado por @ric @,ans en & se re/iere a un conunto de bases de datos que se di/erencian en gran parte de las bases de datos con,encionales= en características tanto de uso como de implementación estos tipos de bases de datos no usan !L o al menos no como lenguae predeterminado para realiKar las consultas. Las bases de datos No!L= no soportan totalmente ACI2= esto lo e;plica el teorema del pro/esor @ric *reEer= )eorema CA 0&= donde menciona: @s imposible para un sistema distribuido garantiKar simult7neamente las siguientes tres características: •
•
•
!onsistenc +!onsistencia' todos los nodos ,en la misma data al mismo tiempo. Availabilit +Dis"onibilidad' una garantía de que todos los requerimientos recibir7n una respuesta de que el requerimiento /ue e;itoso o /allido. Partition -olerance +-olerancia a la Partici$n' el sistema continFa operando a pesar de la p$rdida arbitraria de mensaes= o la /alla de parte del sistema.
@n primera instancia es una des,entaa= pero gracias a esto permite que los motores de bases de datos no relacionales escalen /7cilmente de manera DoriKontal. ara subsanar el problema de ACI2= nue,amente el pro/esor *reEer ideó *A@ 0*asicall A,ailable= o/t9state= @,entuall consistent que lo con/orman
•
Dis"onibilidad bsica' para cada solicitud se garantiKa una respuesta= satis/actoria o /alla de eecución.
•
/stado 0*o#t0' @l estado del sistema puede cambiar con el tiempo= a ,eces sin cualquier entrada.
•
!onsistencia /ventual' La base de datos puede ser en un momento inconsistente pero ser7 consistente con el tiempo. @l lenguae !L no es un lenguae predominante entre los distintos tipos de
bases de datos no relacionales= por lo general cada motor tiene su propio lenguae de consultas. Cabe destacar que la in/ormación no se almacena con un esquema /io 0pero si usando almacenamiento estructurado= aun que si e;iste un esquema que el 2*A o el desarrollador propone con anterioridad de manera ,irtual= es decir= no se crea en el motor antes de utiliKar la base de datos sino al almacenar el primer ,alor.
&.1. ¿Qué )2 es )o*QL?
@l t$rmino No!L no es una base de datos tampoco un tipo de base de datos= sino una de/inición que engloba un conunto de tipos de bases de datos que di/iere con las bases de datos con,encionales.
&.3. -i"os de bases de datos )o*QL
@n el mundo de las bases de datos no relacionales nos encontramos con
distintos modelos o tipos= que se desempeJan meor en algunos ambientes especí/icos esas distintas /acetas no se ,en en las base de datos relacionales. @n este libro se e;pondr7n los tipos m7s comunes.
&.3.&. 4ases de datos orientadas a documentos
Las bases de datos orientadas a documentos o tambi$n denominadas como *ases de datos documental= trabaan bao el marco de la de/inición de un 2ocumento= donde cada motor que usa esta de/inición di/iere en los detalles= pero la maoría concuerda en como se almacena la in/ormación con algFn /ormato est7ndar. Los /ormatos m7s utiliKados por los motores m7s populares son: 8'N *'N. e podría considerar este tipo como el m7s utiliKada en la actualidad. Cada documento= es mu similar a un registro en una base de datos relacional= donde se puede obser,ar un esquema parecido mas no rígido. 2os documentos no tienen porque tener un esquema igual= aunque sean de una misma colección de datos.
{ _id : 1 , nombre : "MongoDB" , u r l : " h t t p : / /www. mongodb . o r g " , t i p o : " Documental " } Eemplo de un documento en !ormato #$%.
@ste eemplo demuestra la sencilleK de un documento= se obser,a un modelo al estilo clave ' valor . na analogía con las bases de datos relacionales
&.3.1. 4ases de datos orientadas a clave5valor
@ste tipo de bases de datos es mu similar a las bases de datos documental en el concepto de guardar la in/ormación con el modelo cla,e:,alor= la di/erencia radica en que un documento se almacena en una cla,e esta de/inición puede parecer algo abstracta. @sto se e;plica meor con un eemplo. @l siguiente eemplo utiliKa el documento de la sección anterior:
mongodb &' { _id : 1 , nombre : "MongoDB" , u r l : " h t t p : / /www. mongodb . o r g " , t i p o : " Documental " }
La cla,e en este caso es OmongodbO su contenido es el mismo documento de la sección anterior. @sto Dace que ,aríe la /orma de recuperar la in/ormación con respecto a las bases de datos basadas en documentos. Algun mu interesante de este tipo es que permite ser utiliKado unto bases de datos orientadas a documentos= lo que origina motores Díbridos.
&.3.3. 4ases de datos orientadas a gra#os
@ste tipo di/iere completamente a los tipos antes mencionados= trata la in/ormación de una manera peculiar usando gra/os teoría de gra/os. Cada nodo solo debe contener una sola columna= por lo tanto se debe normaliKar completamente las bases de datos. P como la de/inición de gra/os indica= las relaciones solo pueden ser binarias= es decir= un nodo puede solo usar una relación para entrar en contacto con otro nodo no m7s de uno. Las ,entaas de este tipo de bases de datos ,an en/ocadas a la integridad de los datos= cualquier cambio en un nodo o relación solo a/ecta localmente.
&.6. *istema de gesti$n de bases de datos +*G4D
8orge 7ncDeK Aseno 0&5 de/ine *24 como: n sistema gestor de bases de datos o *2 es el so/tEare que permite a los usuarios procesar= describir= administrar recuperar los datos almacenados en una base de datos.
n tipo de base de datos no sir,e de nada sino tiene un sistema que lo gestione= a menos que desees crear un *2. @n No!L Da una basta gama de *2= la maoría est7n bao licencia de código libre= permitiendo así usar= estudiar= modi/icar redistribuir sin problema alguno con respecto a algunos motores de bases de datos relacionales con licencias pri,ati,as.
&.7. Lista de *G4D )o*QL
•
*ases de datos documental
◦
◦
◦
•
6ongo2* ▪
LanKamiento: &+
▪
Licencia: N AL ,3.
CoucD2* ▪
LanKamiento: &5
▪
Licencia: ApacDe License &.
>a,en 2* ▪
LanKamiento: &1
▪
Licencia: N AL ,3.
*ases de datos cla,e-,alor ◦
◦
◦
ApacDe Cassandra ▪
LanKamiento: &+
▪
Licencia: ApacDe License &.
>iaQ ▪
LanKamiento: &
▪
Licencia: ApacDe License &.
>edis
▪
•
Licencia: *2
*ases de datos en gra/os ◦
◦
◦
Neo4 ▪
LanKamiento: &
▪
Licencia: N AL ,3.
2e; ▪
LanKamiento: &+
▪
Licencia: Comercial
ones rapD2* ▪
LanKamiento: &1&
▪
Licencia: N AL ,3. comercial
&.8. ¿Por qué usar )o*QL?
@n esta $poca donde se generan cantidades enormes de datos menos estructurados= las bases de datos relacionales empieKan a mostrar de/iciencias= en almacenamiento u operaciones siendo esta una de las principales raKones de impulsar el uso de bases de datos no relacionales. 6ucDas personas se quean del mo,imiento No!L= m7s que todo por una resistencia al cambio= que por los contras de este tipo de bases de datos en la actualidad gestionar una cantidad de
datos gigantesca no es tan sencillo si piensas en estructuras. 'tra de las raKones rele,antes es la arquitectura= que permite escalar DoriKontalmente de manera sencilla sin tantos problemas de rendimiento. La ,elocidad de desarrollo la ,elocidad de la base de datos son puntos a /a,or para las bases de datos no relacionales= reduciendo el tiempo de desarrollo e,itando compleas sentencias !L adem7s aumentando la ,elocidad de respuestas para los clientes.
!a"%tulo 1' !onociendo 9ongoD4 1.&. 9ongoD4
6ongo2* es un sistema de bases de datos no relacionales= multiplata/orma e inspirada en el tipo de bases de datos documental cla,e-,alor= su nombre pro,iene del t$rmino en ingl$s Dumongous. @st7 liberada bao licencia de so/tEare libre= especí/icamente N AL 3. . 6ongo2* usa el /ormato *'N 08'N Compilado para guardar la in/ormación= dando la libertad de manear un esquema libre. @ste motor de bases de datos es uno de los m7s conocidos usados= pudi$ndolo comparar en popularidad con 6!L en el caso de las bases de datos relacionales. @l desarrollo de 6ongo2* comenKó en el aJo &( por la empresa 1gen3 = publicando una ,ersión /inal en el &. ara la /ecDa que es escrito este libro= 6ongo2* se encuentra en la ,ersión &.".1.
1.1. -érminos bsicos entorno a 9ongoD4 1.1.&. :*2) ; :ava*cri"t 2b
8'N
es
/ormato
compacto
de
representacion
de
obetos.
Las
especi/icaciones las publicó 2ouglas CrocQ/ord en el documento >
cantidades de sistemas para intercambiar in/ormaciíon por su simplicidad en comparación con B6L. @ste /ormato soporta gran cantidad de tipos de datos= lo que lo Dace atraci,o para un uso generaliKado= cada ,eK m7s lenguaes de programación dan soporte a este /ormato. @l eemplo del capítulo anterior= donde se mostraba un documento= no es m7s que 8'N.
1.1.1. Documento
n documento es un conunto de datos estructurados 0mas no con un esquema estricto= que contiene pares cla,e-,alor= se usa *'N 08'N *inario como /ormato para almacenar los documentos. n documento puede ser comparado con una /ila o registro en una base de datos relacional.
1.1.3. !olecci$n
@s un conunto de documentos= similar a una tabla en las bases de datos relacionales.
1.3. (nstalando 9ongoD4 1.3.&. (nstalaci$n en Linu= desde la #uente
@;isten distintas /ormas de instalar 6ongo2* en Linu;= una de ellas= la menos recomendable es compilar el código /uente que pueden descargar desde:
descomprimirlos usarlos.
1.3.1. (nstalaci$n en Linu= desde los re"ositorios
Los sistemas Linu; a di/erencia de otros '= maneo sus so/tEare en repositorios= que no es m7s que un sitio centraliKado donde se almacenan todos los so/tEare disponible para una distribución de Linu;.
2.3.2.1. Instalación en Fedora Linux, Red Hat Linux Enterprise y otras distribuciones.
(nstalaci$n en >edora 5 ed @at Linu= /nter"rise 5 !ent2* ara instalar 6ongo2* en alguna de estras distribuciones= se debe Dacer uso del gestor de paquetes *um eecutar el siguiente comando:
*um in)tall mongodb+)erer mongodb 2onde cada componente es ,ital segFn lo que se quiera Dacer con 6ongo2*= a continuación se muestra todas las Derramientas segun el paquete seleccionado. •
mongodb' Contiene todos los paquetes RclienteS= como es el caso del cliente mongo= la Derramienta para respaldos en binarios de bases de datos mongodump=
mongorestore
para
recuperar
respaldos
en
binario=
mongoe;port mongoimport que realiKan una acción similar a mongodump mongorestore= pero usan /ormato 8'N o C.
ser,idor= como el demonio mongod. Los
componentes
mongodb
mongodb+)erer se
pueden
instalar
independientemente. ¿!undo hacer eso? n caso mu representati,o es cuando se desea colocar en producción la base de datos. e recomienda solo instalar los paquetes de ser,icio mongodb+)erer el cliente en otro ser,idor. ara iniciar-reiniciar o apagar el demonio de 6ongo2* en >edora se utiliKa el siguiente comando:
)*)temct l )tart - r e)tart - )top mongod.)erice @n el caso de ed @at /nter"rise Linu= 8 o deri,ados:
)erice mongod )tart - re)tart - )top ara acti,ar el inicio de 6ongo2* en el arranque del sistema debe eecutar segFn sea el caso lo siguiente: • •
Fedora: )*)temctl enable mongod.)erice Red Hat Enterprise Linux 6 o deriados: chcon(ig mongod on
Instalación en !ebian @n el caso de 2ebian= en un solo paquete se encuentra la distribución completa de 6ongo2* para instalarlo se utiliKa el gestor de paquetes apt+get :
apt+get in)tall mongodb 2.3.3. Instalación en "ac #$ %
(nstalaci$n 9anual
usando c>L= descomprimirlo colocarlo en una carpeta a con,eniencia.
curl +$ http://download).mongodb.org/mongodb+o)+0_2+ 333.tg4 iendo BBB= la ,ersión disponible. ADora= se descomprime el arcDi,o usando la Derramienta tar.
tar +4( mongodb+o)+0_2+333.tg4 Con todos los arcDi,os de 6ongo2* en su 6ac ' B= solo debe ingresar a la carpeta resultante eecutar el demonio mongod . sando @omebreB
brew update brew in)tall mongodb
1.6. La consola interactiva de 9ongoD4 Pa con la pre,ia instalación de 6ongo2* sus Derramientas= podemos acceder a su consola interacti,a realiKar nuestras primeras interacciones con 6ongo2*.
Al iniciar la consola se conecta autom7ticamente a la base de datos test= a partir de allí podemos realiKar consultas sobre esa base de datos. La consola es importante para administrar 6ongo2*= puede parecer desa/iante para los que no est7n acostumbrado a usar Derramientas en consola= pero la gente de 1gen
1.6.&. Auda en la consola interactiva
ara acceder a la auda de 6ongo2* en la consola= se utiliKa el comando help nos muestra el contenido b7sico de la auda.
1.7. !onectando a una base de datos
La cone;ión a bases de datos desde la consola o a tra,$s de algFn lenguae es mu sencillo aFn así en 6ongo2* N' se crean las bases de datos antes de usarla. @n bases de datos relacionales= se debe crear toda una estructura inicial para poder almacenar in/ormación= al menos se debe tener una base de datos con una tabla= eso en 6ongo2* no se Dace. ara crear una base de datos se debe seleccionar=
luego
almacenar
un
documento
creando
una
colección
de
documentos.
1.7.&. *eleccionando la base de datos
Antes de seleccionar una base de datos= uno tiene la opción de ,er el listado de bases de datos que e;isten en el sistema= con el comando )how db) la salida de este comando nos muestra el nombre el tamaJo de la base de datos= es importante mencionar que 6ongo2* al crear el primer documento reser,a espacio en disco= como mínimo & mb. Luego de saber la lista de bases de datos e;istente= se debe seleccionar una
uso del comando u)e ba)ededato)= a podemos trabaar con la base de datos e;istente u operar para crear una nue,a.
1.8. )uestro "rimer documento
Llegó la Dora de crear una base de datos una colección= eso se Dar7 almacenando un documento usando el obeto db= pre,ia eecución del comando use. n documento puede tener en teoría un m7;imo de Dasta &894 de in/ormación. Apro,ecDando el eemplo del primer capítulo= para por /in almacenarlo en 6ongo2* consultarlo. na de las cosas que Da que tener en cuenta usando la consola interacti,a= es usar ,ariables para crear o modi/icar documentos= de esta manera podemos e,itar accidentes con una mala manipulación directa de la base de datos. ara almacenar un documento debemos eecutar el m$todo .in)ert56 del obeto db= especi/icando el nombre de la colección 0la colección se crea de manera din7mica como la base de datos. @emplo:
' documento & { _id : 1 , nombre : "MongoDB" , url: " http://www.mongodb.org ", tipo: "Documental" } ' db.nuea_coleccion.in)ert5documento6 2e esta manera tenemos nuestra primera colección nuestro primer
collection) como el m$todo .(ind56.
' )how collection) nuea_coleccion )*)tem.indee) )*)tem.indee) es una colección que usa 6ongo2* para almacenar los índices de la colección. or de/ecto Tid es un índice.
' db.nuea_coleccion.(ind5 6 { "_id" : 1 , "nombre" : "MongoDB" , "url": "http://www. mongodb.org" , "tipo" : "Documental" }
Con .(ind56 se puede comprobar que e/ecti,amente se almacenó el documento en la colección nuea_colecci7n.
3. !D en 9ongoD4 3.&. ¿Qué es !D?
@l propósito de las bases de datos no es solo almacenar in/ormación= sino manipular esa in/ormación de distintas maneras con el obeti,o de alimentar un conunto de procesos pre,iamente establecidos en los sistemas in/orm7ticos. @n los sistemas de base de datos e;isten 4 /unciones b7sicas las cuales son: Crear= Leer= 6odi/icar @liminar 0Create= >ead= pdate and 2elete 9 C>2= de estas 4 /unciones b7sicas deri,an todo un sin /in de /unciones para el
tratamiento de la in/ormación. 6ongo2* pro,ee un grupo de m$todos en 8a,acript para realiKar C>2 en nuestras bases de datos a tra,$s de la consola los dri,ers de los distintos lenguaes de programación.
3.1. !reate
Crear es la primera de las 4 /unciones elementales a la Dora de utiliKar bases de datos= nos permite insertar unidades de in/ormación el caso de 6ongo2* a tra,$s de documentos en colecciones de datos. ara poder crear un documento 6ongo2* posee el m$todo .in)ert56= .)ae56 en de una manera especial .update56.
3.1.&. insert+
@ste m$todo agrega un documento o un arreglo de documentos en una colección. u uso es mu sencillo da la posibilidad de agregar un documento con o sin campo Tid.
Eemplo de in)erci7n de un documento
Eemplo de in)erci7n de ario) documento) en una colecci7n 3.1.1. .save+ )iene todas las /unciones de .insert0= pero ademas permite actualiKar un documento si a e;iste el Tid de dicDo documento= en ese caso .insert0 mostraría una e;cepción.
3.3. ead
Leer es nuestra segunda /unción elemental en los sistemas de base de datos= 6ongo2* utiliKa dos m$todos para la lectura de los documentos= el primer m$todo es .(ind56 que nos permite leer todos los documentos de una colección .(ind$ne56 que nos permite leer solo uno.
3.3.&. #ind+
elecciona documentos en una colección de,uel,e un cursor con documentos. @l siguiente eemplo muestra los documentos de nuestra colección libro.
@l resultado que nos arroa no es mu /7cil de leer= a que no tiene un /ormato de salida tan claro= pero Da /orma de que se muestre de la misma manera que
los
na,egadores
muestran
el
/ormato
8'N
en
las
consolas
desarrolladores= eso se logra utiliKando el comando prett*56 luego del (ind56.
de
3.3.2. &ind#ne'(
Al igual que .(ind56= permite realiKar bFsquedas en una colección con la di/erencia que solo de,uel,e un solo documento. i no se utiliKan par7metros en la bFsqueda con .(ind$ne56= de,uel,e solo el primer documento agregado a la colección o el primer documento en orden natural en el disco.
3.6. "date
ActualiKar es otra de nuestras /unciones elementales= con ella podremos modi/icar in/ormación en el caso de 6ongo2* se puede realiKar Dasta inserción de documentos con el m$todo .update56, ademas se puede utiliKar la /unción .)ae56 antes ,ista= en actualiKaciones simples.
3.6.&. u"date+
6odi/ica un documento o un conunto de documentos. or de/ecto solo modi/ica un documento= pero si la opción multi est7 acti,ada realiKa la modi/icación sobre todos los documentos que cumplan con un criterio dado. Al igual que con ./ind0= .update0 se puede utiliKar con par7metros o criterios de bFsquedas. .update0 se utiliKa con la siguiente estructura:
db.collection.update 5 8con)ulta + criterio)', 8documento_modi(icado ', {up)ert: true - (al)e, multi : true - (al)e } 6 La opción up)ert = permite agregar un documento si no e;iste= siempre cuando esta opción est$ acti,ada.
3.7. Delete
para eliminar documentos colecciones= en el caso de las colecciones por el tema de rendimiento es meor utiliKar .drop56.
3.7.&. remove+
@limina uno o m7s documentos de una colección. >ecibe par7metros para realiKar una eliminación selecti,a si no se le pasa ningFn par7metro elimina todos los documentos de la colección. )omando el Tid del documento que est7 en la salida del eemplo
del
apartado sobre .(ind$ne56= se proceder7 a borrar dicDo documento consultado de nue,o= se corroborar7 la eliminación.
emos que la consulta es sencilla= a que directamente pasamos el par7metro del documento que deseamos eliminar= si pasamos un par7metro que coinciden en ,arios documentos= se eliminar7n todos los documentos con dicDas coincidencias.
3.7.1. dro"+
La /unción .drop56 elimina toda una colección= es la m7s recomendable a la Dora de realiKar esta tarea= a que utiliKa menos recursos que .remoe56.
Lo que queda "endiente ara el pró;imo tomo del libro quedan pendientes los siguientes temas: •
Consultas a,anKadas
con
6ongo2*=
en bFsqueda=
modi/icación
eliminación de documentos. •
Cone;ión de tDon Node8 con 6ongo2* usando los dri,ers nati,os para ambos lenguaes de programación.
•
2eplo administración en entorno UNIB.
•
@scalamiento DoriKontal.
A"ortes i deseas realiKar algFn aporte al libro= puedes en,iar un correo a ograterolG/edoraproect.org= indicando sugerencias= errores lo que te gustaría que se agregara en el tomo o en /uturos tomos todas tus opiniones ser7n bien,enidas.