使用谷歌appengine中的分片计数器每小时点击一次

时间:2011-08-04 14:44:07

标签: python google-app-engine bigtable sharding

我正在开发一个用于谷歌应用引擎的python应用程序,它使用分片计数器计算不同类型的点击次数。

我的问题是,我希望从点击次数中获取按小时划分的统计信息,而不仅仅是所有点击次数的总和。

实现这一目标的一种方法是在分片的索引中添加时间戳:

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 个答案:

答案 0 :(得分:1)

您的解决方案将起作用 - 只需使用任务队列即可将分片记录聚合成精美,易于报告的摘要记录。