是否有一个聪明的 HBase 模式来帮助发现缺失值?
Posted
技术标签:
【中文标题】是否有一个聪明的 HBase 模式来帮助发现缺失值?【英文标题】:Is there a clever HBase Schema to Aid with Discovering Missing Value? 【发布时间】:2017-01-25 21:33:48 【问题描述】:假设我的 HBase 表中有数十亿行。此表中的行变化缓慢,这意味着会有新的行键和一些行键被删除。
我每行收到很多事件。但是,将有非常少 行没有与之关联的任何事件。
最后,我想报告未收到任何事件的行。
我天真的解决方案是引入一个 cf:c 来保存一个标志,每次我看到它的事件时都将标志设置为 1。然后对表进行全扫描,查找缺少列值的行键。这似乎是一种浪费,因为我将查看 100 亿行以发现少数行键(我们谈论的是 100 或低 1000)。
是否有一种巧妙的方法来设计 hbase 架构,以便可以快速找到丢失事件的行键(无需遍历每一行)?
【问题讨论】:
【参考方案1】:如果我理解正确,您有一个行键 xxxxyyyyzzzz1 ... xxxxyyyyzzzzn。
您有某些行的事件,而其他行没有事件。
c
是您了解事件是否存在以及您拥有大量数据的标志。
HBase 中的经验法则:RowFilter
s 总是比列值过滤器更快、更高效(要搜索该标志,需要进行全表扫描)。
您扫描整个表以查找丢失事件的方法(列值过滤器)将导致全表扫描并且效率不高。
结论:你必须使用行键过滤器来扫描这么大的表。
所以我建议你在行键中写入标志。例如:
0 -- 没有事件 1 -- 是否有事件
xxxxyyyyzzzz1_0 // 没有事件的行
xxxyyyyzzzz1_1 // 包含事件的行
现在您可以使用模糊行过滤器来捕获丢失的事件行并生成报告。
Option 2 of your another question which was answered by me
是否有一个聪明的 HBase 架构来帮助发现缺失值?
从我对hbase的经验来看,没有这样的事情。
【讨论】:
感谢您的建议...一个问题当有事件发生时如何更改行键?那么我是不是从row-key-0开始,当我得到一个事件时,删除row-key-0并添加row-key-1? 是的,这就是我的意思,0 表示没有事件 1 表示存在事件。希望有用 不意味着表上有数十亿的删除吗?我认为没有办法更新行键? 好吧,我想你误解了我的意思。在插入行时(第一次)本身以上述方式设计行键,然后根据行键后缀扫描丢失的行。 “我认为没有办法更新行键?”是的,行键无法更新。 您好,我们可以私聊详细讨论以上是关于是否有一个聪明的 HBase 模式来帮助发现缺失值?的主要内容,如果未能解决你的问题,请参考以下文章