MySQL - MongoDB

MongoDB y MySQL son las principales bases de datos relacionales y NoSQL de código abierto, respectivamente. ¿Cuál es mejor para su aplicación?

por Martin Heller

MySQL - MongoDB

Durante la burbuja de las puntocom en la década de 1990, una pila de software común para aplicaciones web fue LAMP, que originalmente significaba Linux (OS), Apache (servidor web), MySQL (base de datos relacional) y PHP (lenguaje de programación de servidor). MySQL fue la base de datos preferida principalmente porque era de código abierto gratuito y tenía un buen rendimiento de lectura, lo que encajaba bien con las aplicaciones “Web 2.0” que generaban sitios dinámicamente a partir de la base de datos.

Más tarde, la pila MEAN, que significaba MongoDB (base de datos de documentos), Express (servidor web), AngularJS (marco de front-end) y Node.js (tiempo de ejecución de JavaScript de back-end), saltó a la fama. La pila MEAN era atractiva, entre otras razones, porque el único lenguaje que necesitaba saber era JavaScript. También necesitaba menos RAM que una pila LAMP equivalente.

¿Qué es MySQL / MariaDB?

Monty Widenius y David Axmark de MySQL AB desarrollaron originalmente MySQL a partir de 1994. El “My” en el nombre del producto se refiere a la hija de Widenius, no a la palabra en inglés “my”. MySQL fue diseñado para ser compatible con API con mSQL (también conocido como Mini SQL), con la adición de una capa de consulta SQL y una licencia de código abierto (en realidad, una licencia dual, tanto propietaria como GPL). Las versiones públicas de MySQL comenzaron a finales de 1996 y continuaron cada año o dos. MySQL es actualmente la base de datos relacional más popular.

Sun Microsystems adquirió MySQL AB en 2008 (por mil millones de dólares) y Oracle adquirió Sun en 2010. Widenius bifurcó MySQL 5.5 en MariaDB justo antes de la adquisición de Oracle, en medio de una preocupación generalizada sobre las intenciones de Oracle para MySQL. MariaDB se ha esforzado por mantener la compatibilidad con las versiones de Oracle MySQL.

MySQL comenzó como una base de datos relacional de gama baja en comparación con las bases de datos relacionales comerciales más capaces como Oracle Database, IBM DB / 2 y Microsoft SQL Server, aunque era lo suficientemente bueno como para ser la tienda de respaldo para sitios web dinámicos. A lo largo de los años, ha agregado la mayoría de las características que espera de una base de datos relacional, incluidas transacciones, restricciones de integridad referencial, procedimientos almacenados, cursores, indexación y búsqueda de texto completo, indexación y búsqueda geográfica y agrupación en clústeres.

MySQL todavía se usa generalmente en implementaciones de tamaño pequeño a mediano, aunque ahora admite características de “grandes bases de datos”, como implementaciones maestro-esclavo, uso con Memcached y fragmentación horizontal. Escalar MySQL a varios esclavos mejora el rendimiento de lectura, pero solo el maestro acepta solicitudes de escritura.

AWS ofrece MySQL como servicio en dos versiones, Amazon RDS y Amazon Aurora . Este último tiene un rendimiento mucho más alto, puede manejar terabytes de datos, tiene un menor tiempo de retraso para actualizar las réplicas y compite directamente con Oracle Database y SQL Server.

¿Qué es MongoDB?

MongoDB es una base de datos de documentos operativos altamente escalable disponible en versiones empresariales comerciales y de código abierto, y se puede ejecutar en las instalaciones o como un servicio en la nube administrado. El servicio en la nube administrado se llama MongoDB Atlas.

MongoDB es de lejos la más popular de las bases de datos NoSQL. Su modelo de datos de documentos ofrece a los desarrolladores una gran flexibilidad, mientras que su arquitectura distribuida permite una gran escalabilidad. Como resultado, MongoDB a menudo se elige para aplicaciones que deben administrar grandes volúmenes de datos, que se benefician de la escalabilidad horizontal y que manejan estructuras de datos que no se ajustan al modelo relacional.

MongoDB es una tienda basada en documentos que también tiene una tienda basada en gráficos implementada encima. MongoDB en realidad no almacena JSON: almacena BSON (JSON binario), que extiende la representación JSON (cadenas) para incluir tipos adicionales como int, long, date, punto flotante, decimal128 y coordenadas geoespaciales.

MongoDB puede generar índices de gráficos multimodales, geoespaciales, de árbol B y de texto completo en una sola copia de los datos, utilizando el tipo de datos para generar el tipo correcto de índice. MongoDB le permite crear índices en cualquier campo de documento. MongoDB 4 tiene transacciones de múltiples documentos, lo que significa que aún puede obtener propiedades ACID incluso si tiene que normalizar el diseño de sus datos.

De forma predeterminada, MongoDB usa esquemas dinámicos, a veces llamados sin esquema. No es necesario que los documentos de una sola colección tengan el mismo conjunto de campos, y el tipo de datos de un campo puede diferir entre los documentos de una colección. Puede cambiar las estructuras de los documentos con esquemas dinámicos en cualquier momento.

