hbase插入数据分析

数据写入过程:
client先根据rowkey找到对应的region和regionserver
client向regionserver提交写请求
regionServer找到目标region
region检查数据是否与scheam一致
如果客户端没有指定版本,则获取当前系统时间作为数据版本
将更新写入wal log
将更新写入memstore
判断memstore是否需要flush为store文件


put写操作是追加操作,需要提供存在或者不存在的rowkey,但是不管怎样,都是追加操作
根据rowkey,就能判断该记录是存放在某个table的的哪个region,因为meta文件中标明了该table每个region的start key。根据这个start key可以确定存放的region,然后往region对应的regionserver通信,写数据等等,当某个region达到一定的数量就会split。


考虑极端情况(rowkey递增,且都是put操作)
rowkey的put操作一直是递增的,那么开始的一个region的start key是1,第一个put直接放到这个region中,当到达一定数据后,一分为二,两个region的start key分别是1和100(假设100切分),那么后续的put操作就放到第二个region了,而第一个region不再有put操作,这样的现象便是热点。
如果我们将rowkey随机化(MD5 其它散列函数),那么就不是递增put,所随机出的rowkey就有可能会小于第二个region的startkey并大于第一个region的startkey,这时候就与第一个region通信,以此类推。虽然rowkey随机化处理,不是将整个递增的rowkey数据均云分布到所有的region,但是可以保证大致的分布,至于后续的平衡等操作,可以后续处理。对于新上线的regionserver,可以将split的region托管给他,并指定startkey,对于随机高于此startkey的put数据,由该新增的regionserver处理。


如果我们进一步在行键前面加上 当前时间%serverNum 可以优化读操作,将相同rowkey的数据分散在多台机器上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值