在feeds架构中(比如facebook新闻或twitter),如何使feeds计数与feeds列表的长度一致?

vyu0f0g1  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(261)

我正在设计一个feeds系统,一个人可以发布新闻,其他人可以看到彼此的新闻,就像twitter一样。
现在我将新闻保存在hbase中,并将其缓存在redis中。这种方法有o(1)insert、update和remove,但是“count”很难实现:
如果我在redis中保存一个单独的计数,并在插入/删除时增加/减少它,那么这个值很容易与hbase中的实际列表长度不一致:网络上的一次故障或其他异常都会使该值出错。
如果我从hbase得到计数,那是非常耗时的。
我应该做什么样的设计选择?

c3frrgcw

c3frrgcw1#

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

2ic8powd

2ic8powd2#

hbase提供了对原子计数器的支持:您不必在redis中维护计数,也不必依赖于多个系统,只需将hbase用于所有操作(实时)。
只要插入柱子,如果一切正常,增加计数器。你甚至可以有多个计数器来跟踪每天、每周、每月、每年的帖子总数。。。这是一个非常强大的功能。
有关更多信息,hbase手册有几页专门介绍计数器,您还可以查看一个增量示例。

相关问题