我正在设计一个feeds系统,一个人可以发布新闻,其他人可以看到彼此的新闻,就像twitter一样。现在我将新闻保存在hbase中,并将其缓存在redis中。这种方法有o(1)insert、update和remove,但是“count”很难实现:如果我在redis中保存一个单独的计数,并在插入/删除时增加/减少它,那么这个值很容易与hbase中的实际列表长度不一致:网络上的一次故障或其他异常都会使该值出错。如果我从hbase得到计数,那是非常耗时的。我应该做什么样的设计选择?
c3frrgcw1#
如果您选择使用redis,我建议您使用它的一种数据结构。您可以将提要存储在列表或排序集中,它们可以以o(1)或o(log(n))的形式返回其长度。如果您负担不起查询o(log(n)),您可以在每次插入排序集时自动缓存通知计数。
2ic8powd2#
hbase提供了对原子计数器的支持:您不必在redis中维护计数,也不必依赖于多个系统,只需将hbase用于所有操作(实时)。只要插入柱子,如果一切正常,增加计数器。你甚至可以有多个计数器来跟踪每天、每周、每月、每年的帖子总数。。。这是一个非常强大的功能。有关更多信息,hbase手册有几页专门介绍计数器,您还可以查看一个增量示例。
2条答案
按热度按时间c3frrgcw1#
如果您选择使用redis,我建议您使用它的一种数据结构。您可以将提要存储在列表或排序集中,它们可以以o(1)或o(log(n))的形式返回其长度。如果您负担不起查询o(log(n)),您可以在每次插入排序集时自动缓存通知计数。
2ic8powd2#
hbase提供了对原子计数器的支持:您不必在redis中维护计数,也不必依赖于多个系统,只需将hbase用于所有操作(实时)。
只要插入柱子,如果一切正常,增加计数器。你甚至可以有多个计数器来跟踪每天、每周、每月、每年的帖子总数。。。这是一个非常强大的功能。
有关更多信息,hbase手册有几页专门介绍计数器,您还可以查看一个增量示例。