GNU/Linux >> Tutoriales Linux >  >> Linux

MongoDB frente a MySQL

Introducción

La amplia variedad de sistemas de gestión de bases de datos (DBMS) que se ofrecen es, sin duda, algo bueno. Sin embargo, también significa que elegir el sistema de base de datos adecuado para sus necesidades requiere algo más que optar por la opción más popular.

Desde las diferencias del modelo de transacción hasta la calidad del soporte, los DBMS vienen en todas las formas y tamaños.

En este artículo de comparación, leerá sobre las diferencias entre las dos soluciones populares de DBMS:MongoDB y MySQL.

¿Qué es MongoDB?

MongoDB es un sistema de gestión de bases de datos NoSQL multiplataforma, como Cassandra o Redis. Sin embargo, a diferencia de esos sistemas, MongoDB está orientado a documentos. Utiliza documentos similares a JSON llamados archivos BSON como ubicaciones para sus almacenes de documentos. Dado que el archivo BSON es una modificación del formato JSON, MongoDB es totalmente compatible con la notación de objetos de JavaScript.

Otra característica importante de MongoDB es que no tiene esquemas. No requiere definir una estructura fija durante la creación del documento y hace que sea significativamente más fácil cambiar la estructura del registro más adelante.

El desarrollo de MongoDB comenzó en 2007 y en 2009 se convirtió en código abierto. MongoDB Inc., la empresa detrás del software, ofrece soporte comercial para el sistema.

Al momento de escribir este artículo, la última versión de MongoDB es la 4.4.3 de diciembre de 2020.

¿Qué es MySQL?

MySQL es un sistema de gestión de bases de datos relacionales (RDBMS). Es una implementación de código abierto de SQL, lenguaje de consulta estructurado. Las bases de datos relacionales como MySQL, Oracle o PostgreSQL son similares porque organizan los datos en tablas. Estas tablas contienen tipos de datos relacionados que ayudan a estructurar los datos.

MySQL almacena datos relacionados en cualquier número de tablas separadas. Las operaciones JOIN facilitan la consulta y correlación de datos de esas tablas, que permiten la creación de tablas temporales y conjuntos de filas utilizando datos de varias tablas.

Oracle es la empresa que posee y ofrece soporte para MySQL. Al momento de escribir este artículo, la última versión estable de MySQL es la 5.7.32 de octubre de 2020.

MongoDB vs. MySQL:descripción general de la comparación

MongoDB y MySQL son dos sistemas de administración de bases de datos fundamentalmente diferentes. Compararlos es útil porque son buenos representantes de sus respectivas filosofías de gestión. Para obtener más información, consulte NoSQL vs. SQL.

La siguiente tabla es una comparación directa de los aspectos esenciales de ambos DBMS.

A continuación se incluye una descripción general detallada de las áreas de comparación más significativas para MongoDB y MySQL.

Estructura de la base de datos (esquema)

MongoDB :MongoDB almacena datos en documentos. Estos documentos tienen varias estructuras, dependiendo de los requisitos de la base de datos. El sistema almacena datos relacionados juntos para facilitar una consulta rápida.

La flexibilidad del enfoque orientado a documentos en MongoDB es una de sus mayores ventajas en comparación con MySQL y otros DBMS relacionales. MongoDB no necesita que se declare un esquema de tabla antes de permitir la entrada de datos.

Una colección de documentos MongoDB puede presentar documentos con diferentes conjuntos de campos. El tipo de datos de campo también puede variar entre documentos. Agregar o eliminar campos dentro de un documento se realiza simplemente actualizando la estructura del documento. Lo mismo ocurre con el cambio de tipos de datos de campo.

Una operación de escritura en MongoDB es atómica a nivel de documento. Esto es cierto incluso en los casos en que una operación afecta a varios documentos incrustados. Las operaciones de escritura de documentos múltiples mantienen la atomicidad en el nivel del documento, pero no son atómicas en sí mismas.

MongoDB admite transacciones de varios documentos en conjuntos de réplicas y clústeres fragmentados.

MySQL :Los datos en MySQL se almacenan en tablas, que se crean antes de que se agreguen datos. Cada tabla de base de datos consta de filas y columnas. Las filas representan entidades de la base de datos y las columnas brindan información sobre las entidades.

Los esquemas estáticos definen la estructura de la base de datos y requieren que todas las filas tengan la misma estructura. MySQL tiene un límite estricto de 4096 columnas por tabla y un tamaño de fila máximo de 65 535 bytes.

