一、前言
2020大数据时代,由于数据的日渐增多,很多公司都回去选用一些强势一点的数据库,
比如hbase这种高吞吐量的数据库。
众所周知:上手容易,优化难。真正理解这句话的都试过来人。
- 代码与bug之间的距离终究只差那么0.1
突然接到紧急任务,问题是这样子的。比如一个解绑数据的接口,方法是线上其实也没什么
1.进入方法
2.根据条件获取到hbase存储的数据
3.根据本次请求要操作的内容做判断,组装数据,更新hbase
- 是不是很简单的三步骤。
- 经过他们反馈得知:当请求之后发现数据并没有全部更新成功,只是部分更新上去了。
二、问题思路
-
首先想到的就是脏数据 一致性这两点。
看了看日志,服务并没有出现任何异常,由此锁定上面分析的可能性是比较大的数据脏的了。 -
先了解一下事务的相关知识
什么是事务?
三、上手调试
1、问题复现
-
先写个异步请求 我这里没用循环直接开了三个线程
-
执行成功之后 下面图片中smallCode字段会绑定上三个字段值
-
下面我们执行后看结果
-
这里只成功绑定了一个,剩余两个丢失了。所以在后期进行解绑时候,出现了部分解除不掉问题。
2、解决
-
1.找到我们执行方法加上 ”synchronized“关键字,利用锁去保证下县城安全问题。
synchronized利与弊 -
2.从数据库方面解决,利用hbase行级锁 MVCC(这里我就直接用方案1了)
hbase的行锁与多版本并发控制(MVCC) -
再次绑定看结果 所看到的结果正常!
😁 作者:Teddy (公众号:鸡仓故事汇)
ok!到这里就大功告成,小编(Teddy)在这里先感谢大家的到来。
虽然不是太详细,小编已经很努力,给小编来个一键三连(点赞,关注,收藏),小编会越来越努力。。。