3

我們應用程序的用戶意外刪除了數據。他們希望這個恢復。我們沒有特殊的邏輯或數據存儲實體可以做到這一點。恢復appengine數據存儲數據的選項?

但是,我們使用數據存儲區管理員將整個數據存儲每日備份到blobstore。

我們有選擇地將部分備份恢復到數據存儲中的選項是什麼?

我們最好不要讓其他用戶中斷服務。最後一個限制是我們無法更改生產應用程序ID(即將數據複製到新應用程序,然後將備份恢復到我們的舊應用程序 - 這是因爲我們的客戶端直接引用了我們的appid)。

想法?

UPDATE

我想在我們的應用程序所有的斑運行MapReduce和發現與我們的備份做的那些的。解析這些備份並根據需要恢復實體。唯一的問題是,blob存儲的格式是什麼?我如何解析它們?

回答

1

自1.6.5以來,Datastore Admin現在允許您從現有備份中恢復單個種類。

關於備份格式:根據datastore admin source code你可以使用RecordsReader讀取存儲在leveldb log format備份文件中MapperPipeline

+0

所以看起來這是不可能的,如果我的應用程序是一個java應用程序? – aloo

+0

此外,只需要恢復實體的子集,而不是某種特定的所有實體。 – aloo

+0

(現在看java文件API) – aloo

0

可能custom backup reader幫助您

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 
}