2012-02-24 6 views
10

いくつかのGAEアプリケーションで作業した後、私は、このプラットフォームでは、本番データのバックアップが十分に遅く、他のクラウドベースのテクノロジに移行するのに十分なほど高価だという結論に達しましたスタック。Google App Engine - 非常に遅くて高価なバックアップと復元を禁止しますか?

私たちのプロダクションアプリの中には、約1万のエンティティがあり、エンティティごとの平均サイズは1KBです。したがって、データの合計サイズは1GBあたりのものですが、大したことではありませんか?ここでbulkloaderツールの出力は、デフォルトのオプションでアプリケーションエンジンからエンティティをフェッチした後である:

[INFO]ほぼ13であり、47722.7 秒

で転送948212個のエンティティ(608342497バイト)時間。したがって、生産データ用の時間単位のバックアップシステムを設定したい場合は、現在のGAEツールセットでは不可能な方法です。

コストは別の話です。私はデータストアの管理者を使って、エンティティを別のアプリにコピーしようとしましたが、私たちはバックアップのために使うことができると考えました。最初に予算を1日に2ドルに設定しました。これはすぐに約5000のエンティティで不足しました。その後、予算を1日あたり10ドルに増やしました。

私は1GBのデータをバックアップする必要があるたびに100ドルを費やすつもりはないので、データをバックアップするために数時間(または数日)待つこともしません。だから私は何かを知っていないか、またはGoogle App Engineは現在、簡単にバックアップして復元できる意味のあるサイズのスケーラブルな制作品質のアプリを書くことは実用的ではありません。

GAEアプリからデータをバックアップする費用対効果の高い方法はありますか?

答えて

1

これは非常に良い質問です。私はこの問題を考えていましたが、Google Cloud Storage(実験版)は、以下の理由からバックアップデータに適していると考えています。

Google App Engineを使用すると、Google Cloud Storageオブジェクトの読み書きが容易になり、アプリケーションでデータオブジェクトを作成して提供することができます。これらのオブジェクトはCloud Storageのバケットに保存されますが、Google Cloud Storage APIを通じてGoogle App Engineアプリケーションによって追加でアクセスできます。 RESTfulインターフェイスを使用するか、このドキュメントで説明するGoogle App Engineアプリケーション用のGoogle Cloud Storage Python APIを使用して、Google Cloud Storage APIとやりとりすることができます。価格設定について


無料クォータ:5ギガバイトのストレージ(これはあなたのケースに最適です)
有料クォータ:まず0 - 1TB $ 0。085/GB /月

GAE billing docあたりとして

Introducing Google Cloud Storage

+3

GCSはAppEngine Datastoreのバックアップの問題を解決するものではありません。データベース全体を照会し、それをGCSにプッシュする必要があります。 –

+0

MapReduceは、Nick Johnsonがここで提案するhttp://stackoverflow.com/questions/7747453/back-up-appengine-database-google-cloud-storageとして使用できます。 –

+5

GCSはコスト問題の解決策ですか、それとも利用可能なものがありますか? – Sabuncu

2

、次の支払をする必要があります。

データストア:

1 query = 2 read operations 
1 Mio entity queries = 2 Mio read operations 
100k read operations = $0.07 

Cost: 1M entities queried = $0.14 

された帯域幅:

Price: $0.12/Gb 
Cost: 1Gb data with 50% overhead (network + metadata) = 1.5Gb x $0.12 = $0.18 

のバックエンドインスタンスを:

Price: $0.08/h smallest instance 
Cost: 1h = $0.08 

総費用:$0.40

bulkloaderは非常に非効率的であると思われます。独自のバックアップコードを書き直すこともできます。これは、関係のない種類のエンティティが1つしかない場合は、簡単に行う必要があります。

+1

私は、自分の管理ツールを使用してバックアップデータストアにデータを書き戻していたときに、書き込みコストが適用され、読み込みコストではなくなるため、コストが発生していると指摘しました。 – Yasser

2

私は、あなたのアプリのデータを読み込むのではなく、別のアプリにデータを書き込むためのコストの大半を占めています。データモデルに応じて、エンティティをデータストアに書き込むコストは、最初にそのデータストアを読むコストの100倍に達することがあります。

とにかくバックアップがほとんど復元されなかったので、代わりにバックアップをBlobstoreに保存することをお勧めします。バイトストリームにバックアップするエンティティをピックルし、ストリームをそれぞれ1 MBのチャンクに分割し、write them all into the blobstoreに分割します。

ブロブストアにデータを書き込むにはまだデータストアの書き込みコストがかかりますが、this StackOverflow answerに基づいて、ブロブストアエンティティの保存につき12回の書き込み操作が行われているようです。各ピクルされたエンティティのサイズが〜2KBで、各エンティティのデータストアへの書き込みあたりの書き込みコストが100であると仮定すると、これは書き込みコストの99.97%の節減を表します。

5

あなたが今ヤセルによって溶液を見つけたが、Googleから、ここで終わる他の誰のために、ここで更新の答えだベット:

AppStoreの管理でバックアップオプションは、データストアとクラウドの両方をサポートするようにアップグレードされましたストレージ。また、mapreduceを使用してバックアップを実行するため、クエリがシステム上でより軽くなります。

関連する問題