【发布时间】:2011-10-20 02:01:50
【问题描述】:
我正在为谷歌应用引擎开发一个 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-app-engine bigtable sharding