MongoDB – La base de datos NoSQL que dara que hablar
En mi artículo Hadoop, el elefante memorioso; NoSQL y la Big Data les hice una breve introducción al movimiento NoSQL, hoy les voy a presentar uno de los principales exponentes de ese movimiento, MongoDB.
MongoDB es lo que se conoce como una base de datos documental; la idea fundamental detrás de esta base de datos es moverse del tradicional concepto de “fila” que ofrecen las bases de datos relacionales hacia un modelo más flexible, el “documento”.
Las bases de datos relacionales y su lenguaje de consulta, el SQL, estan construidas alrededor de la teoría matemática de conjuntos, aunque esto es bueno desde un punto de vista conceptual, hace que ellas sean dificiles de combinar con el modelo de programación orientados a objetos; los objetos son sobre los datos y sus operaciones y las bases de datos relacionales son sobre conjuntos de valores. Operaciones que pueden ser fáciles de expresar en términos relacionales, a veces son muy difíciles de expresar en un sistema orientado a objetos.
El enfoque orientado a documentos de MongoDB, al permitir incrustar documentos y colecciones de elementos, hace posible representar complejas relaciones jerarquicas en un solo registro. Este nuevo enfoque, encanja en una forma mucho más natural con el modo en que la programación orientados a objetos se maneja sobre los datos y sus operaciones.
MongoDB es asimismo, como la mayoría de las bases de datos del movimiento NoSQL, una base de datos sin un esquema estructurado. Las claves de cada documento no estan predifinidas ni fijadas en ningun modo. Cuando trabajamos con ella, vamos a tener mucha flexibilidad para desarrollar el modelado de nuestros datos de la forma que nos sea más conveniente; asimismo, esta característica también la hace ideal para manejar todos los datos desestructurados que son generados actualmente por las Webs 2.0.
Algunas de las características sobresalientes que posee MongoDB son:
- la flexibilidad de su modelo de datos: como ya dijimos, su orientacion a documentos nos brinda mucha más flexibilidad que las bases de datos relacionales tradicionales; asimismo este modelo se acopla mucho mejor con la programación orientados a objetos. (como veremos en un ejemplo, la estructura de sus documentos es muy similar a la de los objetos creados en JavaScript.)
- su facilidad para escalar: MongoDB fue desde sus comienzos diseñada para escalar, para menejar grandes cantidades de datos; su modelo de datos orientado a documentos le permite automaticamente dividir los datos entre multiples servidores; asimismo posee tambien la capacidad de redistribuir los documentos entre diferentes clusters de servidores.
- su simple administracion: MongoDB trata de simplificar su administración haciendo que los servidores se administren por si solos lo mayor posible; su filosofia es que los servidores deberían manejar la mayor parte de su configuración por sí solos en forma automatica, permitiendo que los usuarios puedan realizar modificaciones a la configuración solo si es necesario.
- su performance: Una gran performance es uno de los objetivos principales que se propusieron los desarrolladores de MongoDB, cada aspecto de su diseño fue pensado para lograr una mejor gestion de memoria y eficiencia.
- la cantidad de herramientas que posee: MongoDB posee una gran cantidad de herramientas, entre las que se destacan:
- Indexación: soporta indices genericos secundarios, permitiendo unas consultas más rápidas, y posee tambien capacidades de indexacion unicas, compuestas y geoespaciales.
- Stored JavaScript: en lugar de los clásicos stored procedures de las bases de datos tradicionales; MongoDB permite utilizar funciones y valores de JavaScript en el servidor.
- Agregacion: soporta el modelo MapReduce y otras muchas funciones agregadas que permiten analizar los datos de una forma mucho más eficiente.
- Almacenamiento de archivos: soporta un protocolo facil de usar para almacenar archivos de gran volumen.
- Integración con JavaScript: MongoDB esta intimamente integrada con JavaScript, lo que la hace ideal para utilizarla en entornos Webs.
MongoDB es, además de todo esto, una base de datos Open Source, por lo que podemos instalarla facilmente y sin ningun costo para poder comenzar a probarla.
Para instalarla en Ubuntu Linux, simplemente debemos ejecutar el siguiente comando en la terminal:
1 |
sudo apt-get install mongodb |
Antes de que pueda continuar con un breve ejemplo, hará falta que aclare algunos de los conceptos que utiliza MongoDB. Ellos son:
- Documentos: Un documento es la unidad basica de datos que utiliza MongoDB, es similar a una fila en las bases de datos relacionales, pero es mucho más flexible y expresivo, incluso pude tener otros documentos incrustados.
- Colecciones: Las colecciones son los equivalentes a las tablas en las bases de datos relacionales, pero las colecciones no poseen un esquema predefinido; son donde se van agrupando los diferentes documentos.
- Base de datos: Las bases de datos son similares a las base de datos que conocemos del modelo relacional, van a contener a las diferentes colecciones. Una sola instancia de MongoDB, puede hospedar multiples e independientes bases de datos, cada una con sus propias colecciones y permisos.
Hora de comenzar con el ejemplo, donde espero queden más claros los conceptos y la forma en que MongoDB funciona.
Una vez que tenemos instalada MongoDB, podremos iniciar el shell que nos permitirá comenzar a interactuar con ella con el siguiente comando:
1 |
mongo |
Este comando nos abrira el cliente, donde podremos ver la versión que estamos utilizando y la base de datos a la que estamos conectados.
En este ejemplo, vamos a crear una colección de personas, que contendrá alguna información básica, como ser nombre, edad, sexo, dirección, etc.
Vamos a comenzar por crear el primer documento que representará a una persona, lo haremos ingresando lo siguiente:
1 2 3 4 5 6 7 8 |
persona = { "nombre" : "Raul Lopez Briega", "edad" : 31, "sexo" : "masculino", "direccion" : { "calle" : "Esperanza 1313", "ciudad" : "Buenos Aires", "pais" : "Argentina" } } |
Como vemos, prácticamente es el mismo proceso que utilizaríamos para crear un objeto en JavaScript, aquí se ve claramente la estrecha relación que existe entre MongoDB, la programación orientados a objetos y JavaScript. Otra cosa para hacer notar, es la flexibilidad que nos ofrecen los documentos, en este ejemplo estamos creando un documento que posee otro documento incrustado (la direccion, que posee sus propios atributos), asimismo tambien podemos ver que los documentos pueden contener distintos objetos, por ejemplo el atributo “nombre” contiene datos del tipo “texto”, mientras que el atributo “edad” contiene datos del tipo “numerico”.
Una vez que tenemos este documento válido, lo vamos a insertar en nuestra colección de personas de la siguiente forma:
1 |
db.personas.insert(persona) |
Luego podemos consultar los documentos en nuestra coleccion con los comandos find(), que nos mostrará todos los documentos de la coleccion; y findOne(), que solo nos mostrará uno.
Ahora, si por ejemplo quisieramos modificar nuestro documento, y le quisieramos agregar, por ejmplo, el codigo postal a la dirección; siguiendo la tipica orientación a objetos, deberíamos realizar lo siguiente:
En primer lugar, agregariamos el codigo postal ingresando lo siguiente:
1 |
persona.direccion.cod_postal = 2038 |
y luego actualizaremos el documento en nuestra colección con el comando “update()”, así:
1 |
db.personas.update({nombre : "Raul Lopez Briega"}, persona) |
con este comando estamos actualizando el documento de la coleccion “personas” donde en el atributo “nombre” es igual a “Raul Lopez Briega”, con los valores del documento “persona”.
Si quisieramos agregar otra persona a la colección, simplemente seguimos el mismo proceso que utilizamos para crear el documento y luego lo insertamos a la colección.
como podemos ver ahora el comando find(), nos muestra que la colección ahora posee dos personas.
Con el comando findOne, también podemos seleccionar el documento de la coleccion personas donde el atributo “nombre” sea igual a “Ezequiel Lopez”. Tengan en cuenta que MongoDB tiene en cuenta las mayusculas y minusculas, por lo que si no ingresan la combinacion de mayusculas y minusculas correctas, el comando findOne no podrá encontrar el documento.
Si quisieramos eliminar el documento recien creado, debemos utilizar el comando “remove” del siguiente modo:
1 |
db.personas.remove({nombre : "Ezequiel Lopez"}) |
El comando “help”, les brinda una ayuda sobre los diferentes comando que pueden utilizar.
Como les comente, las colecciones no poseen ningun esquema, por lo podríamos crear un nuevo documento con una estructura distinta del que poseemos e insertarlo igualmente en nuestra coleccion “personas” sin dificultades como muestra el siguiente ejemplo:
Para salir de MongoDB, simplemente ingresamos el comando “exit”.
Hasta aquí este ejemplo, para un breve tutorial de como funciona MongoDB puden visitar el siguiente enlace, que los llevará al tutorial oficial. (también pueden hacer click sobre la imagen).
Aquí termina esta presentación de MongoDB, los invito a que continuen explorando estas nuevas tecnologías que nos ayudan a modelar y analizar de una forma más eficiente la cantidad de información que se genera día a día.
Saludos!