2011-07-31 15 views
5

He hecho un montón de desarrollo en rails, y estoy buscando proyectos en desarrollo usando el motor de aplicaciones python &.Migraciones de datos y App Engine

Desde el proyecto de demostración y lo que he visto hasta ahora, Tengo una pregunta/preocupación por los proyectos de App Engine:

¿Cómo es la migración de datos manejados en app-engine? Por ejemplo, si cambio el nombre de una entidad/tabla (por ej., Textos a Documentos), o si cambio una columna en una tabla existente (por ejemplo, edad a dob), ¿cómo maneja los datos antiguos cuando esto sucede?

Gracias!

Respuesta

8

La respuesta corta es: No lo maneja. No puede cambiar el nombre de una entidad, puede cambiar una propiedad, pero deberá actualizar los datos manualmente.

Las definiciones de su modelo son solo la "vista" de sus aplicaciones sobre cómo interpretar las entidades almacenadas en el almacén de datos. Si tuviera una definición como:

class MyEntity(db.Model): 
    text = db.TextProperty() 

Y dirigir mi solicitud de un tiempo de llenar la propiedad text de mis enties, a continuación, más tarde llamado la columna a:

class MyEntity(db.Model): 
    description = db.TextProperty() 

todos mis datos existentes permanecerían exactamente como estaba (muchas entidades en el almacén de datos con propiedades text pobladas. Solo cuando traté de cargar las entidades en las instancias de mi modelo, solo las veía como entidades vacías (sin description establecido, y sin forma de acceder a los datos text) que existe actualmente). Guardar (poner) mi entidad de nuevo en el el almacén de datos sobrescribiría los datos antiguos y se perderían los datos.

Si realiza cambios en su esquema como este, o más probablemente solo cambie un tipo de campo. Depende de usted procesar previamente sus datos para manejar los cambios. La capa de modelo generará errores si intenta cargar una entidad que ya no se ajusta a las definiciones de su modelo.

Para ayudar en esta tarea manual de actualización de los datos de las armas preferidas son:

  1. remote_api/remote_api_shell.py
  2. El mapreduce biblioteca (especialmente el "asignador" parte)

Con la configuración de remote_api [1] puede abrir una sesión de Python interactiva a sus datos en vivo y ejecutar scripts localmente (principalmente) como si estuvieran ejecutándose directamente en los servidores de producción. Encuentro que esta es la forma más rápida y fácil de arreglar/limpiar datos para tareas pequeñas y únicas.

La aplicación mapeador [2] podría emplearse si tiene una tarea mucho más grande, digamos alterando millones de entidades y desea aprovechar la mayor cantidad de esto en paralelo como sea posible.

+0

Buena respuesta, pero una mención de Mapreduce sería una gran respuesta. –

+0

¡Gracias, Chris! @Nick, gracias por la mención de Mapreduce. – stringo0

1

No puede cambiar el nombre de una entidad. No está permitido

Si cambia el nombre de un atributo en un modelo (no los llame columnas), AppEngine ignorará los datos antiguos en el campo anterior y devolverá Ninguno para el nuevo campo.