【问题标题】:Store hourly clicks with sharded counter in google appengine在谷歌应用引擎中使用分片计数器存储每小时点击次数
【发布时间】: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


    【解决方案1】:

    您的解决方案将起作用 - 只需使用任务队列将您的分片记录聚合成漂亮、便于报告的摘要记录。

    【讨论】:

    • hmm...即使负载很重,任务队列也能正常工作吗?超过 100 个请求/秒?
    • 我通过使用任务队列和添加每小时报告模型解决了这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-10-21
    • 2013-05-17
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多