El esquema del sistema consta de tablas que contienen la información necesaria para el funcionamiento ininterrumpido del servidor MySQL. Esta información incluye tablas del diccionario de datos con metadatos de objetos de la base de datos y otras tablas del sistema operativo.

Debido a la rigidez de la arquitectura de MySQL, la creación y administración de bases de datos requiere mucha planificación anticipada para mantener un alto rendimiento cuando la base de datos comienza a crecer.

Optimización de índices

MongoDB :MongoDB utiliza índices para la optimización. Sin índices, MongoDB revisa todos los documentos de una colección para encontrar una coincidencia para una consulta.

MySQL :Al igual que MongoDB, MySQL emplea índices para optimizar las consultas. Si no hay índices relevantes para una consulta en particular, MySQL busca en toda la tabla.

Despliegue de base de datos

MongoDB :los usuarios pueden implementar MySQL de forma nativa en Microsoft Windows, OS X, Linux y Solaris. MongoDB también es adecuado para entornos distribuidos como contenedores Docker.

MySQL :MySQL tiene archivos binarios para varios sistemas operativos, como Microsoft Windows, OS X, Linux, FreeBSD, NetBSD, Solaris, etc. Las imágenes MySQL Docker mantenidas oficialmente están diseñadas solo para plataformas Linux.

Idioma de consulta

MongoDB :El motor de MongoDB puede interactuar con muchos lenguajes de programación diferentes, según las preferencias del programador. Sin embargo, desde el primer momento, MongoDB utiliza MQL (lenguaje de consulta de MongoDB).

MQL es un lenguaje similar a SQL diseñado para consultar datos no estructurados. Las consultas en MongoDB están basadas en JavaScript.

Por ejemplo, así es como se crea una colección en MongoDB:

db.fruit.insertMany([
   { item: "apple", qty: 2, color: “red”, status: "A" },
   { item: "pear", qty: 5, color: “yellow”, status: "A" },
   { item: "cherry", qty: 4, color: “red”, status: "A" }
]);

La consulta de una colección se realiza mediante find comando:

db.fruit.find( { color: "red" } )

MySQL :Como muchos RDBMS, MySQL usa SQL. El ejemplo de la sintaxis utiliza los datos del ejemplo de MQL anterior.

Primero, los usuarios de MySQL deben crear una tabla:

CREATE TABLE IF NOT EXISTS `fruit` (
  `item` varchar(200) NOT NULL,
  `qty` int(3) unsigned NOT NULL,
  `color` varchar(200) NOT NULL,
  `status` varchar(200) NOT NULL,
  PRIMARY KEY (`qty`)
) DEFAULT CHARSET=utf8;

A continuación, la tabla se rellena con datos:

INSERT INTO `fruit` (`item`, `qty`, `color`, `status`) VALUES
  ('apple', '2', 'red', 'A'),
  ('pear', '5', 'yellow', 'A'),
  ('cherry', '4', 'red', 'A');

Creando la vista para filtrar datos:

CREATE VIEW red_fruit AS SELECT item FROM fruit WHERE color = 'red';

Una vez que existe el esquema, la consulta de la tabla se realiza mediante SELECT declaración:

SELECT * FROM red_fruit;

Replicación y agrupamiento de datos

MongoDB :El propósito de la replicación de datos es ofrecer continuidad comercial y disponibilidad de datos. MongoDB mantiene múltiples réplicas de datos en servidores aislados. Esta replicación ayuda a evitar la pérdida de datos debido a circunstancias imprevistas, como caídas del servidor, cortes de energía, etc.

Un conjunto de réplicas es un conjunto de instancias de mongod que administran el mismo conjunto de datos. Siendo el principal proceso demonio de MongoDB, mongod gestiona las solicitudes de datos, controla el acceso a los datos y realiza operaciones en segundo plano. Un conjunto de réplicas consta de una serie de nodos de datos, donde uno es el nodo principal que maneja todas las operaciones de escritura, mientras que los otros son secundarios.

Cada vez que se inicia un conjunto de réplicas, o hay un cambio en el conjunto relacionado con la cantidad de nodos, como la adición de un nuevo nodo o la pérdida de una conexión con el nodo principal por más tiempo del permitido, el sistema activa elecciones automáticas . El propósito de las elecciones es determinar si el nodo de datos principal actual debe seguir siendo principal.

