Migración de MySQL a MongoDB: mejores prácticas

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?

preguntado el 03 de mayo de 12 a las 16:05

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? -

Sí, un poco para que pueda agregar/editar/eliminar categorías a escala global (para la navegación de un sitio o algo así). -

2 Respuestas

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

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 or haz tu propia pregunta.