Noticia

MongoDB

¿Que es MongoDB?

MongoDB (de la palabra en inglés “humongous” que significa enorme) es un sistema de base de datos NoSQL orientado a documentos, desarrollado bajo el concepto de código abierto. MongoDB forma parte de la nueva familia de sistemas de base de datos NoSQL. En vez de guardar los datos en tablas como se hace en las base de datos relacionales, MongoDB guarda estructuras de datos en documentos tipo JSON con un esquema dinámico (MongoDB llama ese formato BSON), haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida.

El desarrollo de MongoDB empezó en octubre de 2007 por la compañía de software 10gen.Ahora MongoDB es una base de datos lista para su uso en producción y con muchas características (features). Esta base de datos se utiliza mucho en la industria y MTV Network, Craiglist y Foursquare son algunas de las empresas que utilizan esta base de datos.El código binario está disponible para los sistemas operativos Windows, Linux, OS X y Solaris.

Historia

El desarrollo de MongoDB empezó con la empresa de software 10gen en el 2007, cuando estaban desarrollando una plataforma como servicio (PaaS) similar al conocido Google App Engine. En el 2009 MongoDB fue lanzado como un producto independiente y publicado bajo la licencia de código abierto AGPL. En marzo de 2011, se lanzó la versión 1.4 y se consideró ya como una base de datos lista para su uso en producción.

Concesión de licencias y soporte

MongoDB se puede obtener de una forma gratuita bajo la licencia pública general de Affero (AGPL) de GNU. Los drivers para los lenguajes de programación están bajo la licencia de Apache. Adicional a estas licencias, 10gen ofrece una licencia comercial para MongoDB.

Características principales

Lo siguiente es una breve descripción de las características principales de MongoDB:

Consultas Ad hoc

MongoDB soporta la búsqueda por campos, consultas de rangos y expresiones regulares. Las consultas pueden devolver un campo específico del documento pero también puede ser una función JavaScript definida por el usuario.

Indexación

Cualquier campo en un documento de MongoDB puede ser indexado, al igual que es posible hacer índices secundarios. El concepto de índices en MongoDB es similar a los encontrados en base de datos relacionales.

Replicación

MongoDB soporta el tipo de replicación maestro-esclavo. El maestro puede ejecutar comandos de lectura y escritura. El esclavo puede copiar los datos del maestro y sólo se puede usar para lectura o para copia de seguridad, pero no se pueden realizar escrituras. El esclavo tiene la habilidad de poder elegir un nuevo maestro en caso de que se caiga el servicio con el maestro actual.

Balanceo de carga

MongoDB se puede escalar de forma horizontal usando el concepto de “shard”. El desarrollador elige una llave shard, la cual determina cómo serán distribuidos los datos en una colección. Los datos son divididos en rangos (basado en la llave shard) y distribuidos a través de múltiples shard. Un shard es un maestro con uno o más esclavos. MongoDB tiene la capacidad de ejecutarse en múltiple servidores, balanceando la carga y/o duplicando los datos para poder mantener el sistema funcionando en caso que exista un fallo de hardware. La configuración automática es fácil de implementar bajo MongoDB y se pueden agregar nuevas máquinas a MongoDB con el sistema de base de datos corriendo.

Almacenamiento de archivos

MongoDB puede ser utilizado con un sistema de archivos, tomando la ventaja de la capacidad que tiene MongoDB para el balanceo de carga y la replicación de datos utilizando múltiples servidores para el almacenamiento de archivos. Esta función (que es llamada GridFS) está incluida en los drivers de MongoDB y disponible para los lenguajes de programación que soporta MongoDB. Esta base de datos expone funciones para la manipulación de archivos y contenido a los desarrolladores. En un sistema con múltiple servidores, los archivos pueden ser distribuidos y copiados entre los mismos varias veces y de una forma transparente, de esta forma se crea un sistema eficiente que maneja fallos y balanceo de carga.

Agregación

La función MapReduce puede ser utilizada para el procesamiento por lotes de datos y operaciones de agregación. Esta función permite que los usuarios puedan obtener el tipo de resultado que se obtiene cuando se utiliza el comando SQL “group-by”.

Ejecución de JavaScript del lado del servidor

MongoDB tiene la capacidad de realizar consultas utilizando JavaScript, haciendo que estas sean enviadas directamente a la base de datos para ser ejecutadas.

 

¿Cómo funciona MongoDB?

MongoDB está escrito en C++, aunque las consultas se hacen pasando objetos JSON como parámetro. Es algo bastante lógico, dado que los propios documentos se almacenan en BSON. Por ejemplo:

db.Clientes.find({Nombre:"Pedro"});