MongoDB también admite fragmentación , que permite el escalado horizontal a través de la agrupación en clústeres de fragmentos. Sharding es un método de distribución de datos entre varias computadoras, que permite leer y escribir datos a lo largo de varios nodos. Ningún nodo único administra todos los datos, por lo que los datos se distribuyen entre todos los nodos en un fragmento.

Cuando se trabaja con grandes conjuntos de datos y alto rendimiento, la fragmentación ayuda a disminuir la carga en un solo servidor y permite escalar mediante la adición o eliminación de servidores, según la necesidad.

MySQL :MySQL admite los siguientes tipos de replicación listos para usar:

  • Replicación maestro-esclavo asíncrona, donde el proceso va de un maestro a cualquier cantidad de esclavos y viceversa. El maestro no espera a que los esclavos confirmen la recepción del evento. Los cambios en la base de datos se ponen en cola y se escriben en un momento posterior.
  • Replicación maestro-esclavo semisíncrona, con el maestro esperando en la replicación a que solo un esclavo confirme la recepción del evento.
  • Replicación multimaestro síncrona, que permite que los datos se almacenen en varias computadoras y que cualquier miembro del grupo los actualice. Todos los esclavos deben confirmar la recepción de eventos.

Si bien MySQL no es compatible con la fragmentación automática y la agrupación en clústeres por sí solo, los usuarios pueden lograr algunas de las funcionalidades a través de la tecnología MySQL Cluster.

Seguridad

MongoDB :MongoDB utiliza una autenticación basada en roles. Otras funciones de seguridad incluyen auditoría y autorización, y compatibilidad con TLS y SSL para fines de encriptación.

La principal ventaja relacionada con la seguridad de MongoDB sobre MySQL es su resistencia a los ataques de inyección SQL. La inyección de SQL es una vulnerabilidad que permite a un atacante obtener acceso a las consultas de la base de datos realizadas por una aplicación. El atacante puede usar esta vulnerabilidad para obtener acceso, modificar o eliminar datos de la aplicación. Una inyección SQL puede incluso comprometer el propio servidor.

Dado que la arquitectura de MongoDB utiliza documentos similares a JSON para explicar la consulta y que las consultas se representan como objetos JSON binarios (BSON) seguros, la inyección directa de cadenas es imposible.

MySQL :MySQL utiliza un modelo de seguridad basado en privilegios. Cada usuario está autenticado y se le otorgan privilegios específicos para crear, consultar o editar tablas. SSL proporciona encriptación de conexión.

Los ataques de inyección SQL son la mayor vulnerabilidad de MySQL. Sin embargo, se pueden tomar ciertas medidas para reducir el riesgo de un ataque, como usar consultas parametrizadas en lugar de una entrada de usuario concatenada. Esto es particularmente importante en WHERE cláusulas y INSERT o UPDATE declaraciones.

Escalabilidad

MongoDB :El escalado horizontal es una de las principales ventajas de MongoDB en comparación con MySQL. Mediante el uso de clústeres de fragmentos, MongoDB distribuye datos entre máquinas, lo que ayuda a casos de uso que incluyen trabajar con grandes conjuntos de datos.

MySQL :Como se mencionó anteriormente, MySQL no admite la fragmentación de fábrica. Escalar una base de datos en MySQL (y muchas otras soluciones RDBMS populares) requiere cambiar la aplicación que usa la base de datos o permitir un tiempo de inactividad hasta que se complete la migración a un servidor más grande.

Velocidad y rendimiento

MongoDB :Como base de datos NoSQL, MongoDB es más rápido que MySQL debido a su modelo de consulta, que permite variaciones según el tipo y el tamaño del trabajo. La velocidad de MongoDB es especialmente obvia en escenarios que incluyen grandes bases de datos.

MySQL :Si bien MySQL es el más lento de los dos, su rendimiento puede mejorarse significativamente con ajustes.

Soporte y Documentación

MongoDB :MongoDB Inc. ofrece soporte de nivel empresarial 24/7 y un complemento para soporte de ciclo de vida extendido. El soporte incluye una amplia base de conocimientos, versiones de mantenimiento, actualizaciones, parches y correcciones de errores. Al ser un jugador más nuevo en el mercado, MongoDB tiene una comunidad en línea más pequeña que MySQL.

