为简单起见,假设我有一张表,其中主键在逻辑上应该很长 目前,继承自我所做的项目(即使用关系数据库)我有一个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章,
我看到“Salting”的策略可以满足我的需求。这基本上为我的键添加了一个前缀,因此打破了单调系列 现在的问题是:使用这样的策略,从这个ID开始:
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-bad/?
答案 0 :(得分:2)
如何确定四行不会仍然转到同一区域 服务器?换句话说,我怎么能确定我的前缀足够 避免在这里很好地描述
您是否阅读了第2.5.2.7节。已经在Important Configurations管理拆分?
答案 1 :(得分:0)
我怎样才能确定这四行还没有进入同一地区服务器?
您应该根据散列模式预分割表格。
例如,如果您将使用0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F进行腌制。您可以为该hbase表创建16个拆分。每个拆分应该有0作为开始 - 1作为结束行,1作为开始 - 2作为结束行..像这样。您可以从hbase shell或java代码执行此操作。我更喜欢java,因为我可以使用for循环来创建许多分割:)
对于过早优化,过多的拆分会影响您的性能。