我正在尝试了解为hbase表设计键的最佳方法。
我的用例:
现在的结构
personid | batchdate | personjson
当修改某人的某些内容时,会在hbase中插入一个新的personjson和一个新的batchdate来更新旧记录。每4小时扫描一次所有被修改的人,然后将其推送到hadoop进行进一步处理。
如果我的钥匙只是拟人的话,它很适合更新数据。但是我的性能很差,因为我必须在batchdata列上添加一个过滤器来扫描所有大于批处理日期的行。
如果我的键是batchdate | personid这样的复合键,我可以在行键上使用startrow和endrow,并获取所有修改过的行。但我会有很多重复,因为关键是不唯一的,不能再更新一个人。
行+列(personid+batchdate)上的bloomfilter是一个选项吗?
感谢您的帮助。谢谢,阿披实
2条答案
按热度按时间wooyq4lh1#
我通常会做两个步骤:创建一个表,表的键是batchdate+personid的组合,值可以是空的。像平常一样创建表2。关键是人名值是整个数据。
日期范围查询:先查询表1得到人名,然后使用hbase batch get api按批次得到数据。会很快的。
hzbexzde2#
除了personid作为rowkey的表之外,听起来还需要一个双写辅助索引,batchdate作为rowkey。
另一个选择是apachephoenix,它提供对二级索引的支持。