1

現在、Google App Engine の webapp データストアをバックアップする最良の方法を探しています。私が行ってきた読書から、これを行うには2つの異なる方法があるようです. appcfg.py upload_data --application= --kind= --filename= を呼び出して GAE のバルクローダーを使用するか、Web アプリケーションのデータストア管理セクションに移動して、バックアップするエンティティを選択し、[バックアップ] をクリックします。エンティティ」ボタン。私が間違っていない限り、[エンティティのバックアップ] ボタンはブロブストアにデータストアのバックアップを作成し、appcfg.py の download_data を使用するとローカル バックアップが作成されます。バックアップは毎週/毎月行われます。主な理由は、Web アプリケーションの管理者の 1 人が誤って重要なデータを削除した場合です。Google がデータを失う心配はありませんが、

私の質問は次のとおりです。これら 2 つの方法のうち、どちらが好ましい方法ですか? それらのどれがより速く、より効率的で、より安価ですか?

コメント/ヘルプ/回答をよろしくお願いします。

4

2 に答える 2

7

これが私がそれを最もよく処理すると思う解決策と一緒に考慮すべきいくつかの要因です:

開発時間-データストア管理者-バルクローダーを活用するには、スクリプトを作成し、バックアップサーバー、ストレージなどを維持する必要があります。

コスト-データストア管理者-YMMVですが、数千万のエンティティのバックアップでは、10億のタスクキュークォータの1%未満が使用されました。データストアの読み取り操作とストレージのコストは、アプリケーションによって異なります。ただし、2つのオプションの間で、読み取り操作は同じである必要があり、データストア管理者とBlobstoreストレージ($ 0.0043 / GB)のバルクローダーで送信帯域幅($ 0.12 / GB)を交換しています。

バックアップ期間-データストア管理者-ご想像のとおり、Googleのネットワーク内のBlobstoreにデータを書き込むmapreduceシャードは、エンティティデータを一度に1つずつストリーミングするよりもはるかに高速です。データストア管理者によるデータの完全バックアップには6時間未満かかります。バルクローダーを使用すると、3日以上かかります。

バックアップのメンテナンス-バルクローダー(今のところ) -バルクローダーとサーバーを使用すると、cronを作成して、バックアップとバックアップのメンテナンスを定期的に実行できます。たとえば、Rackspaceには、3日ごとにデータストアをバックアップし、最後の2つのバックアップを保持するサーバーがあります。Datastore Adminを使用すると、自動化されたソリューションが公開されるまで、手動でバックアップを実行し、古いバックアップを削除する必要があります(問題7040)。それでも、月に1回のバックアップの場合、Datastore Adminを使用して手動で行うコストは非常に低いため、お勧めします。

データの柔軟性-バルクローダー-バルクローダーを使用すると、すべてのデータを人間が読める形式のcsvファイルにエクスポートして、Excelでピボットしたり、ローカル開発環境のテストデータセットを作成したり、操作を別のアプリホスティングサービスに移動したりできます(例: AWS)必要な場合。

Precision Restore - Bulkloader -Bulkloaderは、選択したエンティティ(削除または上書きしたエンティティが正確にわかっている場合)および一括復元の復元を処理できます。データストア管理者は、特定の種類のすべてのエンティティに対してのみ一括復元を実行できます。

一括復元-データストア管理-データストア管理は、変更されたエンティティを更新するだけで、非常にコストのかかる書き込みを最小限に抑えます。シャーディングにより、このプロセスは単純なバルクローダーのアップロードよりもはるかに高速になります(ただし、多くのクライアント間でcsvバックアップデータを自分でシャーディングすることもできます)。

最終的に、Bulkloaderはより正確な制御を提供し、DatastoreAdminは一括バックアップ/復元を簡素化および高速化します。データストア管理者は新しく、いくつかの問題(7076)がありますが、状況を考えると、絶対にお勧めします。

于 2012-03-13T22:41:51.910 に答える
4

ダウンロード操作をローカルでエンティティごとに実行するか、Map/Reduce を使用してクラウドでエクスポートを実行し、すべてのコンパイル済みパッケージをダウンロードするかは、実際には決定事項です。

データストア管理ユーティリティを使用すると、おそらく失敗や破損の可能性が低くなります。個人的には、appcfg を使用して複雑なスキーマをダウンロードする際に常に問題が発生し、それ以来データストア管理に固執しています。

速度の点では、データストア管理ジョブを実行するタスク キューの設定方法 (タスク キュー レート コントロールを使用するか、パラメーターを介して専用バックエンドにタスクを送信することtargetにより) に応じて、データストア管理はローカル コンピューターを確実に凌駕し、パフォーマンスを上回ります。

コストの面では、 Map/Reduce は予想外の場所で非常に急速に高価になる可能性があります。144,000 個のエンティティを削除する必要がある 1 つのジョブで、約 1,154 万 (!!) のデータストア書き込み呼び出しが発生しました。appcfgの一括ダウンローダは、書き込みクォータまたはタスク キュー クォータには影響しません。

効率の点では、AppEngine インスタンスがデータストアからエンティティをダウンロードして Blobstore に配置する方が、ローカル マシンでエンティティを直接ダウンロードするよりもおそらくはるかに高速です。Map/Reduce は一般に、特に AppEngine では非常に効率的です。

あなたの質問に対する答えは、データセットのサイズ、予算、および忍耐力によって異なります。Map/Reduce (データストア管理経由) はより一貫性があり高速ですが、セットアップによってはさらに多くのコストがかかる可能性があります。

于 2012-03-08T23:50:19.713 に答える