memcached可扩展性和高效的投票统计

时间:2010-09-24 05:27:06

标签: ruby-on-rails performance memcached

缓存可能在每秒都可能过期的环境中具有可扩展性。事实上,我的问题不仅仅是关于memcached的可扩展性,而是关于模型不断变化的情况以及扩展这种类型环境的最佳方式。有人可能会说,为什么缓存如果缓存每秒都过期。

在一个假想的应用程序中考虑这一点,人们将标记帖子发布为收藏夹,让我们只考虑有成千上万的人不断标记帖子最喜欢并创建一个喜欢的记录。每次插入时,都需要更新帖子视图,以显示有关帖子的当前统计信息,最喜欢的人数,用户最喜欢的数量等等。

我们认为这可以缓存,只显示每隔x分钟拍摄一次快照。但是有没有一种方法可以让它更实时地在轨道中使用?

1 个答案:

答案 0 :(得分:0)

尝试这样的算法:

  1. 使用+1投票
  2. 更新帖子的数据库记录
  3. 创建缓存值||为post fav count更新现有缓存+1
  4. 创建缓存值||更新用户收藏的现有缓存+1
  5. 由于缓存没有事务值,因此可能与当前数据库值不一致 -  可能发生罕见的并行读写竞争条件。但是这些不一致性将在高速缓存条目无效并且从DB重新计算值时过期。

    在上述情况下,缓存清扫操作可能每分钟甚至每小时执行一次 - 具体取决于统计数据的准确程度。请记住,您不会丢失任何内容 - 所有准确的数据都保存在数据库中。

    最重要的是用户可以看到投票的实时价值变化。 Memcached的读/写成本肯定低于DB,因为memcache只是多访问哈希存储而没有事务。