sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Django con mongodb hace que las migraciones sean cosa del pasado?

Creo que esta es una muy buena pregunta, pero las respuestas van a estar un poco dispersas según las bibliotecas que estés usando y tus expectativas para una "migración".

Echemos un vistazo a algunas acciones de migración comunes:

  • Añadir un campo: Mongo lo hace muy fácil. Simplemente agregue un campo y listo.
  • Eliminar un campo: En teoría, en realidad no está atado a su esquema, por lo que la "eliminación" aquí es relativa. Si elimina la "propiedad" y ya no carga el campo, entonces realmente no importa si ese campo está en los datos. Entonces, si no preocuparse por "limpiar" la base de datos, luego eliminar un campo no afecta la base de datos. Si haces Si se preocupa por limpiar la base de datos, básicamente necesitará ejecutar un bucle for gigante contra la base de datos.
  • Modificar un nombre de campo: Este también es un problema difícil. Cuando cambia el nombre de un campo "dónde", ¿lo está cambiando? Si desea que la base de datos refleje el nuevo nombre de campo, básicamente debe ejecutar un bucle for gigante en la base de datos. Para estar seguro, probablemente tenga que "agregar" datos, luego presionar el código y luego "deshabilitar" el campo anterior.

Algunas Arrugas

Sin embargo, el concepto de un nombre de campo junto con un objeto ActiveRecord está un poco sesgado. Un objeto ActiveRecord proporciona efectivamente asignaciones de propiedades de objeto a campos de base de datos reales.

En un RDBMS típico, el "tamaño" de un nombre de campo no es realmente relevante. Sin embargo, en Mongo, el nombre del campo en realidad ocupa espacio de datos y esto marca una gran diferencia en términos de rendimiento.

Ahora, si está utilizando alguna forma de "objeto de datos" como ActiveRecord, ¿por qué intentaría almacenar nombres de campo completos en los datos? La base de datos probablemente debería almacenar todos los campos en orden alfabético con un mapa en el lado del Objeto. Entonces, un documento podría tener 8 campos/propiedades y los nombres de la base de datos serían "a", "b"..."j", pero los nombres de los objetos serían cosas legibles como "Nombre", "Precio", "Cantidad".

La razón por la que menciono esto es que agrega otra arruga a Modificar un nombre de campo . Si está implementando una asignación, la modificación de un nombre de campo en realidad no provoca una migración en absoluto.

Algunas arrugas más

Si haces desea implementar una migración en una eliminación, tendrá que hacerlo después un despliegue También tendrá que reconocer que no ahorrará espacio en el disco actual cuando lo haga.

Mongo preasigna espacio y realmente no lo "devuelve" a menos que haga una reparación de DB. Entonces, si elimina un montón de campos en los documentos, esos documentos seguirán ocupando el mismo espacio en el disco. Si los documentos se mueven más tarde, puede recuperar espacio, sin embargo, los documentos solo se mueven cuando crecen.

Si elimina un campo grande de muchos documentos, querrá hacer una reparación o revisar el nuevo compact comando.