2

为简单起见,假设我有一个表,其中主键在逻辑上应该是长的。
目前,从我做的一个项目(使用关系数据库)继承,我有一个 IDMaker 类,它返回我使用(在那个项目中)作为主键的 long。

我说可以是因为据我了解,由于此 ID 是基于时间戳且单调递增的,因此它不是 HBase 行键的良好候选者。

现在,阅读

http://ikaisays.com/2011/01/25/app-engine-datastore-tip-monotonically-increasing-values-are-bad/ http://hbase.apache.org/book/rowkey.design.html
和Lars George 的《HBase:权威指南》第 9 章,

我看到“腌制”策略可以满足我的需要。这基本上为我的键添加了一个前缀,因此打破了单调系列。
现在的问题是:使用这样的策略,从这个 ids 开始:

1
2
3
4

假设这些密钥转到一个区域服务器,并像这样转换这些 id(前缀当然是一个例子)

0:1
7:2
9:3
a:4

我如何确定这四行仍然不会转到同一个区域服务器?换句话说,我怎么能确定我的前缀足以避免这里很好地描述了http://ikaisays.com/2011/01/25/app-engine-datastore-tip-monotonically-increasing-values-are -坏/

4

2 回答 2

2

我如何确定这四行仍然不会转到同一个区域服务器?换句话说,我如何确定我的前缀足以避免这里很好地描述的内容

您是否阅读了第 2.5.2.7 节。已在重要配置中进行托管拆分?

于 2012-11-03T07:45:27.803 回答
0

我如何确定这四行仍然不会转到同一个区域服务器?

您应该根据散列模式预先拆分表。

例如,如果您将使用 0-1-2-3-4-5-6-7-8-9-ABCDEF 进行腌制。您可以为该 hbase 表创建 16 个拆分。每个拆分应该有 0 作为开始 - 1 作为结束行,1 作为开始 - 2 作为结束行 .. 像这样。您可以从 hbase shell 或 java 代码执行此操作。我更喜欢 java,因为我可以使用 for 循环来创建许多拆分 :)

至于过早的优化,过多的拆分会影响您的性能。

于 2015-05-27T06:32:31.000 回答