3

Пользователь нашего приложения случайно удалил данные. Им хотелось бы, чтобы это было восстановлено. У нас нет специальной логики или объектов хранилища данных, которые могут это сделать.опции для восстановления данных хранилища приложений?

Однако мы ежедневно делаем резервные копии всего нашего хранилища данных в blobstore с помощью администратора хранилища данных.

Каковы наши возможности выборочного восстановления части этой резервной копии в хранилище данных?

Мы хотели бы, чтобы у нас не было прерывания обслуживания для других пользователей. Одно из последних ограничений заключается в том, что мы не можем изменить наш идентификатор производственного приложения (т. Е. Скопировать данные в новое приложение, а затем восстановить резервную копию в нашем старом приложении - это потому, что наши клиенты напрямую ссылаются на наш appid).

Мысли?

UPDATE

Я думал о запуске MapReduce над всеми сгустками в нашем приложении и найти те, которые связаны с нашей резервной копией. Анализ этих резервных копий и восстановление объектов по мере необходимости. Единственная проблема: какой формат хранятся в блоках? Как я могу их разобрать?

ответ

1

Начиная с версии 1.6.5 Datastore Admin теперь позволяет восстанавливать отдельные виды из существующей резервной копии.

О резервном формате: в соответствии с datastore admin source code вы можете использовать RecordsReader для чтения файла резервной копии, хранящейся в leveldb log format в MapperPipeline

+0

Так что, похоже, это не будет возможно, если мое приложение является Java-приложение? – aloo

+0

Кроме того, вы просто хотите восстановить подмножество объектов, а не все объекты определенного типа. – aloo

+0

(теперь смотрю API java-файлов) – aloo

0

восстановить функциональность в ее нынешнем виде не очень полезно для моего приложения. Должна быть опция восстановления только нескольких объектов или пространств имен в текущий идентификатор приложения или другой идентификатор приложения. Пожалуйста звезда этот вопрос http://code.google.com/p/googleappengine/issues/detail?id=7311

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 
}