相关疑难解决方法(0)

没有分片的高并发计数器

这个问题涉及两个计数器的实现,这些计数器的目的是在没有分片的情况下进行扩展(在某些情况下可能会计算得不足):

  1. http://appengine-cookbook.appspot.com/recipe/high-concurrency-counters-without-sharding/(评论中的代码)
  2. http://blog.notdot.net/2010/04/High-concurrency-counters-without-sharding

我的问题:

  • 关于#1:memcache.decr()在延迟的交易任务中运行似乎有点矫枉过正.如果memcache.decr()在事务之外完成,我认为最坏的情况是事务失败,我们错过了计算我们减少的任何数量. 我是否忽略了这样做可能会发生的其他问题?
  • 这两种实现之间有何重大的权衡取舍?

以下是我看到的权衡:

  • 2不需要数据存储区事务.

  • 要获得计数器的值,#2需要数据存储区提取,而#1 通常只需要执行a memcache.get()memcache.add().
  • 递增计数器时,都会调用memcache.incr().#2会定期向任务队列添加任务,而#1以事务方式执行数据存储区get和put.#1也总是执行memcache.add()(以测试是否是将计数器持久保存到数据存储区的时间).

结论

(没有实际运行任何性能测试):

  • 1检索计数器通常应该更快(#1 memcache vs#2数据存储).虽然#1必须执行额外的操作memcache.add().

  • 但是,更新计数器时#2应该更快(#1数据存储区get + put vs#2排队任务).
  • 另一方面,对于#1,您必须对更新间隔更加小心,因为任务队列配额几乎比数据存储区或memcahce API小100倍.

python google-app-engine counter

14
推荐指数
1
解决办法
1768
查看次数

标签 统计

counter ×1

google-app-engine ×1

python ×1