Migración de MySQL a MongoDB: mejores prácticas
Frecuentes
Visto 3,456 veces
5
Por lo tanto, puede ser mejor simplemente probarlo y ver algunas pruebas y errores, pero estoy tratando de encontrar la mejor manera de migrar una estructura bastante simple de mysql a mongodb. Digamos que tengo una tabla principal en mysql llamada 'artículos' y tengo otras dos tablas, una llamada 'categorías' y la otra 'categoría_enlace'. Todas las categorías tienen un ID y un nombre. Todos los artículos tienen una identificación y otros datos. La tabla de vínculos relaciona los artículos con las categorías, de modo que puede tener categorías ilimitadas relacionadas con cada artículo.
Desde un enfoque de MongoDB, ¿tendría sentido simplemente almacenar los datos del artículo y los ID de categoría que pertenecen a ese artículo en la misma colección, teniendo así solo 2 colecciones de datos (una para los artículos y otra para las categorías)? Mi opinión es que para agregar/eliminar categorías de un artículo, simplemente actualizaría ($pull/$push) en ese documento de artículo en particular, ¿no?
2 Respuestas
4
En mi opinión, un buen modelo sería así:
{"article_name": "name",
"category": ["category1_name", "category2_name", ...],
"other_data": "other data value"
}
Entonces, para incrustar los nombres de las categorías directamente en el documento del artículo. Actualizar categorías de artículos es fácil, pero eliminar una categoría por completo requiere modificar todos los artículos que pertenecen a la categoría. Si la eliminación de categorías es frecuente, mantenerlas separadas podría ser una buena idea en cuanto al rendimiento.
Este enfoque también facilita la realización de consultas sobre el nombre de la categoría (no es necesario asignar el nombre a la identificación con una consulta separada).
Por lo tanto, la forma "correcta" de modelar los datos depende del caso de uso asumido, como suele ser el caso con mongodb y otras bases de datos nosql.
contestado el 03 de mayo de 12 a las 20:05
si las categorías están separadas, ¿tendría sentido simplemente poner los ID de categoría en la colección de artículos y usar esos ID para vincular a una colección de 'categorías' con el resto de los datos de la categoría (el nombre del gato, id, slug, etc.) ? - jpe
Sí, esto tendría sentido para mí, y funciona. Lo único que se debe tener en cuenta es que luego, para mostrar un artículo, se requerirán más consultas a la colección de categorías para obtener los nombres de las categorías. Otra opción sería usar el nombre de la categoría como id. Sin embargo, esto requiere que los nombres de las categorías sean únicos. - jhonkola
4
Si tiene acceso a una computadora Mac, puede darle al Interfaz gráfica de usuario de MongoHub un intento. Tiene una característica de "Importar desde MySQL".
contestado el 03 de mayo de 12 a las 17:05
En realidad, el problema era que el botón no estaba allí. Debe agregar el botón en versiones recientes de mongohub dropbox.com/s/sewbh0gc62sycyx/… - harry moreno
Harry Moreno, gracias, lo encontré! Sin embargo, incluso si se conecta perfectamente y elijo todo, cuando presiono Importar no hace nada, independientemente de si escribo un nombre de colección existente o no existente. - Joao Carlos
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas mysql mongodb database or haz tu propia pregunta.
Fusionar las tablas es la idea correcta. ¿Necesita una colección de categorías si las almacena en los artículos? ¿Supongo que tal vez enumerarlos en algún lugar a la vez? - Eve Freeman
Sí, un poco para que pueda agregar/editar/eliminar categorías a escala global (para la navegación de un sitio o algo así). - jpea