3

アプリケーションのユーザーが誤ってデータを削除しました。彼らはこれを復元したいと思っています。これを実行できる特別なロジックまたはデータストアエンティティはありません。

ただし、データストア管理者を使用して、データストア全体をblobstoreに毎日バックアップします。

このバックアップの一部をデータストアに選択的に復元するためのオプションは何ですか?

他のユーザーのサービスが中断されないようにすることが望ましいです。最後の制限の1つは、本番アプリIDを変更できないことです(つまり、データを新しいアプリにコピーしてから、バックアップを古いアプリに復元します。これは、クライアントがアプリIDを直接参照するためです)。

考え?

アップデート

アプリ内のすべてのBLOBに対してmapreduceを実行し、バックアップに関係するBLOBを見つけることを考えていました。これらのバックアップを解析し、必要に応じてエンティティを復元します。唯一の問題は、blobがどの形式で保存されているかということです。どうすればそれらを解析できますか?

4

3 に答える 3

1

1.6.5 以降、データストア管理者は、既存のバックアップから個々の種類を復元できるようになりました。

バックアップ形式について:データストア管理ソース コードによると、 RecordsReaderを使用して、MapperPipeline にleveldb ログ形式で保存されたバックアップ ファイルを読み取ることができます。

于 2012-05-02T23:30:47.487 に答える
0

カスタムバックアップリーダーが役立つ場合があります

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
}
于 2015-12-17T20:11:02.143 に答える
0

現在の形式の復元機能は、私のアプリケーションではあまり役に立ちません。いくつかのエンティティまたは名前空間のみを現在の app-id または別の app-id に復元するオプションが必要です。この問題にスターを付けてください http://code.google.com/p/googleappengine/issues/detail?id=7311

于 2012-05-03T04:10:17.597 に答える