1

AppEngine とアプリケーション用のデータストアを使用しています。ここには、エントリのリストを含む適度に大きな情報のテーブルがあります。

レポートのエントリのリストを要約して、各エントリが何回出現するかを指定したいと思います。たとえば、SQL では通常select distinct、列に を使用し、すべてのエントリをループして を使用しますselect count(x) where value = valueOfEntry

カウント部分は簡単にできますが、明確な問題は「問題」です。これに近いリモートで見つけることができる唯一のソリューションは MapReduce であり、ほとんどのサンプルは Python に基づいています。このブログ エントリは非常に役に立ちますが、reduce 部分よりも古いため、多少古くなっています。次に、ここにビデオと、私が見つけることができたいくつかのリソースがあります。

ただし、別のエンティティに書き込むことができず、削減ステージがない場合、サマリーテーブルを作成する方法を理解するのは本当に難しいですか?

これは些細で簡単に達成できるように思えますが、非常に多くの手間がかかります。すべての摩擦なしに AppEngine にプラグインできるサンプルまたは既存のレポート エンジンはありませんか?

BigQueryを見ましたが、アプリ エンジンからそのストアにデータを移動するのは非常に面倒なようです。データを CSV としてダウンロードしようとしましたが、それに関しても多くの問題が発生しました。長期的には実用的な解決策のようにも思えません。

4

2 に答える 2

1

Java の mapreduce の概念の一部を説明するドキュメントがあります。不完全ではありますが、ほとんどのアーキテクチャを python バージョンと共有しています。そのドキュメントには、データストアから読み取る完全な Java サンプル mapreduce appへのポインタもあります。

結果を書き込むには、Outputclassを指定します。結果を新しいデータストア エンティティに書き込むには、独自の出力クラスを作成する必要があります。ただし、ブロブストアを使用することもできます (BlobFileOutput.java を参照)。

別の方法として、エンティティの 1 つを書き込むたびに、別のエントリを EntityDistinct データ モデルに書き込む/更新することもできます。

複雑なレポートを実行する予定があり、すべてのニーズを今すぐ予測できる場合は、Big Query をもう一度検討することをお勧めします。BigQuery は非常に強力で、非常に大規模なデータセットで完璧に機能します。mapreduce を使用して Big Query にログを読み込む Python プロジェクトであるhttp://code.google.com/p/log2bq/を調べることができます。または、時々すべての新しいエンティティを取得して Big Query に移動する cron ジョブを使用することもできます。

摩擦に関連して、これは SQL を使用しないデータベースであり、いくつかの利点がありますが、SQL とは本質的に異なる点があることを覚えておいてください。データセットのサイズが限られている場合は、いつでもGoogle Cloud SQLを使用できますが、レプリケーションとフォールト トレラント機能が失われることに注意してください。

于 2012-09-10T21:10:36.887 に答える
1

これが役立つと思います:http://jjmpsj.blogspot.ro/2008/05/appengine-output-tricks-reporting.html?m=1

于 2012-09-10T21:19:38.073 に答える