Sin embargo, la gobernanza de esquemas está disponible. A partir de MongoDB 3.6, MongoDB admite la validación del esquema JSON, que puede activar en su expresión de validación.

Las pilas LAMP y MEAN

Existen muchas variaciones en las pilas LAMP y MEAN. En lugar del sistema operativo Linux, por ejemplo, puede ejecutar en Windows (WAMP) o MacOS (MAMP). En lugar del servidor web Apache en Windows, puede ejecutar IIS (WIMP).

En lugar de la base de datos relacional MySQL en la pila LAMP, puede ejecutar PostgreSQL o SQL Server. Si necesita distribución global, puede ejecutar CockroachDB o Google Cloud Spanner . En lugar del lenguaje PHP, puede codificar en Perl o Python . Si desea codificar en Java o C #, hay que considerar familias de pilas independientes.

En lugar de la base de datos de documentos MongoDB en la pila MEAN, puede ejecutar Couchbase o Azure Cosmos DB para una mejor distribución global. En lugar de Express, se puede utilizar cualquiera de una docena de marcos servidor web Node.js. En lugar del marco de interfaz de AngularJS, puede ejecutar Angular 2 o React.

Cómo elegir una base de datos para su aplicación

Las preguntas más importantes que debe hacerse al elegir una base de datos son:

  • ¿Cuántos datos espera almacenar cuando la aplicación esté madura?
  • ¿Cuántos usuarios espera manejar simultáneamente en la carga máxima?
  • ¿Qué disponibilidad, escalabilidad, latencia, rendimiento y consistencia de datos necesita su aplicación?
  • ¿Con qué frecuencia cambiarán los esquemas de su base de datos?
  • ¿Cuál es la distribución geográfica de su población de usuarios?
  • ¿Cuál es la “forma” natural de sus datos?
  • ¿Su aplicación necesita procesamiento de transacciones en línea (OLTP), consultas analíticas (OLAP) o ambos?
  • ¿Qué proporción de lecturas y escrituras espera en producción?
  • ¿Necesita consultas geográficas y / o consultas de texto completo?
  • ¿Cuáles son sus lenguajes de programación preferidos?
  • ¿Tienes un presupuesto? Si es así, ¿cubrirá las licencias y los contratos de soporte?

Varias de estas preguntas tenderán a limitar la selección de una base de datos, pero tenemos muchas más opciones disponibles que cuando se formuló la pila LAMP. Si está creando una aplicación que debe estar disponible el 99,999 por ciento del tiempo para los usuarios de todo el mundo con una sólida coherencia, solo unas pocas bases de datos se ajustarán a la factura. Si su aplicación se utilizará en un país de 9 a. M. A 6 p. M. Los días de semana y puede tolerar la consistencia eventual, casi cualquier base de datos funcionará, aunque algunas serán más fáciles para desarrolladores y operadores y otras le brindarán un mejor rendimiento para sus escenarios de uso principal. .

Si bien las pilas LAMP y MEAN fueron buenas soluciones para aplicaciones web en un momento, ninguna es óptima ahora. En lugar de adoptar ciegamente uno u otro, debe pensar en sus casos de uso y encontrar una arquitectura que sirva a su aplicación en el futuro previsible.

¿SQL o NoSQL?

¿Cuándo querría una base de datos relacional como MySQL para una nueva aplicación? Aparte del soporte obvio para SQL estándar, las bases de datos relacionales por sí mismas fuerzan los datos a un esquema tabular con una tipificación fuerte y consistente de campos, y lo ayudan a evitar la duplicación de datos siempre que aproveche la normalización.

Si necesita evitar la pérdida de datos, puede declarar campos NOT NULLal crear o modificar tablas. Si necesita consultas geográficas según lo definido por el Consorcio Geoespacial Abierto, la mayoría de las bases de datos relacionales proporcionan una implementación sólida. Y si necesita una búsqueda de texto completo, la mayoría de las bases de datos relacionales le permiten definir índices de lista invertida en campos de texto, llamados FULLTEXT índices en MySQL.

Por otro lado, si también necesita un documento de formato libre ocasional, MySQL y muchas otras bases de datos relacionales también admiten datos JSON como se define en RFC 7159. Y si también desea utilizar documentos XML y XPath o XSLT, la mayoría de las bases de datos relacionales proporcionan esa capacidad.

¿Cuándo querría una base de datos de documentos como MongoDB? Si su caso de uso principal necesita permitir datos de formato libre, campos que cambian de tipo de documento a documento, un esquema que cambia con el tiempo o documentos anidados, entonces una base de datos NoSQL cumplirá con los requisitos. Además, si su aplicación está escrita en JavaScript, entonces el formato JSON de las bases de datos de documentos será un ajuste natural.

Fuente: https://www.infoworld.com/article/3444586/mongodb-vs-mysql-how-to-choose.html

Deja una respuesta