在Feeds架构(如Facebook新闻或Twitter)中,如何使Feed数量与Feed列表的长度一致?

时间:2015-04-23 03:39:49

标签: facebook twitter redis hbase feeds

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

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

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

如果我从Hbase获得计数,那就太费时了。

我应该选择哪种设计?

2 个答案:

答案 0 :(得分:0)

HBase提供对原子计数器的支持:不是在Redis中维护计数,而是依赖于多个系统,你可以将HBase用于所有事情(实时)。

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

有关详细信息,HBase Book有一些专门用于计数器的页面,您也可以查看increment example

答案 1 :(得分:0)

如果您选择使用Redis,我建议使用其中一种数据结构。您可以将Feed存储在列表或排序集中,并且可以在O(1)或O(log(N))中返回它们的长度。如果您无法负担查询O(log(N)),则可以在每次插入有序集时以原子方式缓存通知计数。