2010-08-22 51 views
9

我有一个应用程序,主实体为Story,用户可以为每个故事投票。每个投票增加一个vote_count的故事。如何在使用分片计数器时使用计数器进行排序

我很担心写故事的争用,所以我打算使用每个故事的sharded counter来跟踪投票。

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

我最初的想法是定期运行一个任务,读取计数器值并更新实际故事的属性。通过投票的查询结果稍微过时就没问题。

回答

2

这听起来像你可能会做一些过早的优化。我会跳过分片柜台,直到你明显需要它们。如果你确信你会的话,那么一定要从他们开始。至于运行周期性任务和缓存结果的每个故事属性,这可能是另一个不成熟的优化。

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

+1

重新过早优化:我同意这可能是一个没有显示写入争用的新应用程序的矫枉过正,但考虑这是一个学习问题,并假设该应用程序将以每秒10次写入计数器。 – cope360 2010-08-22 22:31:22

+0

这是一个有趣的问题。我以前从来没有听说过分片柜台,所以我期待着更多的回应。 – 2010-08-22 22:55:29

+0

如果你想查看它们的工作方式,我添加了一个问题链接。 – cope360 2010-08-22 23:02:38

1

定期添加数据可能是一个很好的策略来对付计数器的分散分散。

您也可以尝试其他策略没有碎片计数,如已在别处描述:

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

(有你保持在内存缓存的计数器,并定期刷新累积值数据存储)

您的应用轻微计数错误有多关键?