【问题标题】:In a Feeds architecture(like Facebook news or Twitter), how to make the feeds counts consistent with the feeds lists' length?在 Feed 架构中(如 Facebook 新闻或 Twitter),如何使 Feed 计数与 Feed 列表的长度保持一致?
【发布时间】:2015-04-23 03:39:49
【问题描述】:

我正在设计一个 Feeds 系统,一个人可以发布新闻,其他人可以看到彼此的新闻,就像 Twitter 一样。

现在我将新闻保存在 HBase 中,并将它们缓存在 Redis 中。这种方法有 O(1) 的插入、更新和删除,但“计数”很难实现:

如果我在 Redis 中保存一个单独的计数,并在插入/删除时增加/减少它,该值很容易与 Hbase 中的实际列表长度不一致:网络上的一个单一故障或其他一些异常可能会使价值受委屈。

如果我从 Hbase 获得计数,这非常耗时。

我应该做出什么样的设计选择?

【问题讨论】:

    标签: facebook twitter redis hbase feed


    【解决方案1】:

    HBase 提供对原子计数器的支持:无需在 Redis 中维护计数并依赖多个系统,您只需将 HBase 用于所有事情(实时)。

    只需插入帖子,如果一切正常,就增加计数器。您甚至可以使用多个计数器来跟踪帖子总数 + 每天、每周、每月、每年的帖子......这是一个非常强大的功能。

    如需了解更多信息,HBase Book 有几页专门介绍计数器,您也可以查看increment example

    【讨论】:

    • 谢谢!一定会调查 HBase 计数器!
    【解决方案2】:

    如果您选择使用 Redis,我建议使用其中一种数据结构。您可以将提要存储在列表或排序集中,它们可以以 O(1) 或 O(log(N)) 的形式返回它们的长度。而且,如果您负担不起查询 O(log(N)),您可以在每次插入排序集中时自动缓存通知计数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      相关资源
      最近更新 更多