MongoDB: Explorando la Base de Datos NoSQL





MongoDB es un sistema de gestión de bases de datos NoSQL (No Relacional) de código abierto, diseñado para superar las limitaciones de las bases de datos relacionales tradicionales. Su nombre proviene de la palabra "humongous", que en inglés significa "enorme", lo que refleja su capacidad para manejar grandes volúmenes de datos de manera eficiente.

Características Principales de MongoDB

  1. No Relacional: A diferencia de las bases de datos relacionales (como MySQL o PostgreSQL), MongoDB almacena datos en documentos JSON (BSON en su implementación interna), lo que proporciona una gran flexibilidad en el manejo de datos sin esquemas estrictos.

  2. Escalabilidad Horizontal: MongoDB es ideal para aplicaciones que requieren escalabilidad. Puedes distribuir los datos en múltiples servidores (sharding) para manejar grandes cantidades de tráfico o datos.

  3. Flexibilidad: Permite almacenar datos de forma dinámica, lo que significa que diferentes documentos en una colección pueden tener estructuras variadas. Esto lo hace ideal para aplicaciones que necesitan evolucionar sin modificaciones complejas en el esquema.

Casos de Uso Comunes

  • Aplicaciones Web: MongoDB es muy popular en el desarrollo de aplicaciones web debido a su capacidad para manejar datos no estructurados y su facilidad de integración con stacks tecnológicos modernos como MERN (MongoDB, Express, React, Node.js).
  • Big Data: Es adecuado para sistemas de análisis de datos masivos, ya que puede manejar grandes volúmenes de información distribuidos.
  • Aplicaciones Móviles: Su flexibilidad y capacidad para sincronizar datos en tiempo real lo hacen excelente para apps móviles y aplicaciones en la nube que requieren escalabilidad y alta disponibilidad.


  

Mongodb vs Mysql

1. Tipo de Base de Datos

  • MongoDB: Es una base de datos NoSQL (No Relacional), diseñada para almacenar y gestionar datos no estructurados o semi-estructurados.
  • MySQL: Es una base de datos relacional que organiza los datos en tablas con un esquema fijo, utilizando el lenguaje SQL para gestionar y consultar la información.

2. Modelo de Datos

  • MongoDB: Almacena los datos en formato de documentos JSON/BSON, lo que permite flexibilidad. Los documentos en una misma colección pueden tener diferentes estructuras.
    • Documento : Es la unidad básica de almacenamiento de datos. Es similar a una fila en una base de datos relacional.
    • Colección : Es un grupo lógico de documentos que comparten una estructura similar o están relacionados temática mente, similar a una tabla en una base de datos relacional.
  • MySQL: Usa un modelo basado en tablas con filas y columnas, y exige un esquema definido. Todos los registros de una tabla deben seguir la misma estructura.

3. Consultas

  • MongoDB: Utiliza su propio lenguaje de consultas basado en JSON, facilitando las operaciones en documentos anidados y arrays.
  • MySQL: Se basa en SQL (Structured Query Language), un estándar bien conocido para bases de datos relacionales, con un poderoso sistema de consulta, especialmente para relaciones complejas.

4. Escalabilidad

  • MongoDB: Ofrece escalabilidad horizontal mediante sharding (distribución de datos entre varios servidores). Es ideal para aplicaciones que manejan grandes volúmenes de datos.
  • MySQL: Es escalable principalmente de manera vertical (mejorando el hardware del servidor). También soporta particionado, pero la escalabilidad horizontal es más compleja de implementar.

5. Transacciones

  • MongoDB: A partir de la versión 4.0, MongoDB admite transacciones ACID, aunque no es tan robusto en este aspecto como MySQL.
  • MySQL: Tiene un completo soporte para transacciones ACID, lo que lo hace ideal para aplicaciones que requieren integridad y consistencia de datos, como sistemas financieros.

6. Velocidad y Rendimiento

  • MongoDB: Es más rápido en escenarios que requieren manejar grandes volúmenes de datos no estructurados, y cuando la flexibilidad es clave. Es muy eficiente para operaciones de lectura y escritura en datos semi-estructurados.
  • MySQL: Es más eficiente para realizar consultas complejas sobre datos bien estructurados y en aplicaciones que requieren muchas operaciones con relaciones entre tablas (JOIN).

7. Relaciones de Datos

  • MongoDB: No maneja relaciones de datos de manera estricta. Aunque puedes relacionar documentos, no soporta JOIN nativamente. Las relaciones se manejan embebiendo documentos o referenciándolos.
  • MySQL: Está optimizado para manejar relaciones complejas entre tablas, permitiendo realizar operaciones JOIN de manera nativa y eficiente.

8. Integridad de Datos

  • MongoDB: No garantiza la integridad referencial, ya que no hay claves foráneas ni relaciones estrictas entre documentos.
  • MySQL: Garantiza la integridad referencial mediante claves foráneas y las reglas ACID, asegurando que los datos entre tablas relacionadas se mantengan consistentes.

