我试着了解为HBase Table设计密钥的最佳方法。
我的用例:
现在的结构
PersonID | BatchDate | PersonJSON
当修改关于此人的某些事情时,会将新的PersonJSON和新的批处理日期插入到Hbase中,以更新旧记录。每隔4个小时,对所有被修改的人进行扫描,然后将其推送到Hadoop进行进一步处理。
如果我的密钥只是personID,那么它非常适合更新数据。但是我的表现很糟糕,因为我必须在BatchData列上添加一个过滤器来扫描大于批日期的所有行。
如果我的密钥是像BatchDate | PersonID这样的复合密钥,我可以在行密钥上使用startrow和endrow并获取所有已修改的行。但是我会有很多重复,因为密钥不是唯一的,不能再更新一个人。
在行+ col(personid + batchdate)上的bloom过滤器是一个选项吗?
感谢任何帮助。 谢谢, 阿布舍克
答案 0 :(得分:0)
除了PersonID作为rowkey的表之外,听起来你需要一个dual-write secondary index,BatchDate作为rowkey。
另一个选项是Apache Phoenix,它提供对二级索引的支持。
答案 1 :(得分:0)
我通常做两个步骤: 创建表一只是键是BatchDate + PersonId的组合,值可以为空。 像往常一样创建表二。关键是PersonId值是整个数据。
对于日期范围查询:查询表首先获取PersonIds,然后使用Hbase批量获取API按批次获取数据。它会很快。