2

単一の Google App Engine アプリケーションを複数の地域に展開する最善の方法を見つけようとしています。

同じコードが使用されますが、保存されるデータは各地域に固有です。動機付けとなる例としては、yelp.com や Urbanspoon などのハイパーローカル レビュー サイトが挙げられます。このサイトでは、レビュー対象のレストランやその他のビジネスが特定の地域に限定されています (boston.app.com、seattle.app.com など)。

いくつかのオプションは次のとおりです。

  1. 複数の GAE アプリケーションを作成し、それらの間でコードを複製します。

  2. 単一の GAE アプリケーションを作成し、すべてのリージョンのすべてのデータを同じデータストアに保存します。各モデルのリージョン識別子フィールドは、関連するリージョンを区切ります。

いくつかのトレードオフ:

  1. オプション 2 はますます非効率になるようです (スペース: すべてのモデルの各レコードのリージョン識別子を複製する; 時間: すべてのクエリの識別子でフィルタリング/インデックスを作成する)。

  2. オプション 1 では、リージョンごとにアプリ ID が必要ですが、GAE ではアカウントごとに 10 個のアプリしか許可されません。さらに、すべてのリージョンにコードをデプロイし、データストアを移行することは、管理が面倒なようです。

理想的な世界では、アプリケーション インスタンスは 1 つです。そのインスタンスから、サブドメイン間をルーティングし (ここのように)、サブドメインごとに個別のデータストアを持つことができました。しかし、GAE ではアプリケーションごとに 1 つのデータストアしか許可されないと思います。

この問題を解決する最善の方法についてアイデアを持っている人はいますか? または、私が考慮していないオプションはありますか?

御時間ありがとうございます!

4

2 に答える 2

2

アプローチ#2をお勧めします。ほとんどのデータベースとは異なり、ストレージ スペースは安価で (リージョン コードは短く)、データストアのパフォーマンスはサイズによって低下しません。また、単一のアプリを使用すると、管理とアップグレードが容易になり、TOS (課金を回避するためにアプリのシャーディングを禁止する) に関する問題を回避できます。

于 2009-09-29T21:29:31.167 に答える
1

ソースコードのリビジョン管理を使用する場合、同じコードを複数のアプリにプッシュすることはそれほど悪くありません。本格的なタグのみをGAEにプッシュできるようにするポリシーを設定できます。もう1つのオプションは、アプリケーションのバージョンをリビジョン番号と同じにすることです。

App Engineを使用すると、私(および他のほとんどの人)は常にモデルコード内からデータを移行します。GAEで一括移行を簡単に行うことはできません。通常の解決策は、コードでデータに遭遇したときにデータを移行することです。このようにして、アプリケーション間でモデルをほぼ同一に保つことができます。

そうは言っても、私はおそらくまだ統一されたアプリケーションを使用するでしょう。より将来性があります。ユーザーがLAIDとニューヨークIDに参加したい場合はどうなりますか?または、広告主があなたにあなた自身のデータでいくつかのマーケティングレポートを実行するための甘い取引を提供した場合はどうなりますか?

最後に、AppEngineでは数バイトのデータはそれほど重要ではありません。あなたのサイトが成長するにつれて、あなたはあなたが常に天井にぶつかることになることにすぐに気付くでしょうGAEの制限は、従来のWebサーバーと比較して非常に小さいため、とにかくそれらの制限内で作業する必要があります。たとえば、一度に取得できるのは1,000レコードのみです。したがって、アーキテクチャはすでに断片的なページングソリューションをサポートしています。したがって、レコード内の1つまたは2つの余分なフィールドについてはあまり心配しないでください。

于 2009-09-30T11:50:13.740 に答える