2011-08-04 7 views
1

私は、シャードされたカウンターで異なる種類のクリック数をカウントする、Googleのアプリケーションエンジン用のPythonでアプリケーションを開発しています。Google Appengineのシャードカウンターで時間単位のクリックを保存

私の問題は、すべてのクリックの総計だけでなく、クリック数から統計を分割することです。それを達成するために

一つの方法は、破片のインデックスにタイムスタンプを追加することです:

def txn(): 
    index = random.randint(0, config.num_shards - 1) 
    shard_name = code + str(index) # + timestamp without seconds 
    counter = ClickCounter.get_by_key_name(shard_name) 
    if counter is None: 
    counter = ClickCounter(key_name=shard_name, code=code) 
    counter.click += 1 
    counter.put() 
db.run_in_transaction(txn) 

問題は、月のすべての破片をカウントする700以上の倍遅くなることだろう。

結果をキャッシュする良い方法はありますか? 1時間に1度が過ぎると、カウンターはそれ以上変わることはありません。新しいオブジェクトのすべてのクリックを保存するという欠点はありますか?

答えて

1

あなたの解決策はうまくいきます。タスクキューを使用して、断片化されたレコードを見やすくレポートに適した要約レコードに集約してください。

+0

hmm ...重い負荷でもタスクキューが機能しますか? 100リクエスト/秒以上? – Ragnar

+0

タスクキューを使用し、時間別レポートモデルを追加して解決しました。ありがとう! – Ragnar

関連する問題