Jeffrey Erickson | Escritor sénior | 30 de octubre de 2024
MongoDB fue creado en 2007 por un par de desarrolladores que querían rastrear enormes números de pequeñas transacciones en el negocio de servicios publicitarios. La nueva base de datos, que inicialmente se denominó 10gen, contenía datos en un simple "cubo" de documentos de archivos de tipo JSON, y fue capaz de escalar rápidamente. No necesitaba gran parte de un modelo de datos o una concurrencia de transacciones exigente porque simplemente contaba las impresiones de anuncios y las apuestas eran bajas.
Sin embargo, resulta que MongoDB proporcionó el tipo de simplicidad de base de datos por la que los desarrolladores tenían hambre. Fue lanzado bajo el modelo de desarrollo de código abierto en 2009, trasladado a SSPL (Server Side Public License) en 2018, y ha evolucionado para convertirse en el almacén de datos estándar de facto para muchas pilas de desarrollo de código abierto, con una lista de clientes que incluye Expedia, Lyft, eBay y muchos más. Veamos lo que lo hace funcionar.
MongoDB es una base de datos de documentos de código abierto popular que se utiliza ampliamente en las aplicaciones web y móviles modernas. Se clasifica como una base de datos NoSQL, lo que significa que adopta un enfoque flexible y orientado a documentos para almacenar datos en lugar de un método relacional basado en tablas tradicional. Una gran parte del atractivo de MongoDB es su simplicidad y enfoque de desarrollador. Por ejemplo, las interacciones de Mongo se definen mediante el acrónimo CRUD, para crear, leer, actualizar y suprimir.
MongoDB guarda datos en documentos JSON que facilitan relativamente el uso de datos almacenados, ya sean estructurados, no estructurados o semiestructurados, para diferentes tipos de aplicaciones. El modelo de datos flexible de MongoDB permite a los desarrolladores almacenar datos no estructurados, al tiempo que ofrece soporte de indexación para un acceso y replicación de archivos más rápidos para la protección y disponibilidad de datos. Esto significa que los desarrolladores pueden diseñar y crear aplicaciones sofisticadas mediante MongoDB.
Si bien MongoDB se desarrolló para rastrear impresiones en miles de sitios de servicios de publicidad, pronto ganó gran popularidad como un almacén de datos flexible en el desarrollo web de código abierto. Ha evolucionado continuamente desde su lanzamiento en 2007, acumulando un sólido conjunto de funciones que incluye consultas ad hoc, indexación y agregación en tiempo real. Una ventaja clave de MongoDB para los desarrolladores es que, en relación con las bases de datos relacionales más populares, es intuitivo de usar y rápido de comenzar. El tipo de documentos JSON almacenados en la asignación MongoDB a tipos de datos conocidos que se encuentran en lenguajes de programación populares, como diccionarios JavaScript o Python. Mongo también proporciona un completo menú de bibliotecas cliente con soporte de controladores para la mayoría de los lenguajes de programación, incluidos PHP, .Net, Java, Python, Node.js y muchos otros.
Como todas las herramientas tecnológicas, MongoDB es fuerte en algunas áreas y débil en otras. Fue diseñado para rastrear la publicidad en línea, que requería un acceso rápido simultáneo, pero solo necesitaba una precisión transaccional suelta y poco análisis en tiempo real. Incluso hoy en día, MongoDB se forma en torno a los principios BASE, que representan la disponibilidad, la escalabilidad y la consistencia eventual. Como tal, MongoDB se suele utilizar en escenarios en los que la alta disponibilidad y la escalabilidad son consideraciones de diseño principales. En cambio, para trabajos como operaciones financieras o en entornos empresariales esenciales, los desarrolladores suelen optar por una base de datos relacional. Estas ofrecen transacciones ACID (atomicidad, consistencia, aislamiento y durabilidad) para ayudar a garantizar la fiabilidad y consistencia de las operaciones de la base de datos. Sin embargo, más recientemente, el sector tecnológico ofrece soluciones que pueden ofrecer a los desarrolladores lo mejor de ambos mundos a través de la simplicidad del desarrollo de JSON y las ventajas de SQL.
¿Cómo pasan los datos de las aplicaciones a la base de datos MongoDB?
MongoDB viene en una gama de configuraciones y niveles de servicio para adaptarse a las necesidades de los desarrolladores que trabajan en proyectos empresariales pequeños, medianos e incluso grandes.
Conclusiones clave
MongoDB es una base de datos NoSQL que utiliza un modelo de datos orientado a documentos, donde cada registro es un documento almacenado en una recopilación, en lugar de las filas y columnas comunes a las bases de datos relacionales populares, como MySQL.
MongoDB almacena los documentos JSON con un formato denominado BSON o JSON binario. La naturaleza no relacional de estos documentos significa que pueden almacenar, y la base de datos puede procesar, datos de aplicaciones estructurados, así como datos semiestructurados y no estructurados. A diferencia de las bases de datos relacionales, MongoDB no utiliza esquemas rígidos. En su lugar, los documentos son flexibles y pueden contener matrices y documentos anidados, lo que permite un almacenamiento de datos complejo y jerárquico.
Al manejar conjuntos de datos extremadamente grandes, documente las bases de datos, como MongoDB, escale o distribuya datos entre varios nodos o clusters mediante una técnica denominada fragmentación. Ese modelo permite un almacenamiento y recuperación rápidos. Esta arquitectura tiene sentido dado que MongoDB fue creado para el servicio de anuncios, donde potencialmente millones de anuncios podrían necesitar ser llamados a través de miles de sitios web en cualquier momento. No había necesidad inherente de analizar un anuncio frente a otro, lo que permitía que los datos se distribuyeran y separaran físicamente.
Las bases de datos de documentos jerárquicos son muy rápidas para las operaciones de lectura, pero el análisis de datos puede ser lento porque los sistemas deben analizar datos en todas las entidades anidadas. Las bases de datos relacionales, por el contrario, almacenan sus datos en tablas independientes, y se puede hacer referencia a un único "objeto" en muchas tablas de la base de datos, lo que permite operaciones analíticas más eficientes a escala. Dadas estas diferentes fortalezas, los equipos de desarrollo generalmente optarán por el mejor sistema de gestión de datos para las necesidades actuales de su aplicación. O pueden elegir una base de datos multimodal que proporcione acceso SQL completo a datos de documentos relacionales y JSON, así como a muchos otros tipos de datos.
ACID vs. BASE
La elección depende de las necesidades de la aplicación.
| ACID (atomicidad, consistencia, aislamiento, durabilidad) | BASE (básicamente disponible, estado suave, eventualmente consistente) |
|---|---|
|
Atomicidad: garantiza que toda una transacción se trate como una sola unidad. O todos los cambios tienen éxito, o ninguno de ellos lo hace. Esto evita actualizaciones parciales que podrían dejar los datos en un estado inconsistente. Consistencia: garantiza que la base de datos pasa de un estado válido a otro después de una transacción. Aplica las reglas de negocio y la integridad de los datos. Aislamiento: garantiza que las transacciones simultáneas no interfieran entre sí. Cada transacción parece ejecutarse de forma aislada, incluso si se producen varias transacciones simultáneamente. Durabilidad: una vez que se confirma una transacción, los cambios se escriben en el almacenamiento permanente y no se verán afectados por fallos del sistema, como fallos. |
Básicamente disponible: se centra en maximizar la disponibilidad de datos. El sistema se esfuerza por permanecer operativo incluso durante fallos parciales, lo que permite que la mayoría de las operaciones de lectura y escritura continúen. Estado flexible: la consistencia de los datos no se garantiza inmediatamente después de una operación de escritura. Puede haber un ligero retraso antes de que los cambios se reflejen en todas las réplicas, lo que lleva a inconsistencias temporales. Eventualmente consistente: con el tiempo, la coherencia se logra a través de procesos en segundo plano que sincronizan los cambios en las réplicas. |
|
Ventajas: La alta integridad de los datos y la sólida coherencia hacen que ACID sea ideal para aplicaciones que exigen precisión, como las transacciones financieras. |
Ventajas: La alta disponibilidad y escalabilidad hacen que BASE sea ideal para aplicaciones que requieren un alto tiempo de actividad y capacidad de respuesta, especialmente en sistemas distribuidos. Los requisitos de consistencia relajados permiten velocidades de escritura más rápidas y una mejor escalabilidad. |
|
Contras: La sobrecarga de rendimiento significa que mantener las garantías de ACID puede conducir a velocidades de escritura más lentas. Los requisitos de consistencia estrictos pueden resultar difíciles de gestionar en entornos altamente escalables. |
Contras: Se pueden producir incoherencias temporales durante la sincronización de datos, lo que hace que BASE sea menos adecuada para aplicaciones en las que la estricta integridad de los datos y la consistencia inmediata son fundamentales. |
MongoDB almacena datos en recopilaciones, que son análogos a las tablas de las bases de datos relacionales. Cada recopilación contiene varios documentos, que pueden variar en su estructura. No es necesario declarar la estructura de los documentos al sistema, ya que los documentos se autodescriben, lo que significa que cada documento contiene metadatos que describen cada campo dentro del documento.
Para mejorar el rendimiento, MongoDB soporta la indexación en cualquier campo de un documento. Los índices soportan la ejecución eficaz de consultas y pueden incluir índices primarios y secundarios. El lenguaje de consulta de MongoDB soporta operaciones CRUD (crear, leer, actualizar, suprimir) y permite realizar consultas complejas de agregación, búsqueda de texto y geoespaciales. Para ayudar a mejorar los tiempos de respuesta, MongoDB proporciona un marco de agregación, que permite a los desarrolladores configurar un procesamiento de datos complejo en el servidor. Esto significa que es capaz de realizar análisis en el cluster donde residen los datos, sin tener que moverlos a otra plataforma, como con Apache Spark o Hadoop. Esto puede reducir la cantidad de datos que se transfieren desde y hacia los clientes.
MongoDB trabaja para proporcionar alta disponibilidad y mejorar el rendimiento mediante el soporte de juegos de datos de réplica. Las réplicas se pueden utilizar para el equilibrio de carga mediante la distribución de operaciones de lectura y escritura en todas las instancias. Estos juegos de réplicas también proporcionan redundancia y aumentan la disponibilidad de los datos mediante varias copias de datos en diferentes servidores de bases de datos. En caso de fallo de hardware o mantenimiento, los juegos de réplicas permiten que MongoDB proporcione failover automático y redundancia de datos.
Para la escalabilidad, MongoDB soporta la escalabilidad horizontal a través de la fragmentación, que es una forma de distribuir datos entre varias bases de datos en varios equipos. Un cluster con particiones horizontales puede constar de muchos juegos de réplicas. La fragmentación se configura mediante la definición de una clave de partición horizontal, que determina cómo se distribuyen los datos entre las particiones horizontales. Esta técnica puede ayudar a gestionar grandes juegos de datos y operaciones de alto rendimiento al dividir el juego de datos y cargarlo en varios servidores.
Funcionamiento de la fragmentación
Cada partición horizontal es una instancia de base de datos independiente que aloja subconjuntos de datos de una base de datos con particiones horizontales.
Cada tipo de base de datos (relacional, como MySQL, Postgres y Oracle Database, o orientada a documentos, como CouchDB, DynamoDB y MongoDB) tiene fortalezas y debilidades, y la elección entre ellas generalmente depende de los requisitos y restricciones específicos de la aplicación que se está desarrollando.
Un sistema de gestión de bases de datos relacionales (RDBMS) utiliza un lenguaje de consulta estructurado (SQL), mientras que el formato centrado en documentos de MongoDB utiliza API de almacén de documentos. Aun así, MongoDB Query Language (MQL) utiliza un lenguaje similar a JavaScript con operaciones como la creación, lectura, actualización y supresión de documentos.
MongoDB no tiene concepto de tablas y filas y carece de esquemas, por lo que hay menos estructura que definir antes de que se pueda utilizar la base de datos. Sin embargo, sin un esquema central, cada aplicación que accede a las recopilaciones necesita comprender el documento. Por lo tanto, el "esquema" está en el código de aplicación y no está definido en la base de datos. Si una aplicación cambia el esquema, es posible que otras aplicaciones no funcionen. En comparación con las bases de datos relacionales, donde un esquema es esencialmente un plan detallado para el RDBMS, y la organización de datos y la interrelación se definen explícitamente, MongoDB carece del concepto inherente de relaciones entre datos.
La flexibilidad de los almacenes de datos es notable, ya que MongoDB utiliza diferentes formatos para los datos, como almacenes de clave-valor, gráficos y documentos, y las estructuras de datos pueden cambiar con el tiempo. Esto difiere de un RDBMS, que utiliza definiciones, jerarquías y procedimientos de validación estrictos basados en estos para ayudar a garantizar la integridad de los datos.
Si bien la configuración de una instancia MongoDB básica es sencilla, configurar y mantener un cluster MongoDB distribuido a gran escala con fragmentación y réplicas puede ser complejo y requiere una buena comprensión de sus opciones de arquitectura y configuración.
| Relacional | MongoDB | |
|---|---|---|
| Modelos de datos | Utiliza tablas con filas y columnas fijas, y los datos se estructuran en un esquema predefinido. | Utiliza recopilaciones de documentos, que son estructuras similares a JSON con esquemas dinámicos. |
| Flexibilidad de esquema | Requiere un esquema predefinido que se debe configurar para poder agregar datos. | Tiene un esquema dinámico. Se pueden agregar nuevos campos a un documento sin que ello afecte al resto de documentos de la recopilación. |
| Lenguaje de consulta | Utiliza SQL, que es muy potente para consultas complejas, para definir y manipular datos. | Utiliza un lenguaje de consulta basado en documentos que se considera más intuitivo, pero menos completo y versátil que SQL. |
| Escala | Tradicionalmente se escala verticalmente, agregando así más potencia a la máquina existente, aunque las funciones maduras, como la fragmentación y Oracle Real Application Clusters ofrecen soporte para la escala horizontal. | Diseñado para escalar horizontalmente en varias máquinas mediante fragmentación, que distribuye datos en un cluster de máquinas. |
| Transacciones | Admite transacciones de varias filas y es compatible con ACID, lo que lo hace adecuado para aplicaciones en las que no se pueden perder ni dañar datos. | Admite transacciones de varios documentos, pero se sabe que son menos robustas que la mayoría de las bases de datos relacionales tradicionales, especialmente en los datos distribuidos. |
| Rendimiento | Creado para garantizar transacciones precisas, pero el rendimiento puede ser menor para grandes volúmenes de datos. Sin embargo, el rendimiento analítico es generalmente mejor. | Creado para un alto rendimiento de lectura en grandes volúmenes de datos. |
MongoDB es adecuado para una amplia gama de usos, desde aplicaciones CRUD simples, como un blogging o aplicación de toma de notas, hasta plataformas complejas, como Amazon Prime. MongoDB a menudo se selecciona para sistemas de gestión de contenido (CMSes), aplicaciones de juegos donde la sincronización de datos debe ser rápida y datos biométricos de atención médica, entre muchos otros casos de uso. Su versatilidad lo ha convertido en la piedra angular de las populares pilas de desarrollo de código abierto, como MEAN y MERN.
Elige cuando lo necesites:
MongoDB se ha vuelto popular entre los desarrolladores, en parte debido a su API intuitiva, su modelo de datos flexible y sus funciones que incluyen:
La popularidad de MongoDB con la comunidad de código abierto se atribuye a las muchas formas en que hace que el desarrollo y el mantenimiento de aplicaciones sean más intuitivos y escalables. Estas ventajas incluyen:
Si bien MongoDB ofrece muchas ventajas, especialmente para las aplicaciones que requieren flexibilidad y alto rendimiento en medio de grandes volúmenes de datos, sí presenta muchos inconvenientes potenciales.
MongoDB es una base de datos NoSQL que funciona bien dentro de ese ecosistema, pero también está diseñada para interactuar con otros tipos de sistemas de gestión de bases de datos a través de varias herramientas y conectores de integración de datos. Este conjunto de herramientas incluye una infraestructura ETL (extracción, transformación, carga) para extraer y migrar datos de MongoDB y viceversa. Esto es útil para enviar datos a una base de datos relacional para generar informes y realizar análisis de datos complejos. Las aplicaciones MongoDB también se pueden comunicar entre diferentes plataformas de base de datos mediante API de REST.
Un buen ejemplo de compatibilidad con MongoDB es la API de Oracle Database para MongoDB, que permite a los desarrolladores utilizar los controladores y las herramientas de código abierto de MongoDB conectados a Oracle Autonomous JSON Database. Esto les da acceso a las capacidades multimodelo de Oracle y les ayuda a evitar mover datos a una base de datos independiente para análisis, aprendizaje automático (ML) y análisis espacial. Piensa en Autonomous JSON Database como una alternativa multimodal a MongoDB Atlas. A menudo, se necesitan pocos cambios o ningún cambio para las aplicaciones existentes.
En lugar de acceder a la funcionalidad MongoDB a través de API, los desarrolladores pueden simplemente migrar sus cargas de trabajo centradas en JSON a una instancia de Oracle Autonomous JSON Database en Oracle Cloud Infrastructure (OCI). Esto proporciona un servicio de base de datos de documentos en la nube para aplicaciones centradas en JSON que cuenta con API de documentos de estilo NoSQL (Acceso simple a documentos de Oracle o SODA y API de Oracle Database para MongoDB), escalado sin servidor, transacciones ACID de alto rendimiento, seguridad completa y precios bajos de pago por uso. No hay tiempo de inactividad porque la migración de MongoDB a Oracle Autonomous JSON Database se logra con Oracle Cloud Infrastructure (OCI) GoldenGate.
Los usuarios de MongoDB ahora tienen una forma más versátil de crear aplicaciones centradas en JSON. Oracle Autonomous Database ofrece a los desarrolladores la flexibilidad de reaccionar a las demandas del negocio mediante una única plataforma de datos que puede ayudar a satisfacer todas sus necesidades: permitir que los desarrolladores utilicen SQL, documentos JSON, gráficos, geoespaciales, texto y vectores en una sola base de datos para crear rápidamente nuevas funciones.
Además, una nueva y revolucionaria función en Oracle Database, JSON Relational Duality, proporciona las ventajas tanto de las tablas relacionales como de los documentos JSON, sin las ventajas de ninguno de los modelos.
Autonomous Database ofrece servicios integrados de IA y aprendizaje automático (ML) en las bases de datos para mejorar sus aplicaciones con análisis de texto e imagen, reconocimiento de voz o recomendaciones personalizadas. Además, Autonomous Database Select AI traduce automáticamente al lenguaje natural en consultas de base de datos y le permite tener una conversación contextual con la base de datos, sin necesidad de realizar ninguna codificación personalizada u operaciones manuales a través del interfaz compleja. Además, dado que la base de datos es totalmente autónoma, permite a los equipos de desarrollo centrarse en la creación de aplicaciones al garantizar el tiempo de actividad y proteger los datos mediante medidas de seguridad automatizadas y supervisión continua.
Puedes comenzar hoy mismo de forma gratuita e incluso probar un taller para aprender a usar SQL, JSON y Oracle Graph en la misma aplicación.
Con casos de uso que incluyen plataformas de comercio electrónico, aplicaciones IoT y más, MongoDB ha demostrado su versatilidad en todos los sectores. Su capacidad para manejar diversos tipos de datos y soportar consultas complejas lo posiciona como un componente capaz de las pilas de tecnología moderna. A medida que las empresas buscan extraer el máximo valor de sus datos, MongoDB será fundamental para el éxito.
Tanto los desarrolladores como sus colegas del negocio pueden beneficiarse de aplicaciones nativas en la nube diseñadas específicamente para maximizar la agilidad, escalabilidad y eficiencia. Conoce más y revisa 10 maneras adicionales en que la nube está mejorando.
¿Cuál es la diferencia entre SQL y MongoDB?
MongoDB guarda datos no estructurados, lo que no es adecuado para un lenguaje de consulta estructurado (SQL).
¿Es MongoDB un idioma backend?
No, pero se puede utilizar como parte de una aplicación web backend.
¿Es MongoDB un lenguaje o marco?
Es un sistema de gestión de bases de datos que utiliza datos no estructurados almacenados en documentos en lugar de tablas.