Qué es MongoDB ?

Su nombre proviene de la palabra inglesa “humongous” que significa “enorme”.

Es un sistema de base de datos orientado a documentos json con esquema libre. Lo anterior significa que cada entrada o registro puede tener un esquema de datos diferente, con atributos o “columnas” que no tienen por qué repetirse de un registro a otro.

Su desarrollo inició en el año 2007 por la compañía 10gen, ahora conocida como Mongo DB Inc.  Fue creada por Geir Magnusson y Dwight Merriman.

MongoDB Inc. ofrece licencia comercial con características avanzadas y herramientas de gestión, monitorización, backup y soporte. Está escrita en el lenguaje de programación C++ .

Se puede obtener también bajo una licencia pública, ya que está bajo el concepto de código abierto.

Funciona en los sistemas operativos Windows, Linux, OS X y Solaris además de soportar drivers para lenguajes de programación Python, C++, C#, Java e igualmente Node.js, JavaScript, PHP entre otros.

Características Relevantes
  • Escalable

Puede escalar desde un servidor aislado a arquitecturas distribuidas de grandes clusters (permite particionar, de manera transparente para el usuario, nuestra base de datos en tantas como particiones tengamos. Esto aumenta el rendimiento del procesado de los datos al ser cada una de ellas más pequeña que la original).

  • De alto rendimiento y disponibilidad

Proporciona alta disponibilidad mediante la réplica automática conocida como replica set, la cual proporciona redundancia de datos y failover automático, es decir, la transferencia automática a un nuevo nodo cuando se encuentra un fallo en uno de los nodos.

El alto rendimiento para la persistencia en MongoDB se basa en dos puntos: La posibilidad de tener documentos con la información anidada, evitando, de esta forma, un número elevado de operaciones de I/O. Y el soporte de índices y la posibilidad de crear índices sobre arrays y subdocumentos.

  • Auto balanceado de cargaa través de los distintos shards.

Sharding es una técnica que consiste en particionar los datos de la base de datos de manera horizontal agrupándolos de manera que tenga cierta consistencia y haciendo que el acceso a los datos sea mucho más rápido. El Sharding mejora de manera ostensible el rendimiento al agrupar menos datos en tablas más pequeñas proporcionando accesos mucho más rápido.

Este sistema permite escalar de forma horizontal empleando el concepto de “shard”, esto permite que los datos sean distribuidos en distintos servidores, balanceando la carga entre ellos , así equilibrándolos y no sobrecargando ninguno de ellos. Pueden ser incorporadas nuevas máquinas a MongoDB con el sistema de base de datos corriendo proporcionándonos una gran flexibilidad.

El balanceador decide cuándo migrar los datos, y a qué Shard, para que estén uniformemente distribuidos entre todos los servidores del cluster. Cada shard aloja los datos correspondientes a un rango de la clave escogida para particionar nuestra colección.

  • Replicación nativa

Sincronización de datos entre servidores. MongoDB soporta el tipo de replicación master-slave. Este sistema de replicación es sencillo de comprender: el maestro recibe tanto consultas de lectura como de escritura mientras que los esclavos reciben los datos del maestro y sólo se emplean para consultas de lectura o copias de seguridad, pero no permite escrituras.

  • Seguridad

Permite llevar a cabo las operaciones de autenticación, autorización, etc.

  • Gestión avanzada de usuarios
  • Aggregation Framework

Procesamiento batch de datos para cálculos agrupados usando operaciones nativas de MongoDB.

  • MapReduce

Permite utilizar Map-Reduce para el procesado de la información a través de funciones JavaScript que se ejecutan en los servidores.

  • 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.

  • No existen 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.

 

Estructura de Almacenamiento

 Almacena documentos JSON en una representación binaria llamada BSON.

BSON extiende el formato JSON para incluir tipos de datos adicionales: int, long, floating point.

Es un formato binario que permite búsquedas rápidas de datos, optimiza espacio, rendimiento y aporta funciones extra sobre JSON. Pero esencialmente para nosotros como usuarios toda la entrada salida es en JSON.

BSON guarda de forma explícita las longitudes de los campos, los índices de los arrays, y demás información útil para el escaneo de datos.

En MongoDB, una sola base de datos es un grupo de colecciones relacionadas. Cada base de datos tiene un set distinto de archivos de datos y pueden contener un gran número de colecciones. Un solo deployment de MongoDb puede contener muchas bases de datos.

Equivalencia de conceptos entre las bases de datos SQL y MongoDB

En la siguiente figura se puede apreciar la correspondencia de conceptos entre las bases de datos relacionales y lo que maneja MongoDB.

Aunque sus enfoques sean diferentes, ambos tipos de bases de datos requieren almacenamiento de datos. La selección de uno u otro tipo dependen mayormente de las necesidades organizacionales.

En las bases de datos relacionales, entre las estructuras de tablas y las filas de registros, las relaciones se dan entre columnas específicas a través de llaves primarias que relacionan ciertas columnas entre las tablas para un registro específico.

Conceptos de Almacenamiento en MongoDB

Documentos:

Un registro de información en MongoDB se representa a través de un documento (documents) (ver figura superior). Es una estructura de datos compuesta de pares de campos y valores. Son similares a objetos JSON. Los valores de los campos pueden ser otros documentos, arreglos y arreglos de documentos.

Una diferencia importante con los sistemas de bases de datos relacionales es que éstos últimos solo aceptan un valor por campo.

