0

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

我正在设计高效访问模式的行键。

我想实现3个目标。

  1. 获取电子邮件地址的所有结果
  2. 获取电子邮件地址 + item_type 的所有结果
  3. 获取特定电子邮件地址 + item_id 的所有结果

我有4个属性可供选择

  1. 用户电子邮件
  2. 反向时间戳
  3. 物品种类
  4. item_id

我的 rowkey 应该是什么样子才能有效地获取行?

谢谢

4

2 回答 2

1

假设您的主要访问是通过电子邮件,您可以将主表键作为电子邮件 + 反向时间 + item_id(假设 item_id 为您提供唯一性)

您可以有一个附加的“索引”表,其中 email+item_type+reverse time+item_id 和 email+item_id 作为映射到第一个表的键(因此通过这些检索是一个两步过程)

于 2013-03-04T04:59:42.773 回答
0

就连接的行键而言,也许您已经朝着正确的方向前进:无论如何,您的帖子都会想到以下内容:

分区键可能由您的反向时间戳加上最常查询的自然键组成 - 会是电子邮件吗?让我们假设:然后选择根据两者中的哪一个(反向时间戳与电子邮件)制作前缀,以提供最平衡/非偏斜的数据分布。这使您的区域服务器更快乐。

根据记录的更好平衡分布进行选择:反向时间戳加上最常查询的自然键,例如 reversetimestamp-email 或 email-reversetimestamp

这样,您将避免在您的区域服务器上出现热点。.

为了在附加的(二级)索引上获得良好的性能,这还没有“融入”hbase:他们有一个设计文档(在 wiki 中的 SecondaryIndexing 下查看)。

但是您可以通过以下几种方式构建自己的:

a) 使用协处理器将 item_type 编写为 rowkey,以将 tabole 与包含原始 (user_email-reverse timestamp (或反之亦然) 事实表 rowke 的列分开

b)如果磁盘空间没有问题和/或行很小,请继续并在第二个(对于 item-id 情况下为第三个)表中复制整行。

于 2013-03-02T23:42:17.590 回答