用于读取和更新的HBase行键设计

时间:2014-10-11 21:51:35

标签: hadoop hbase bloom-filter

我试着了解为HBase Table设计密钥的最佳方法。

我的用例:

现在的结构

PersonID | BatchDate | PersonJSON

当修改关于此人的某些事情时,会将新的PersonJSON和新的批处理日期插入到Hbase中,以更新旧记录。每隔4个小时,对所有被修改的人进行扫描,然后将其推送到Hadoop进行进一步处理。

如果我的密钥只是personID,那么它非常适合更新数据。但是我的表现很糟糕,因为我必须在BatchData列上添加一个过滤器来扫描大于批日期的所有行。

如果我的密钥是像BatchDate | PersonID这样的复合密钥,我可以在行密钥上使用startrow和endrow并获取所有已修改的行。但是我会有很多重复,因为密钥不是唯一的,不能再更新一个人。

在行+ col(personid + batchdate)上的bloom过滤器是一个选项吗?

感谢任何帮助。 谢谢, 阿布舍克

2 个答案:

答案 0 :(得分:0)

除了PersonID作为rowkey的表之外,听起来你需要一个dual-write secondary index,BatchDate作为rowkey。

另一个选项是Apache Phoenix,它提供对二级索引的支持。

答案 1 :(得分:0)

我通常做两个步骤: 创建表一只是键是BatchDate + PersonId的组合,值可以为空。 像往常一样创建表二。关键是PersonId值是整个数据。

对于日期范围查询:查询表首先获取PersonIds,然后使用Hbase批量获取API按批次获取数据。它会很快。