假设hbase表中有数十亿行。此表中的行更改缓慢,这意味着将有新的行键,并且一些行键将被删除。
我每行收到很多活动。但是,很少有行没有与之关联的任何事件。
最后,我要报告尚未收到任何事件的行。
我天真的解决方案是引入一个cf:c,它持有一个标志,每次我看到它的事件时都将标志设置为1。然后对表进行完整扫描,查找缺少列值的行键。这看起来像是一种浪费,因为我将在100亿行中查找一些行键(我们谈论的是100或低1000)。
有没有一种聪明的方法来设计hbase模式,以便快速找到缺少事件的行键(而不必遍历每一行)?
1条答案
按热度按时间h5qlskok1#
如果我理解正确,您有一个行键xyyyyzzz1。。。xyyyyzzzzn。有些行有事件,其他行没有事件。
c
是你的旗帜,知道事件是否存在,你有巨大的数据。hbase的经验法则:
RowFilter
s总是比列值过滤器更快、更有效(要搜索该标志,需要全表扫描)。扫描整个表以查找缺少的事件(列值筛选器)的方法将导致全表扫描,而且效率低下。
结论:您必须使用行键过滤器来扫描如此大的表。
所以我建议你把旗子写在行键上。例如:
0--表示没有事件1--是否有事件
xyyyyzzzz1\u 0//没有事件的行
xyyyyzzzz1_1//有事件的行
现在您可以使用模糊行过滤器来捕获丢失的事件行并获取报告。
我回答了你的另一个问题
是否有一个聪明的hbase模式来帮助发现丢失的值?
从我使用hbase的经验来看,没有这样的事情。