我正在开发一个用于谷歌应用引擎的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多倍。
是否有一种缓存结果的好方法?我的意思是,一旦一小时过去,柜台就不会再改变了。保存新对象中的每次点击都有缺点吗?
答案 0 :(得分:1)
您的解决方案将起作用 - 只需使用任务队列即可将分片记录聚合成精美,易于报告的摘要记录。