Colecciones:

MongoDB almacena o agrupa documentos en colecciones (ver figura superior). Las colecciones (collections) en MongoDB pueden no tener la misma estructura entre los documentos que almacena (número y tipo de campos). En un sistema de base de datos relaciones, como se pudo apreciar en figuras anteriores, los registros que están almacenados en las tablas que equivalen a estas colecciones, deben tener todos la misma estructura, tipo y cantidad de campos o columnas.

Los documentos almacenados en una colección deben tener un campo de valor único (_id) que actúa como llave primaria, el cual tiene un tamaño de 24 caracteres. Si se crea un nuevo documento dentro de la colección sin especificar un valor al campo _id, éste se crea automáticamente.

Las colecciones existen como objetos en una base de datos particular de MongoDB.

Base de Datos:

Es un contenedor de colecciones así como en los sistemas relacionales existe como contenedor para almacenar tablas. Cada base de datos tiene su propio juego de archivos en el sistema de almacenamiento físico. Un servidor de MongoDB puede guardar múltiples bases de datos.

MongoDB permite un esquema flexible de almacenamiento que permite que un documento tenga diferente cantidad de atributos.

Ver representación física de los datos en el grid inferior.

Instrucciones de uso de Esquema en MongoDB

A continuación, presentamos en las siguientes tablas la correspondencia de algunas instrucciones de DDL de las bases de datos relacionales contra las equivalentes para realizar la misma o similar operación en MongoDB.

Igualmente, presentamos en las siguientes tablas la correspondencia de algunas instrucciones de DML de las bases de datos relacionales contra las equivalentes para realizar la misma o similar operación en MongoDB.

Limitaciones de MongoDB

Como toda base de datos, MongoDB también posee ciertas limitaciones, de las cuales listamos algunas  a continuación:

  1. El tamaño máximo que soporta un documento es de 16MB.
  2. El máximo nivel de anidamiento  de documentos : 100 (documento dentro de documentos dentro de documentos)
  3. Los campos indexados no pueden contener más de 1024 bytes.
  4. El máximo de índices que puede tener una colección: 64.
  5. Se puede utilizar hasta un máximo de 31 campos para crear un índice compuesto de varios campos.
  6. Las operaciones de búsqueda de texto completo (full-text search) y geoíndices son mutuamente excluyentes.
  7. El límite de documentos dentro de una colección cubierta no puede ser mayor que 2 elevado a la 32. De otra forma, el número de documentos es ilimitado.
  8. En Windows, MongoDB no puede almacenar más de 4TB de datos (8TB sin bitácora).
  9. Sólo se puede tener un máximo de 12 nodos por set de replicación.
  10. Para hacer rollback de más de 300 MB de datos se requiere intervención manual.
  11. Los comandos que involucran GROUPING no funcionan en un cluster con sharding.
  12. Para sharding, una colección no puede tener más de 256GB.
Ventajas y Desventajas de MongoDB

Ventajas

  • Orientada a documentos
  • Alto desempeño
  • Alta disponibilidad por  Replicación
  • Alta escabilidad por Sharding
  • Esquema dinámico, no rígido
  • La flexibilidad en la adición/eliminación de campos tiene un impacto menor en las aplicaciones
  • Datos heterogéneos
  • No existen los joins
  • Distribuida
  • Representación de datos en JSON o BSON
  • Soporte de manejo de datos geoespaciales
  • Fácil integración con Hadoop
  • Lenguaje de consulta basado en documentos con potencial muy cercano al de SQL
  • Distribuciones en la nube con AWS, Microsoft, RedHat, dotCloud, Softlayer, etc.

Desventajas

  • La mayoría de bases de datos NoSQL no son fuertes en las propiedades ACID
  • Transacciones sencillas en sistemas SQL se pueden poner complejas en estos sistemas
  • No existe el manejo de funciones o procedimientos de base de datos donde se pueda ligar lógica de datos
  • Memoria limitada
MongoDB y sus usos recomendados y no recomendados

MongoDb es muy utilizada en los siguientes casos:

  • Almacenamiento para el manejo de catálogos de productos de comercio electrónico
  • Administración de contenidos y blogs
  • Análisis de datos en tiempo real y almacenamiento de bitácoras  a alta velocidad, cache y alta disponibilidad
  • Administración de configuraciones
  • Mantenimiento de datos basados en localizaciones – datos geoespaciales
  • Sitios de redes sociales y móviles
  • Aplicaciones con esquemas cambiantes

No es recomendada para los siguientes usos:

  • Sistemas altamente transaccionales
  • Sistemas con datos relacionados en forma muy dependiente

 

MongoDB y Python – Un recorrido básico
  • PyMongo es el driver recomendado para que un programa de Python haga la conexión con MongoDB.
  • Expone documentos de MongoDB via objetos dict de Python

  • Instalación con Pip, etc.

Ejemplo de programación de conexión a una base de datos MongoDB para almacenar mensajes AIS.

 

Referencias:

https://www.mongodb.com/

https://docs.mongodb.com/manual/?jmp=footer&_ga=2.186667624.1791144691.1506318491-271887227.1506318491

All out beginner’s guide to MongoDB

https://sqlpowershell.wordpress.com/2016/07/06/why-mongodb/

https://www.genbetadev.com/bases-de-datos/una-introduccion-a-mongodb

Share: