¿Existen herramientas para la migración de esquemas para bases de datos NoSQL?

Estoy buscando una forma de automatizar la migración de esquemas para bases de datos como MongoDB o CouchDB.

Preferiblemente, este instrumento debería estar escrito en python, pero cualquier otro idioma está bien.

Dado que una base de datos nosql puede contener grandes cantidades de datos, no se puede migrar en el sentido normal de rdbms. En realidad, no puede hacerlo para rdbms tan pronto como sus datos pasen un cierto umbral de tamaño. No es práctico reducir su sitio durante un día para agregar un campo a una tabla existente, por lo que con rdbms terminará haciendo parches feos, como agregar nuevas tablas solo para el campo y hacer uniones para obtener los datos. En el mundo nosql puedes hacer varias cosas.

  • Como otros sugirieron, puede escribir su código para que maneje diferentes “versiones” del esquema posible. Esto suele ser más sencillo de lo que parece. Muchos tipos de cambios de esquema son triviales para codificar alrededor. por ejemplo, si desea agregar un nuevo campo al esquema, simplemente agréguelo a todos los registros nuevos y estará vacío en todos los registros antiguos (no obtendrá los errores del “campo no existe” o nada;). Si necesita un valor ‘predeterminado’ para el campo en los registros antiguos, se realiza de manera demasiado trivial en el código.
  • Otra opción y, de hecho, la única opción sensata que sigue adelante con los cambios de esquema no triviales, como los renombrados de campos y los cambios estructurales, es almacenar schema_version en CADA registro y tener código para migrar datos de cualquier versión a la siguiente en LEER . es decir, si su versión de esquema actual es 10 y usted lee un registro de la base de datos con la versión de 7, entonces su capa de db debe llamar a migrate_8, migrate_9 y migrate_10. De esta manera, los datos a los que se accede se migrarán gradualmente a la nueva versión. y si no se accede, entonces a quién le importa qué versión es;)

Uno de los supuestos beneficios de estas bases de datos es que no tienen esquemas y, por lo tanto, no necesitan herramientas de migración de esquema. En su lugar, escribe su código de manejo de datos para tratar con la variedad de datos almacenados en la base de datos.

Si sus datos son lo suficientemente grandes, probablemente encontrará que NUNCA puede migrar los datos, o que no es beneficioso hacerlo. Esto significa que cuando realiza un cambio de esquema, el código debe continuar siendo compatible con los formatos antiguos para siempre.

Por supuesto, si sus datos “caducan” y eventualmente caducan de todos modos, esto puede hacer la migración del esquema por usted, simplemente cambie el formato para los datos recién agregados, luego espere a que todos los datos en el formato antiguo caduquen, entonces puede retirar la compatibilidad con versiones anteriores. código.

Cuando un proyecto necesita una migración de esquema con respecto a una base de datos NoSQL, me hace pensar que todavía está pensando en una base de datos relacional, pero utilizando una base de datos NoSQL.

Si alguien va a comenzar a trabajar con bases de datos NoSQL, debe darse cuenta de que la mayoría de las ‘reglas’ para un RDBMS (es decir, MySQL) también deben salir por la ventana. Cosas como esquemas estrictos, normalización, utilizando muchas relaciones entre objetos. NoSQL existe para resolver problemas que no necesitan todas las “características” adicionales proporcionadas por un RDBMS.

Le recomendaría que escriba su código de una manera que no espere o no necesite un esquema duro para su base de datos NoSQL. Debe admitir un esquema antiguo y convertir un registro de documento sobre la marcha cuando ingrese si realmente quiere más esquema. campos en ese registro.

Tenga en cuenta que el almacenamiento NoSQL funciona mejor cuando piensa y diseña de manera diferente en comparación con cuando se usa un RDBMS