恢复appengine数据存储数据的选项?
我们应用程序的用户意外删除了数据。 他们希望这个恢复。 我们没有特殊的逻辑或数据存储实体可以做到这一点。
但是,我们使用数据存储区管理员将整个数据存储每日备份到blobstore。
我们有什么选择可以有选择地将部分备份恢复到数据存储中?
我们最好不要让其他用户中断服务。 最后一个限制是我们无法更改我们的产品应用程序ID(即将数据复制到新应用程序,然后将备份恢复到我们的旧应用程序 - 这是因为我们的客户端直接引用了我们的appid)。
思考?
UPDATE
我正在考虑在我们应用中的所有blob上运行mapreduce,并找到与我们的备份有关的那些。 解析这些备份并根据需要恢复实体。 唯一的问题是,blob存储的格式是什么? 我如何解析它们?
自1.6.5版本以来,Datastore Admin现在允许您从现有备份恢复个别种类。
关于备份格式:根据数据存储区管理源代码,您可以使用RecordsReader读取在MapperPipeline中以leveldb日志格式存储的备份文件
目前形式的还原功能对我的应用程序来说并不是非常有用。 应该有一个选项,只能将少数实体或名称空间还原到当前应用程序ID或另一个应用程序ID中。 请为此问题http://code.google.com/p/googleappengine/issues/detail?id=7311加分
可以自定义备份阅读器帮助你
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
}
链接地址: http://www.djcxy.com/p/57827.html