La consulta anterior buscará todos los clientes cuyo nombre sea Pedro.

MongoDB viene de serie con una consola desde la que podemos ejecutar los distintos comandos. Esta consola está construida sobre JavaScript, por lo que las consultas se realizan utilizando ese lenguaje. Además de las funciones de MongoDB, podemos utilizar muchas de las funciones propias de JavaSciprt. En la consola también podemos definir variables, funciones o utilizar bucles.

Si queremos usar nuestro lenguaje de programación favorito, existen drivers para un gran número de ellos. Hay drivers oficiales para C#, Java, Node.js, PHP, Python, Ruby, C, C++, Perl o Scala. Aunque estos drivers están soportados por MongoDB, no todos están en el mismo estado de madurez. Por ejemplo el de C es una versión alpha. Si queremos utilizar un lenguaje concreto, es mejor revisar los drivers disponibles para comprobar si son adecuados para un entorno de producción.

 

¿Dónde se puede utilizar MongoDB?

Aunque se suele decir que las bases de datos NoSQL tienen un ámbito de aplicación reducido,MongoDB se puede utilizar en muchos de los proyectos que desarrollamos en la actualidad.Cualquier aplicación que necesite almacenar datos semi estructurados puede usar MongoDB. Es el caso de las típicas aplicaciones CRUD o de muchos de los desarrollos web actuales.

Eso sí, aunque las colecciones de MongoDB no necesitan definir une esquema, es importante que diseñemos nuestra aplicación para seguir uno. Tendremos que pensar si necesitamos normalizar los datos, denormalizarlos o utilizar una aproximación híbrida. Estas decisiones pueden afectar al rendimiento de nuestra aplicación. En definitiva el esquema lo definen las consultas que vayamos a realizar con más frecuencia. MongoDB es especialmente útil en entornos que requieran escalabilidad. Con sus opciones de replicación y sharding, que son muy sencillas de configurar, podemos conseguir un sistema que escale horizontalmente sin demasiados problemas.

Casos de uso

La base de datos MongoDB es adecuada para los siguientes usos:16

  • Almacenamiento y registro de eventos
  • Para sistemas de manejo de documentos y contenido
  • Comercio Electrónico
  • Juegos
  • Problemas de alto volumen de lecturas
  • Aplicaciones móviles
  • Almacén de datos operacional de una página Web
  • Manejo de contenido
  • Almacenamiento de comentarios
  • Votaciones
  • Registro de usuarios
  • Perfiles de usuarios
  • Sesiones de datos
  • etc.
  • Proyectos que utilizan metodologías de desarrollo iterativo o ágiles
  • Manejo de estadísticas en tiempo real

MongoDB es utilizado para uno o varios de estos casos por varias empresas.

Lenguajes de programación soportados

MongoDB tiene drivers oficiales para los siguientes lenguajes de programación:

  • C
  • C++
  • C# / .NET
  • Erlang
  • Haskell
  • Java
  • JavaScript
  • Lisp
  • node.JS
  • Perl
  • PHP
  • Python
  • Ruby
  • Scala

 

¿Dónde no se debe usar MongoDB?

En esta base de datos no existen las transacciones. Aunque nuestra aplicación puede utilizar alguna técnica para simular las transacciones, MongoDB no tiene esta capacidad. Solo garantiza operaciones atómicas a nivel de documento. Si las transacciones son algo indispensable en nuestro desarrollo, deberemos pensar en otro sistema.

Tampoco existen los JOINS. Para consultar datos relacionados en dos o más colecciones, tenemos que hacer más de una consulta. En general, si nuestros datos pueden ser estructurados en tablas, y necesitamos las relaciones, es mejor que optemos por un RDBMS clásico.

Y para finalizar, están las consultas de agregación. MongoDB tiene un framework para realizar consultas de este tipo llamado Aggregation Framework. También puede usar Map Reduce. Aún así, estos métodos no llegan a la potencia de un sistema relacional. Si vamos a necesitar explotar informes complejos, deberemos pensar en utilizar otro sistema. Eso sí, esta es una brecha que MongoDB va recortando con cada versión. En poco tiempo esto podría dejar de ser un problema.

 

Instrumentos de MongoDB

