我有一个主要实体是Story
的应用程序,用户可以为每个故事投票。每个投票都会为故事增加vote_count
。
我担心会对故事发表争论,因此我计划在每个故事中使用sharded counter来跟踪投票。
现在我的问题是:我怎样才能获得按投票数排序的故事列表?例如:显示50个最高票数的故事。
我最初的想法是定期运行任务,读取计数器值并更新实际故事的属性。通过投票查询的结果可能会略微过时。
答案 0 :(得分:2)
听起来你可能正在做一些过早的优化。我会跳过分片计数器,直到你明显需要它们为止。如果你非常确定你会,那么一定要从它们开始。至于运行周期性任务和缓存每个故事的属性结果,这可能是另一个过早的优化。
我没有谷歌应用引擎的直接经验,所以希望有人可以分享一些信息。
答案 1 :(得分:1)
定期添加数据可能是对抗计数器分片分散的好策略。
你也可以尝试其他策略来计算没有分片的方法,如其他地方所述:
http://blog.notdot.net/2010/04/High-concurrency-counters-without-sharding
(您将计数器保存在内存缓存中,并定期将累计值刷新到数据存储区)
您的应用对于轻微计算错误有多重要?