hbase rowkey设计

时间:2013-03-02 18:42:04

标签: nosql hbase

由于数据不断增加,我正在从mysql迁移到hbase。

我正在为有效的访问模式设计rowkey。

我想实现3个目标。

  1. 获取电子邮件地址的所有结果
  2. 获取电子邮件地址+ item_type的所有结果
  3. 获取特定电子邮件地址的所有结果+ item_id
  4. 我有4个属性可供选择

    1. 用户电子邮件
    2. 反向时间戳
    3. ITEM_TYPE
    4. ITEM_ID
    5. 我的rowkey应该如何有效地获取行?

      由于

2 个答案:

答案 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的第三行)表中的整行。

相关问题