Los siguientes comandos pueden ser instalados para el manejo y la administración del sistema de base de datos:

  • mongo:es un Shell interactivo que permite a los desarrolladores ver, insertar, eliminar y actualizar datos en su base de datos. Este también permite entre otras funciones la replicación de información, configurar los Shards, apagar los servidores y ejecutar JavaScript.
  • mongostat: es un instrumento de línea de comandos que muestra en resumen una lista de estadísticas de una instancia de MongoDB en ejecución. Esto te permite visualizar cuantas inserciones, actualizaciones, eliminaciones, consultas y comandos se han ejecutado, pero también cuanta memoria está utilizando y cuanto tiempo ha estado cerrada la base de datos.
  • mongotop: es un instrumento de línea de comandos que provee un método para dar seguimiento a la cantidad de tiempo que dura una la lectura o escritura de datos en una instancia. También provee estadísticas en el nivel de cada colección.
  • mongosniff: es un instrumento de línea de comandos que provee un sniffing en la base de datos haciendo un sniffing en el tráfico de la red que va desde y hacia MongoDB.
  • mongoimport/mongoexport: es un instrumento de línea de comandos que facilita la importación exportación de contenido desde JSON, CSV o TSV. También tiene el potencial de importar o exportar hacia otros formatos.
  • mongodump/mongorestore: es un instrumento de línea de comandos para la creación de una exportación binaria del contenido de la base de datos. Estos comandos son utilizado para la estrategia de copias de seguridad cuando se utiliza MongoDB.

 

¿Quien usa MongoDB?

La lista de organizaciones que utiliza MongoDB es impresionante. Desde Foursquare y LinkedIn o empresas de telecomunicaciones como Orange y Teléfonica. Empresas como Cisco, Bosch o plataformas de formación como Codecademy. Otras son eBay, Expedia. Forbes, IBM, Windows Azure, McAfee o periódicos como theguardian, Le Figaro, The NewYork Times, etc. Incluso el CERN (Organización Europea para la Investigación Nuclear) utiliza MongoDB para los grandes volúmenes de datos que genera el acelerador de partículas.Está disponible para los sistemas operativos Windows, Linux, OS X y Solaris.

 

¿Cómo se instala MongoDB?

La instalación de una instancia del servidor es un juego de niños. Simplemente tenemos que bajar los binarios para nuestro sistema operativo. Hay versiones par Windows, Linux y MacOs. Una vez bajados podremos arrancar el servicio de MongoDB con un solo comando.

mongod --dbpath data

Con este comando arrancamos el servicio mongod, que empezará a escuchar peticiones por el puerto 27017. Es importante indicar el parámetro —dbpath, con la ruta dónde se almacenarán los ficheros de nuestra base de datos Dentro de las bases de datos NoSQL, probablemente una de las más famosas sea MongoDB. Con un concepto muy diferente al de las bases de datos relacionales, se está convirtiendo en una interesante alternativa.

Pero cuándo uno se inicia en MongoDB se puede sentir perdido. No tenemos tablas, no tenemos registros y lo que es más importante, no tenemos SQL. Aun así, MongoDB es una seria candidata para almacenar los datos de nuestras aplicaciones. A lo largo de una serie de artículos vamos a explicar como funciona esta base de datos NoSQL, qué podemos hacer con ella, y cómo podemos hacerlo. Empezamos.

¿Cómo puedo usar la consola?

Si ya tenemos el servidor lanzado en nuestra máquina, bastará con lanzar desde la consola el siguiente comando

mongo localhost

Desde ese momento entraremos en la consola y podremos realizar consultas. Si escribimos help tendremos un listado con los comandos más comunes y su descripción.

Una de las características principales que es es un base datos con un modelo de datos diferente, ya que está “orientada a documentos” con el esquema de un JSON como almacenamiento.

JSON

¿Qué ventajas tiene la representación de nuestros datos utilizando un formato JSON?

  • JSON presenta un framework flexible y conciso tanto para consultas,como para almacenar registros.
  • La sintaxis JSON es similar a la de otras estructuras de datos utilizados en muchos lenguajes de programación y es por tanto, familiar para los desarrolladores.
  • JSON es independiente del lenguaje de programación que se utilice.

¿Que tipos de datos puede almacenar un JSON?

6 tipos de datos:

  • cadenas
  • números
  • textos boolenaos (verdadero/falso)
  • nulos
  • arrays
  • objetos/documentos

¿Cómo se realiza una consulta en MongoDB?

Esta estructura de JSON presenta ventajas de rendimiento al hacer Joins y transacciones ya que es una operación más rápida y limpia que realizar la misma consulta en SQL.

En una base de datos NoSQL no hay consultas SQL de tipo SELECT * FROM WHERE.

Las consultas se hacen pasando objetos JSON como parámetro. Por ejemplo:

La consulta anterior buscará todos los clientes cuyo nombre sea David. MongoDB viene de serie con una consola desde la que podemos ejecutar los distintos comandos.

 

Estructura:

 
Fuentes de Informacion

Comparte esta nota