2016-11-20 82 views
2

我是Hbase的新手。需要帮助, 我有一个Hbase中的一些数据表。Hbase:自动增量列

Id Name Address 
1 john XX-XX 
2 mike XXX-XX 

Id应自动递增。现在我必须将数据插入到表一样,如果我们插入10记录Id应增加至12像

Id Name Address 
1 john XX-XX 
2 mike XXX-XX 
3 foo XXXX 
... 
... 
12 booo xxx 

可能觉得在HBase的序列发生器。 有人可以帮助我的代码。

+0

你在shell或java代码中工作吗? –

+0

java代码。我们可以使用hbase中的计数器概念吗?如果是这样,我们该怎么做。 – vikv

+0

阅读有关rowkeys及其在整个地区服务器上的分布情况,以及顺序行键将被视为热点区域等的差异等。您可以使用任何具有hbase驱动程序的编程语言为列系列创建一个连续值。另请阅读回答这里和问题可以重复这个 - http://stackoverflow.com/questions/26890944/hbase-auto-increment-any-column-row-key –

回答

2

HBase没有序列生成器。正如Sergey的评论,不建议使用序列作为行键。面对这样的需求,应该仔细分析。如果你确实需要这样的话,推荐使用salted key approach

HBase确实支持可用于生成序列的全局计数器(increment actions)。但是,这些不能以原子方式用于为正在添加的行生成键值(您必须增加并获取值,然后放入新行)。因此,如果后续放置失败并且您有2个RPC,则可以获得差距。

当我们以这种方式使用计数器时,我们使用盐键,接受可能发生的差距,并通过块递增以避免每个所需密钥的RPC。

+0

计数器:https://cloudfront.blogspot。 fr/2012/06/hbase-counters-part-i.html? –

+0

是的,你可以使用一个计数器,但是这仍然会导致错误的密钥分配,并且意味着你有一个2-pass更新(一个获取序列ID,一个使用它),这是性能打击并且在密钥中留下了潜在间隙如果第二次更新失败,则使用(这可能无关紧要)。 –

+0

我同意,这是错误的密钥分配。这仍然意味着HBase确实有序列生成器,可能是在原始答案之后添加的? –