2011-12-27 3 views
3

私はデータストアに中間作業を格納する大規模なパイプラインをGoogleアプリケーションエンジンに持っています。これは私の毎日のクォータの書き込みをすぐに満たします。memcacheに保存されているdbハッシュテーブルをcronジョブと組み合わせてGoogleアプリケーションエンジンに書き込むDatastore

代わりに、パイプラインがすべての中間結果を格納し、ハッシュテーブルdbのすべてのエントリをループしてデータストアに書き込むcronジョブを持つmemcacheに格納されているハッシュテーブルdbオブジェクトを考えています。私はその後、私のデータを読み込むためにdbオブジェクトを使用し、そこに何かがなければ私はデータストアに行くでしょう。

これを行うライブラリはありますか?私は主にJavaに興味がありますが、Pythonも機能します。間違っているかもしれないことの考えはありますか?私は物事がmemcacheから一掃されるかもしれないことを知っていますが、期待されるパフォーマンスの向上はどうでしょうか?

+0

主な考え方は、memcacheが保証されておらず、予測できないことです。キャッシュされたままのデータを管理することはできません。あなたはおそらくメモリ上で作業を行うことで逃げることができますが、キャッシュ内のデータ消失から回復するためには間違いなくフォールバックが必要です。 – Sologoub

+0

一つの明白な点を確認する:検索で使われないすべてのプロパティに対して 'index = False'を宣言しましたか?既定でインデックスされるプロパティは、それぞれ2つのインデックス書き込みを発生させます。それらは合計する。 –

答えて

0

あなたのケースを読んで、私はObjectify for GAE/Jがあなたの必要性に適していると考えています。これにはGlobal Cache optionがあり、memcacheのデータストアエンティティをバックアップしてデータストアへの読み取り回数を減らします。

キャッシュはput/get/delete操作でのみ機能するため、クエリはキャッシュされません。また、put/delete操作は、キャッシュされたエンティティを自動的に更新します。

編集:askerからの説明の後に、askerが必要とするのは、読み取りバッファではなく書き込みバッファのmemcacheであるため、私の提案はもはやそのユースケースでは無効です。

+1

私はmemcacheが予測できないことを理解していますが、私はそのチャンスを喜んで受け取ります。私は、http://bjk5.com/post/11766098283/app-engine-performance-hacks-youll-probably-neverの "データストアで待たずに長期間の永続性"として説明されているソリューションに似た何かを探しています。 –

+0

ああ、あなたはあなたのput操作をバッファリングしたいと思いますし、バッファがいっぱいになると書き込んだだけですか?これで同じ数の書き込み制限を使用しないのですか?どのようにあなたの書き込み回数を減らすでしょうか? –

+0

いいえ、その間にすべての更新はバグ(memcache)で行われるため、エンティティごとに1つの書き込みに対してのみ課金されます。 私のワークフローでは、FacebookのグラフAPIから素材をダウンロードし、エンティティの値を計算して更新し、最終データを書き留めました。 –

関連する問題