¿Qué tipo de desafíos enfrentarán si mueven una aplicación web de mysql a mongoDB por completo?

  • MongoDB no usa SQL y consultar una base de datos MongoDB es diferente de consultar MySQL. Es probable que deba reescribir gran parte del código de su aplicación que lee o escribe datos. Ver gráfico de mapeo de SQL a MongoDB.
  • MongoDB no escribe datos de manera duradera por defecto. Puede perder datos a menos que habilite una preocupación de escritura más fuerte que la configuración predeterminada predeterminada.
  • MongoDB no tiene autenticación o seguridad habilitada por defecto. Los miles de usuarios ingenuos de MongoDB están siendo víctimas de los hackers. Esto ha estado en las noticias últimamente, por ejemplo, ver los ataques de ransomware MongoDB y las lecciones aprendidas (Computerworld, 2017-01-13).

    Cada sitio que use MongoDB debería tomarse un tiempo para bloquear la seguridad. Ver lista de verificación de seguridad. Pero, por supuesto, no tiene que hacer esto, si no le importa ser hackeado repetidamente.

No soy un experto en diseño de bases de datos, pero hablar desde las relaciones de experiencia será un dolor. En una base de datos relacional como MySQL, puede establecer claves externas, normalizar, incluir cosas y asociar tablas. En MongoDB, todo depende de usted y la forma en que las personas estructuran sus datos es muy diferente. Cosas como los documentos incrustados facilitan las cosas hasta cierto punto.

En cuanto a los desafíos … Creo que si está trabajando con una gran base de datos y tiene muchos modelos, tratar de convertirlo y hacerlo de la manera NoSQL podría ser un poco confuso al principio.

Si tuviera un blog con comentarios en MongoDB, incrustaría los comentarios dentro de la base de datos. En MySQL, puede reducir los comentarios a 1NF y almacenar el blogPostId dentro del comentario. Buena suerte.

En primer lugar, debe tener en cuenta que mongodb no es un db y no hay consultas SQL simples para insertar / recuperar datos. Mongo trabaja en colecciones donde mysql trabaja en tablas. En SQL, puede ejecutar combinaciones de tabla para recuperar datos que no son lo mismo en Mongodb. El mongo “SQL” es bastante diferente. Y tendrá que trabajar en el diseño de “tabla” para adaptarse a la recuperación de los datos requeridos.

Una de las sorpresas para las personas que se mudan a mongodb es el tamaño de los datos. El tamaño de los datos en mongodb es aproximadamente 3 veces el de mysql. Creo que puede haber numerosas historias de personas que se están quedando sin espacio en disco mientras migran datos de mysql a mongo.

Mongo funciona sin RAM. Mientras que mysql es más sofisticado y puede ajustarse para generar consultas según sea necesario. Con mongo, sus datos completos deben residir en la RAM idealmente para obtener el mejor rendimiento.

En mysql world, la escalabilidad se define mediante la replicación multimaestro y maestro-esclavo. En mongo, la escalabilidad se define mediante “conjuntos de réplica”, que es efectivamente “maestro-esclavo” con conmutación por error automática. Mongo proporciona fragmentación automática, mientras que la implementación de la misma en mysql requiere cierto diseño.

Aquí hay algunos puntos de referencia sobre mongodb que ahora están muy desactualizados, pero dan una idea.

Almacenes de datos orientados a documentos.

Primero déjame saber por qué quieres hacer eso? es mysql cobrando 😀 es broma ..
De todos modos, es realmente difícil … pero no digo que sea imposible …

Generalmente en aplicaciones web, almacenamos datos en motores MYISAM o InnoDB db e intentamos mantener relaciones en nuestra lógica de aplicación.

Sin embargo, he visto en el marco de Django que almacena las relaciones en la tabla usando una clave externa que podría ser útil para crear API CRUD, pero luego degrada el control sobre el flujo de código y el acoplamiento en la arquitectura, a menos que fluya siguiendo las reglas.

  • Creacional: trata de cómo se crean los objetos
  • Estructural: trata de cómo se componen los objetos
  • Comportamiento: trata de cómo se utilizan los objetos

Otra cosa importante es que la aplicación segura para transacciones se puede construir fácilmente usando mysql InnoDB.

No tengo esa experiencia en mongoDB, pero sí, recientemente he planeado almacenar datos de registros de acceso apache analizados en mongo para fines de consulta / MIS / analíticos.

En realidad, mongo se puede usar como almacenamiento de pares de valores clave y sería bueno para un gran conjunto de datos para fines de análisis como datos de transmisión de clics, datos de baliza, etc.

Así que sugeriría que aquí sea simple y siga el principio de KISS [manténgalo simple, estúpido] … No cree pánico ni haga más ingeniería.

Estoy seguro de que el experto de Mongo puede responder mejor aquí … Así que espera más respuestas … 🙂

1. Los datos no representarán entidades del sistema. Con MySQL puede representar entidades de su sistema a través de tablas y columnas. Mientras que mongo es una cadena simple, no representa una relación relacional entre entidades.
2. Recuperar resultados se convierte en un problema. El uso de las consultas de recuperación de datos de MongoDB se vuelve complejo e ineficiente.
3. Pérdida de gestión de transacciones
4. Mongo DB es bueno si tiene grandes datos para almacenar que pueden procesarse y usarse más tarde. Pero si tiene consultas en tiempo real en su sistema, puede ser complejo y el rendimiento ineficiente.