Jeffrey Erickson | Escritor sénior | 30 de octubre de2024
MongoDB fue creado en 2007 por un par de desarrolladores que querían rastrear números enormes, de ahí el nombre, 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 ni un modelo de datos ni una concurrencia de transacciones exigente porque simplemente contaba las impresiones de anuncios y no había mucho en juego.
Sin embargo, resulta que MongoDB proporcionó justamente el tipo de sencillez de base de datos que buscaban los desarrolladores. Se lanzó 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 por qué es eficaz.
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 toma 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, de cara a garantizar la protección y disponibilidad de datos. Esto significa que con MongoDB los desarrolladores pueden diseñar y crear aplicaciones sofisticadas.
Si bien MongoDB se desarrolló para rastrear impresiones en miles de sitios de servicios de publicidad, pronto ganó gran popularidad por la flexibilidad que ofrecía como almacén de datos en el desarrollo de webs 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 puedes comenzar a utilizarlo rápidamente. 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 ofrece 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 gracias a la sencillez 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 diversas configuraciones y niveles de servicio para adaptarse a las necesidades de los desarrolladores, tanto si trabajan en proyectos empresariales pequeños, medianos o 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, documenta las bases de datos, como MongoDB, escala o distribuye datos entre varios nodos o clústeres 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. Alternativamente, 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 frente a BASE
Cuál elijas depende de las necesidades de tu aplicación.
| ACID (atomicidad, consistencia, aislamiento y 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 resulta eficaz. 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 ACID puede provocar la reducción de las velocidades de escritura. 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 similares 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 permite la indexación en cualquier campo de cada documento. Los índices soportan la ejecución eficaz de consultas y pueden incluir índices primarios y secundarios. El lenguaje de consulta de MongoDB admite 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 clúster 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 conjuntos de datos de réplica. Las réplicas se pueden utilizar para equilibrar la 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 datos al mantener 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 clúster con particiones horizontales puede constar de múltiples conjuntos de réplicas. La fragmentación se configura mediante la definición de una clave de fragmentación, que determina cómo se distribuyen los datos entre las particiones horizontales. Esta técnica puede ayudar a gestionar grandes conjuntos de datos y operaciones de alto rendimiento, ya que divide el conjunto de datos y lo carga en varios servidores.
Cómo funciona la fragmentación
Cada fragmentación es una instancia de Oracle Database independiente que aloja un subconjunto de los datos de la base de datos lógica.
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 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 eliminación de documentos.
MongoDB no tiene el 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 estrictas, jerarquías y procedimientos de validación 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 clúster MongoDB distribuido a gran escala con fragmentación y réplicas puede ser complejo y requerir un profundo conocimiento 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 del esquema | Requiere un esquema predefinido que se debe configurar para 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, aportando de esta forma más capacidad a la máquina existente, aunque las funciones maduras, como la fragmentación y Oracle Real Application Clusters ofrecen escalabilidad horizontal. | Diseñado para escalar horizontalmente en varias máquinas mediante fragmentación, que distribuye datos a través de un clúster de máquinas. |
| Transacciones | Admite transacciones de varias filas y es compatible con ACID, 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 pilas de desarrollo de código abierto populares, como MEAN y MERN.
Elígelo cuando 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 múltiples 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 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 MongoDB es la API de Oracle Database API for MongoDB, que permite a los desarrolladores utilizar las herramientas y los controladores 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 mediante 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 (Simple Oracle Document Access, o SODA, y Oracle Database API for 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 realiza con Oracle Cloud Infrastructure (OCI) GoldenGate.
Los usuarios de MongoDB ahora disponen de 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 con una única plataforma de datos que puede ayudar a satisfacer todas sus necesidades: permitiendo 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 de Oracle Database, JSON Relational Duality, proporciona las ventajas tanto de las tablas relacionales como de los documentos JSON, sin las desventajas de ninguno de los modelos.
Autonomous Database ofrece los servicios de IA integrados y el aprendizaje automático (ML) en la base de datos para mejorar tus aplicaciones con análisis de texto e imágenes, reconocimiento de voz o recomendaciones personalizadas. Con Select AI, Autonomous Database traduce automáticamente el lenguaje natural a consultas de base de datos y te permite mantener una conversación contextual, sin necesidad de realizar una codificación personalizada u operaciones manuales a través de una 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 del IoT, etc., 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 eficaz 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 el resto de empleados pueden beneficiarse de aplicaciones nativas de la nube diseñadas específicamente para maximizar la agilidad, la escalabilidad y la eficiencia. Aprende más y encuentra 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 un marco?
Es un sistema de gestión de bases de datos que utiliza datos no estructurados almacenados en documentos en lugar de tablas.