MySQL :Como producto de Oracle, MySQL ofrece Oracle Lifetime Support las 24 horas del día, los 7 días de la semana en tres niveles:el soporte Premier incluye versiones de hasta 5 años, el nivel Extended es para las versiones de entre 6 y 8 años, mientras que Sustain admite todas las versiones anteriores a los ocho años. . Una comunidad en línea muy activa ayuda a los usuarios a encontrar rápidamente soluciones a muchos problemas.

Casos de uso

MongoDB :MongoDB, al igual que otras soluciones NoSQL, funciona mejor en los casos de uso que requieren una forma flexible y fluida de manipular datos, como:

  • Análisis en tiempo real
  • Almacenes de datos
  • Aplicaciones móviles
  • Sistemas de gestión de contenidos

La lista de empresas que utilizan MongoDB en sus paquetes tecnológicos incluye a Lyft, Adobe, Codecademy, etc.

MySQL :Las instituciones que se ocupan de las transacciones financieras y otras que requieren el cumplimiento de ACID eligen MySQL sobre MongoDB. La lista de empresas que utilizan MySQL es más larga e incluye Airbnb, Netflix, Amazon, Shopify, etc.

Es importante tener en cuenta que algunas empresas, como Uber, utilizan tanto MongoDB como MySQL para diferentes escenarios de uso dentro de la empresa.

¿Cómo elegir?

No hay un ganador claro en la comparación entre MongoDB y MySQL porque estos dos sistemas de administración de bases de datos se adaptan a dos campos significativamente diferentes. Elegir la solución adecuada requiere un análisis cuidadoso de las necesidades particulares de cada uno.

Elija MongoDB si necesita:

  • Aumentar la disponibilidad – La tecnología de replicación de datos de MongoDB y el uso de múltiples nodos para el almacenamiento de datos garantiza una mayor disponibilidad. MySQL también puede replicar datos entre nodos, pero el proceso es complejo y requiere mucho tiempo.
  • Acelerar el desarrollo – la flexibilidad del formato JSON es particularmente beneficiosa para los desarrolladores de aplicaciones, que prefieren representar datos en matrices y subdocumentos en lugar de filas y columnas rígidas.
  • Escala horizontal – MongoDB permite el escalado horizontal sin realizar cambios en la aplicación ni pasar por un tiempo de inactividad.

Elija MySQL si tu:

  • Operar con transacciones de dinero seguras – Las transacciones de MySQL se tratan como unidades individuales y no se borran hasta que cada etapa operativa individual se completa con éxito. Si alguna de las etapas falla, toda la operación falla. Esta función de MySQL garantiza la integridad de los datos necesaria para las transacciones financieras.
  • Necesita soporte transaccional integral – Las transacciones de MySQL siguen el estándar ACID, lo que significa que son atómicas, consistentes, aisladas y duraderas.
  • Necesita mejor soporte – MySQL existe desde hace mucho más tiempo que MongoDB, por lo que encontrar soluciones para problemas comunes en Internet es mucho más fácil si usa MySQL. En un nivel superior, administrar una base de datos NoSQL como MongoDB requiere más experiencia técnica que en el caso de MySQL.

Linux
  1. Configurar la replicación fuente-fuente de MySQL

  2. Eliminar tablas en MySQL

  3. Importar una base de datos MySQL

  4. Métodos de conexión de MySQL

  5. Programador de eventos MySQL

Instalar MongoDB en Ubuntu 20.04

Servidor de base de datos MySQL

Descripción general de MySQL

Instalar MongoDB en Ubuntu 18.04

¿Qué es MySQL vs MariaDB vs Percona?

¿Cómo instalar Mongodb en CentOS?

    MongoDB MySQL
    Tipo de base de datos NoSQL orientado a documentos SGBD relacional
    Lenguaje de programación C++, C, JavaScript C++, C
    Esquema Dinámico Estático
    Almacenamiento de datos BSON (formato similar a JSON) Tablas (filas y columnas)
    Idioma de consulta MQL (predeterminado), pero funciona con muchos idiomas SQL
    MapaReducir No
    Conversión de base de datos No
    Análisis de rendimiento No
    Modelo de transacción BASE ÁCIDO
    Aislamiento No
    Integridad referencial No
    Transacciones complejas No
    Escalado Horizontales Verticales
    Localidad de los datos No
    Fragmentación automática No
    Modo de replicación Maestro-Esclavo Maestro-Esclavo, Maestro-Maestro