9. Casos de Uso

  • MongoDB: Es ideal para aplicaciones web modernas, sistemas que manejan grandes volúmenes de datos (big data), análisis en tiempo real y aplicaciones móviles que requieren flexibilidad en los datos.
  • MySQL: Es ideal para aplicaciones donde la integridad de los datos es crítica, como en sistemas financieros, ERP, CRM, y otras aplicaciones que requieren relaciones complejas y consistencia de datos.

10. Almacenamiento

  • MongoDB: Almacena datos en documentos BSON (JSON binario), que permiten estructuras más dinámicas y flexibles, como arrays y objetos anidados.
  • MySQL: Los datos se almacenan en tablas rígidas con un esquema fijo, lo que puede hacer que sea menos flexible, pero más eficiente para consultas estructuradas.

Tabla "clientes" en MySQL:

idnombredirecciontelefono
1Juan PérezCalle 123, Ciudad A+1 123-456-7890
2María LópezAv. Principal, Ciudad B+1 987-654-3210
3Pedro GómezCarrera 45, Ciudad C+1 555-123-4567

Colección "clientes" en MongoDB:

[ { "_id": 1, "nombre": "Juan Pérez", "direccion": "Calle 123, Ciudad A", "telefono": "+1 123-456-7890" }, { "_id": 2, "nombre": "María López", "direccion": "Av. Principal, Ciudad B", "telefono": "+1 987-654-3210" }, { "_id": 3, "nombre": "Pedro Gómez", "direccion": "Carrera 45, Ciudad C", "telefono": "+1 555-123-4567" } ]

Instalar Mongodb en Windows

https://www.mongodb.com/try/download/community

  • Desplázate hacia abajo hasta la sección "Community Server" y haz clic en el botón "Descargar".
  • Selecciona la versión de Windows que corresponda a tu sistema operativo (por ejemplo, Windows Server 2019, Windows 10, etc.).
  • Descarga el archivo .msi correspondiente a tu arquitectura (32 bits o 64 bits). La versión de 64 bits es más común y recomendada.
  • Ejecuta el archivo .msi que acabas de descargar.
  • En la pantalla de "Seleccione los elementos que desea instalar", asegúrate de seleccionar "Install MongoDB Compass" para obtener una interfaz gráfica opcional para administrar la base de datos (MongoDB Compass).
  • Asegúrate de que la carpeta "bin" dentro de la carpeta de instalación de MongoDB esté agregada a la variable de entorno PATH de tu sistema. Esto permitirá que puedas acceder a los comandos de MongoDB desde cualquier ubicación en la línea de comandos.

Para instalar MongoDB en sistemas basados en Ubuntu o Debian, puedes utilizar el siguiente comando en la terminal:
  • sudo apt update
  • sudo apt install mongodb

Durante la instalación, se te solicitará confirmar la instalación y se descargará e instalará MongoDB en tu sistema.

Luego, habilita y arranca el servicio de MongoDB;
  • sudo systemctl enable mongod
  • sudo systemctl start mongod

Puedes verificar que el servicio está en ejecución utilizando el siguiente comando:
  • sudo systemctl status mongod
Para descargar MongoDB Compass en Linux , en mi caso que utilizo linux Mint lo hice desde Gestor de software

En el tema de crear consultas es diferente a MySql, ejemplos sencillos
Recuerde que en MySql son tablas y MongoDB son  colecciones 

Buscar datos del cliente donde nombre sea igual a Juan Perez

MongoDB

db.clientes.find({ nombre: 'Juan Pérez' });

MySql

SELECT * FROM clientes WHERE nombre = 'Juan Pérez';

Buscar todos los registros donde nombre comience por Juan

MySql

SELECT * FROM clientes WHERE nombre LIKE 'Juan%';

MongoDB

db.clientes.find({ nombre: { $regex: "Juan" } });

Usar indices en campos especificos para mejorar la busquedad

db.clientes.createIndex({ nombre: "text" });

Luego se consulta de manera mas eficiente utilizando "$text"

db.clientes.find({ $text: { $search: "Juan" } });

Bueno mucha teoría , según mi experiencia mas en MySql que en MongoDB  veo con mas seguridad este primero y al momento de realizar consultas es mas simple , por esta razón es tan utilizado en bancos, empresas donde se maneje muchas transacciones y un modelo estructurado y rígido, por lo general funciona en un equipo que a medida que la base de datos crezca se debe agregar mas recursos a la maquina. En cambio MongoDB es utilizado por empresas donde no se necesita una estructura fija , mas rapidez manejando gran cantidad de datos y ademas manejar la escalabilidad horizontal , quiere decir que por su gran gran cantidad de datos que puede manejar se pueden ir agregando maquinas para dividir su trabajo.

Conclusión

MongoDB es una solución poderosa para escenarios donde la escalabilidad, la flexibilidad y el rendimiento son fundamentales. Debido a estas características, ha ganado popularidad en una amplia variedad de industrias y casos de uso, desde startups hasta grandes corporaciones.. 

Listo estos ya en la próxima entrada vamos aprender un poco de git y a la practica desde Visual Studio con lo que se lleva hasta ahora.





Comentarios