¿Cuándo usar una base de datos nosql como mongodb sobre mysql?

13

Soy nuevo en el concepto de bases de datos nosql y nunca lo he usado. Según lo que he leído y lo poco que he entendido, todavía no veo cómo pueden ser particularmente útiles si no puede hacer referencias entre los datos, si no hay un concepto de clave externa.

¿Cómo podría, por ejemplo, consultar algo tan simple como 'encontrar todos los comentarios publicados por este usuario', 'encontrar todas las fotos que pertenecen a una entidad del álbum', etc.

¿Los sistemas nosql se alejan del modelo de datos relacionales estáticos pero aún le permiten realizar un seguimiento de tales referencias? ¿Hay algo análogo a las claves externas que puede utilizar en las consultas?

akomada
fuente

Respuestas:

19

Usos generales

  • Si tiene estructuras de datos que no están claramente definidas en el momento en que crea el sistema. Tiendo a mantener la configuración del usuario en nosql, por ejemplo. Otro ejemplo fue un sistema donde los usuarios necesitaban poder agregar campos en tiempo de ejecución, muy doloroso en un RDBMS y muy fácil en NoSQL.

  • Si la estructura de su modelo se centra principalmente en uno o pocos objetos de modelo y la mayoría de las relaciones son en realidad objetos secundarios de los objetos de modelo principales. En este caso, encontrará que tendrá muy poca necesidad de uniones reales. Descubrí que el sistema de gestión de contactos se puede implementar bastante bien en nosql, por ejemplo. Una persona puede tener múltiples direcciones, teléfonos y correos electrónicos. En lugar de ponerlos en una tabla separada, todos se vuelven parte del mismo modelo y tienes un objeto de una persona.

  • Si desea beneficiarse de agrupar sus datos en varios servidores en lugar de tener un servidor monolítico, que RDBMS requiere comúnmente.

  • Almacenamiento en caché. Incluso si desea quedarse con un RDBMS como su base de datos principal, puede ser útil usar una base de datos NoSQL para almacenar en caché los resultados de la consulta o conservar datos, como los contadores.

  • Almacenar documentos. Si desea almacenar documentos coherentes, en una base de datos, algunas de las bases de datos NoSQL (como MongoDB) están realmente especializadas en almacenarlas.

¿Qué pasa con las uniones?

Honestamente, el asunto de no unirse también me pareció bastante aterrador al principio. Pero el truco es dejar de pensar en SQL. Realmente debe pensar con el objeto que tiene en la memoria cuando ejecuta su aplicación. Estos deberían guardarse más o menos en la base de datos NoSQL tal como están.

Debido a que puede almacenar su gráfico de objeto completo, con objetos secundarios, se elimina la mayor parte de la necesidad de uniones. Y si encuentra que necesita uno, tendrá que morder la bala y buscar ambos objetos y unirse al código de su aplicación.

Afortunadamente, la mayoría de los conductores pueden unirse por usted, si configura su esquema correctamente.

Para leer más, en realidad recomiendo a Martin Fowler .

ced-b
fuente
2

Definitivamente usaría una base de datos de este tipo durante las etapas de planificación de un proyecto (antes del desarrollo, incluso antes del diseño) para registrar datos cuya estructura, relaciones y características aún no se conocen y están sujetas a análisis. Intentaría hacer que todo se ajuste a un modelo relacional después de eso.

Mike Nakis
fuente
2
¿Qué? ... ¿Por qué? ...
Robert Harvey
Por lo tanto, uno podría, en la práctica, utilizar un modelo de relación para los datos que sabe que realmente no cambiarán mucho, como la información del usuario, con el nombre típico, el correo electrónico, etc., por ejemplo en mysql. Y luego use eso en conjunción con una base de datos nosql para manejar datos irregulares no estructurados, como los registros de actividad del usuario. Una especie de responsabilidad dividida. ? ¿O sugirió comenzar con una base de datos nosql y realizar una migración completa a un modelo relacional una vez que todo esté configurado?
akomada
En un escenario en el que ya tiene datos incluso antes de que comience el análisis, (por ejemplo, está llamado a reescribir el software que controla una fábrica existente, donde los sensores ya están arrojando datos), inmediatamente comenzaría a capturar los datos en una base de datos nosql, y luego trataría, si es posible, de adaptarlo a un modelo relacional. Si no es posible, entonces continuaría con nosql.
Mike Nakis
0

En algunos casos, no necesitará claves foráneas. Por ejemplo:

Encuentra todos los comentarios publicados por este usuario

puede ser tan simple como cargar la commentsparte de un documento correspondiente a un usuario. Esto se llama desnormalización : en lugar de tener dos conjuntos con una combinación, tiene un documento y todo lo que necesita está dentro del documento. Una consulta, sin uniones, mejor rendimiento .

Pero en algunas circunstancias, esto puede conducir a la duplicación de datos , por lo que la vinculación de un documento a otro podría ser adecuado. En este caso, puede interesarle la normalización de MongoDB, la clave externa y la unión , la página de referencias de la base de datos y especialmente la función DBRefs.

Arseni Mourzenko
fuente