我正在为谷歌应用程序引擎开发一个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 倍以上。
有没有好的方法来缓存结果?我的意思是,一旦过了一个小时,计数器就不会再改变了。将每次点击保存在新对象中是否有缺点?
最佳答案
您的解决方案将会起作用 - 只需使用任务队列将分片记录聚合成漂亮的、易于报告的摘要记录即可。
关于python - 在 Google AppEngine 中使用分片计数器存储每小时的点击次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943471/