网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

ShardingSphere的坑是怎样的

ShardingSphere的坑是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联专注于西乌珠穆沁网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供西乌珠穆沁营销型网站建设,西乌珠穆沁网站制作、西乌珠穆沁网页设计、西乌珠穆沁网站官网定制、微信小程序服务,打造西乌珠穆沁网络公司原创品牌,更为您提供西乌珠穆沁网站排名全网营销落地服务。

  • 现象

4.0.0-RC1版本,我设置了数据自动生成分布式主键ID,然后当我进行数据插入的时候,我发现其中一个字段value值是null的时候,这个自动生成的主键ID赋值错乱了。

  • 找问题

那咋办呢?只能从他的原理以及源码入手了。设置了自动生成分布式主键,那么他是怎么操作的呢?

经过一番查询和测试之后,ShardingSphere是这么做的。他拿到业务层处理的sql之后,他在这个sql上面进行了改造。举个例子,我要在user表里面插入一条数据,sql如下:

INSERT INTO user (name, remark, age) VALUES ('test', null, 18);

然后ShardingSphere会进行处理,他会在我原有的sql上加ID,然后正常得到的sql应该是:

INSERT INTO user (name, remark, age, id) VALUES ('test', null, 18, '主键id');

但是事实却是这样的:

INSERT INTO user (name, remark, age, id) VALUES ('test', 18, '主键id', null);

怎么会这样呢?看起来感觉像是最后赋值的时候null的情况判断是有问题的,那么我们接下去继续去看源码。

又是一番debug + 查找之后。。。。

发现有这样一个抽象类InsertOptimizeResultUnit,其中有一个方法是getCurrentIndex,如下图:

ShardingSphere的坑是怎样的

ShardingSphere的坑是怎样的

截屏的这一步操作是在做什么呢?他主要是查找value这个数组的最后一位的下标是多少,由于他每一次都对value进行了非空判断,也就是说只要有一个value值为空,那么这个下标计算出来就会少1。那么最后最后造成的结果就是明明他应该在age后面加上id,但是由于下标计算错误导致id的value值去覆盖了age的value值。

解决方案

首先先去github上提交了issue,地址是https://github.com/apache/incubator-shardingsphere/issues/2897

先看ShardingSphere的开发者是否已经解决了这个问题,如果他们要在后续的版本进行解决的话,目前只有两个方案解决了:

1.我只能先暂时对字段加一个默认值,尽量使value不为空(不太好)
2.将github上的代码拉下来,然后自己修改源码然后自己打一个包来用(较合适)

看完上述内容,你们掌握ShardingSphere的坑是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


当前名称:ShardingSphere的坑是怎样的
地址分享:http://bjjierui.cn/article/jeosdd.html

其他资讯