使用分片计数器时如何按计数器排序

时间:2010-08-22 21:42:23

标签: google-app-engine sharding

我有一个主要实体是Story的应用程序,用户可以为每个故事投票。每个投票都会为故事增加vote_count

我担心会对故事发表争论,因此我计划在每个故事中使用sharded counter来跟踪投票。

现在我的问题是:我怎样才能获得按投票数排序的故事列表?例如:显示50个最高票数的故事。

我最初的想法是定期运行任务,读取计数器值并更新实际故事的属性。通过投票查询的结果可能会略微过时。

2 个答案:

答案 0 :(得分:2)

听起来你可能正在做一些过早的优化。我会跳过分片计数器,直到你明显需要它们为止。如果你非常确定你会,那么一定要从它们开始。至于运行周期性任务和缓存每个故事的属性结果,这可能是另一个过早的优化。

我没有谷歌应用引擎的直接经验,所以希望有人可以分享一些信息。

答案 1 :(得分:1)

定期添加数据可能是对抗计数器分片分散的好策略。

你也可以尝试其他策略来计算没有分片的方法,如其他地方所述:

http://blog.notdot.net/2010/04/High-concurrency-counters-without-sharding

(您将计数器保存在内存缓存中,并定期将累计值刷新到数据存储区)

您的应用对于轻微计算错误有多重要?