google app engine - google - opciones para restaurar los datos del almacén de datos appengine?
google app engine python (3)
Desde 1.6.5, el administrador de Datastore ahora le permite restaurar tipos individuales a partir de una copia de seguridad existente.
Acerca del formato de copia de seguridad: de acuerdo con el código fuente de administración del almacén de datos , puede usar el Lector de registros para leer el archivo de copia de seguridad almacenado en el formato de registro leveldb en un MapperPipeline
Un usuario de nuestra aplicación ha eliminado datos accidentalmente. Les gustaría que esto sea restaurado. No tenemos ninguna lógica especial o entidades de almacenamiento de datos que puedan hacer esto.
Sin embargo, hacemos copias de seguridad diarias de todo nuestro almacén de datos en blobstore utilizando el administrador del almacén de datos.
¿Cuáles son nuestras opciones para restaurar selectivamente parte de esta copia de seguridad en el almacén de datos?
Preferiblemente, nos gustaría no tener una interrupción del servicio para otros usuarios. Una restricción final es que no podemos cambiar nuestra identificación de la aplicación de producción (es decir, copiar datos en una nueva aplicación y luego restaurar la copia de seguridad en nuestra aplicación anterior; esto se debe a que nuestros clientes hacen referencia directamente a nuestra aplicación).
¿Pensamientos?
ACTUALIZAR
Estaba pensando en ejecutar un mapreduce sobre todos los blobs en nuestra aplicación y encontrar los que tienen que ver con nuestra copia de seguridad. Analizando estas copias de seguridad y restaurando las entidades según sea necesario. El único problema es, ¿en qué formato están almacenados los blobs? ¿Cómo puedo analizarlos?
La funcionalidad de restauración en su forma actual no es muy útil para mi aplicación. Debería haber una opción para restablecer solo algunas entidades o espacios de nombres en el ID de aplicación actual u otro ID de aplicación. Haga clic en este número http://code.google.com/p/googleappengine/issues/detail?id=7311
Puede ser un lector de copia de seguridad personalizado que lo ayude
final BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
final BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + bucket + "/" + pathToOutputFile);
final RecordReadChannel rrc = BlobserviceHelper.openRecordReadChannel(blobKey, blobstoreService);
ByteBuffer bf;
while ((bf = rrc.readRecord()) != null) {
final OnestoreEntity.EntityProto proto = new OnestoreEntity.EntityProto();
proto.mergeFrom(bf.array());
final Entity entity = EntityTranslator.createFromPb(proto);
entity.removeProperty(""); // Remove empty property
//Now you can save entity to datastore or read keys and properties
}