9

私はスポーツ統計 Web サイト (究極のフリスビー) を開発する初期段階にいます。Google App Engine が私に適しているかどうか、意見をお聞かせください。

私は Django を使用して Python で作成しており、何年も標準の RDBMS に慣れてきましたが、このサイトは長期的なプロジェクトであり、非常に大量のデータが予想されるため、GAE データストアが提供する「無限」のスケーリングが必要です。データベースへのクエリの大部分は非常に標準的な結果を返すため、データストアが論理的な選択のように見えます。ただし、将来的には非常に複雑なクエリを作成して、新しい統計メトリックを作成したり、単に興味深い結果を作成したりしたいと考えています. 将来的にはこれをたくさん行う予定ですが、データがすでに収集されるまで、これらのクエリが何であるかはわかりません。

たとえば、野球の統計アナリストが次のようなばかげた統計を発表するのをよく目にします。日々"。将来的には、どんなクエリでも柔軟に作成できるようにしたいと思います。:)

ただし、bigtable のような非リレーショナル データベースでは、事前に冗長データを含むモデルを考え出す必要があり、すべての作業はフェッチではなく挿入で行われるという印象を受けます。照会する必要があるほぼすべてのデータを含む django モデルを既に構築しましたが、1 年か 2 年後にどんな非正規化モデルが必要になるかわかりません。したがって、将来的に複雑なクエリを作成することは、GAE データストアでは非常に難しくなり、Python で処理する前にサーバーから大量の情報を引き出す必要があると思います。

グーグルアプリエンジンのデータストアは、私がやりたいことに対して単に間違っていますか? または、何かが足りないだけです。よろしくお願いします!

更新: これまでの応答に感謝します。これらの複雑なクエリの多くは、ユーザーに実行してもらいたいクエリであるため、オフライン データベースは実際にはオプションではないことにも言及する必要があることを認識しています。たとえば、ユーザーは、特定のゲームまたはシーズン中に、特定の 2 人のプレーヤーが同時にフィールドにいるときのプレーのさまざまな統計を確認できる必要があります。これらのクエリは、標準の集計統計ほど頻繁ではありませんが、定期的に発生します。

リレーショナル データベースと GAE データストアがあると便利ですが、django はデフォルトで複数のデータベースをまだサポートしておらず、ソリューションをまとめてパッチを適用するのは困難で面倒に思えます。Eric Florenzano は、両方とも django モデルを使用する 2 つのデータベースに対する優れたソリューションを提供していますが、GAE データストアを使用する場合は、代わりにアプリ エンジンの db モデルを使用する必要があります。そして、彼がこの複雑な問題に対して行ったような優れた解決策を考え出すことは、現時点で私のスキルレベルを少し超えています.

現在、私のお気に入りの 2 つのオプションは、GAE タスク キューを使用して難しいクエリを実行するか、webfaction などのより標準的な Web ホストにアクセスし、後でデータが大きくなり、パフォーマンスを向上させる必要がある場合にテーブルを非正規化することです。

4

4 に答える 4

6

あなたが言及したまさにその理由から、ビッグテーブルタイプのストレージは統計アプリケーションにはあまり適していないと思います。しかし、これはあなたがしなければならない古典的なトレードオフです。非常に複雑なクエリの柔軟性を使用していることに気付くことはめったにありませんが、そもそもデータベースにあるはずのないものに対して、より専門的なソリューションを考え出すことを余儀なくされたことは何度もあります。

RDBMS に固執する場合、たとえば Hibernates 永続化戦略とHibernate Shardsを使用して、論理パーティション分割と非正規化をかなり簡単に行うことができます。多少遅い処理に耐えられる場合は、bigtable タイプのストレージで SQL クエリを実行することもできます (たとえば、hadoop pig latinを参照)。

于 2009-11-10T20:16:41.420 に答える
2

GAE データストアは、RDBMS とはまったく別物です。リレーショナル DB では、次のように書くのは簡単です。

SELECT STDEV(player_score)
FROM Table
WHERE player_id = 1234
  AND game_date BETWEEN '2007-01-01' AND '2009-11-10'
  AND city <> 'London'

GAE クエリには多くの制限があります (こちらを参照)。そのため、これを翻訳するのは簡単ではありません。集計関数 (sum、stdev など) の場合、すべてのデータをアプリケーション層にプルして計算するか、データの挿入/更新ごとに更新される集計エンティティを維持する必要があります。

更新
UIとビジネスロジックにGAEを使用することを検討するかもしれませんが、事前に計算された集計と統計にGAEデータストアを使用するよりも、Microsoft SQL、AmazonのDB2、他の場所のMySQLなど、クラウド内の別の場所に別のリレーショナルDBを使用することを検討してください。したがって、統計は引き続き RDBMS で計算されますが、結果 (部分的な、事前に計算された統計) は GAE ストレージに格納されます。分析キューブのディメンション ストレージに似ています。

于 2009-11-10T20:32:44.860 に答える
0

Google の CloudSQL の使用に関する MindWire のリファレンスをサポートしたいと思います。

私の現在のプロジェクトは、主に Cloud SQL で実行されるより多くの SQL 指向のタスクを使用して、実際にはデータ ストアから動作します。

App Engine Python SDK のリファレンス ドキュメント

于 2013-03-09T17:51:08.300 に答える