由于数据不断增加,我正在从mysql迁移到hbase。
我正在为有效的访问模式设计rowkey。
我想实现3个目标。
我有4个属性可供选择
我的rowkey应该如何有效地获取行?
由于
答案 0 :(得分:1)
假设您通过电子邮件进行主访问,则可以将主表密钥设为 电子邮件+反向时间+ item_id(假设item_id为您提供唯一性)
你可以有一个额外的“索引”表,其中包含电子邮件+ item_type +反向时间+ item_id和电子邮件+ item_id作为映射到第一个表的键(因此通过这两个步骤进行检索)
答案 1 :(得分:0)
就连续的行键而言,你可能已朝着正确的方向前进:无论如何,你的帖子都会想到以下内容:
分区密钥可能包括您的反向时间戳加上最常查询的自然密钥 - 这是电子邮件吗?让我们假设如此:然后选择根据两者中的哪一个(反向时间戳与电子邮件)提供前缀,提供最平衡/非偏斜的数据分布。这使您的地区服务器更加快乐。
根据记录的更均衡分布进行选择: 反向时间戳加上最常查询的自然键 例如reversetimestamp电子邮件 或email-reversetimestamp
以这种方式,您将避免在您的区域服务器上发现热点。
要在附加(辅助)索引上获得良好的性能,但尚未“融入”hbase:它们有一个设计文档(在wiki中查看SecondaryIndexing)。
但你可以通过以下两种方式建立自己的方式:
a)使用协处理器将item_type编写为rowkey,以使用包含原始列的列分隔tabole(user_email-reverse timestamp(或反之亦然)事实表rowke
b)如果没有发出磁盘空间和/或行很小,只需继续复制第二行(和item-id case的第三行)表中的整行。