版本:
HBase:1.1.2;Hadoop2.6.0;Eclipse:Mars.1 Release (4.5.1);
应用场景:HBase中有一个表,里面有一条记录,如下:
现在需要根据value的值,比如当其为“true”的时候进行更新操作(也就是插入操作,表设置Versions为100),更新为false;
问题描述:
1) 当只有一个线程来操作的时候,可以直接取得值,然后根据值来判断即可进行插入;
2)如果有多个线程的话(比如10个线程),那么1)的方法就不行了,会直接插入10条记录(因为有多个版本,所以会查到11条记录);
3)如果使用rowlock的话,可以解决这个问题,在进行put的时候,去获取rowlock,如果获取不了(其他线程已经先获得了rowlock),那么就不插入;
4)但是,rowlock在hbase之前的版本是有的,但是后面的版本就没有了(性能影响,所以hbase把client的rowlock去掉了);
那么,怎么办?
参考ÿ