前言

这里列出来的只是我这个系统环境下遇到的问题,以及解决办法,不一定适用于所有人的情况。
选择4.1.1,是因为B站上的教程全都是这个版本。选择5.0+可能会找不到方向。

系统环境

CentOS Linux release 7.9.2009 (Core)
mysql-connector-java-5.1.49.jar
Sharding-Proxy使用docker来部署

问题列举

问题1

启动proxy时候报错

Type org.apache.shardingsphere.orchestration.center.yaml.config.YamlCenterRepositoryConfiguration not present

这里参考Sharding-Proxy分库分表。按这位大佬的说法,我的tar包是在Windows下解压的,会有文件名长度的问题=。=
问题是360解压也没报错,无语了。
总之,我在Linux下解压后,问题消失。

问题2

我在插入数据的时候,有如下报错

org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.simple.ParameterMarkerExpressionSegment cannot be cast to org.apache.shardingsphere.sql.parser.sql.segment.dml.column.ColumnSegment

这里是我以为自己的4.1.1有BUG的时候,选择了4.1.0版本,遇到的问题。解决方法就是放弃了4.1.0=。=
参考某大佬链接

问题3

2Unknown exception: [no table route info]

目前测试发现,就是配置里有两处没对上。

shardingRule:tables:ods_exp_pre_in:actualDataNodes: sharding_db.ods_exp_pre_in_s$->{0..2}tableStrategy: inline:shardingColumn: idalgorithmExpression: ods_exp_pre_in_s$->{id % 3}

actualDataNodes和algorithmExpression所写的表达上必须要能对上号,错一点就会报这个错误。

问题4

我在插入数据的时候,发现proxy没有分片操作。我设置的是一个逻辑表分成三个实体表存。
结果在插入一行测试数据后发现,三个实体表里全都有这条数据。
而在查逻辑表的时候会返回三条一样的数据。
我没写过Java,没法从源码里找答案,网上也没有查到类似情况。
给我感觉是,程序将我的这张逻辑表视为广播表了。

# 原来的config-sharding.yaml配置
shardingRule:tables:ods_exp_pre_in:actualDataNodes: sharding_db.ods_exp_pre_in_s$->{0..2}tableStrategy: inline:shardingColumn: hs_codealgorithmExpression: ods_exp_pre_in_s$->{hs_code % 3}keyGenerator:type: SNOWFLAKEcolumn: hs_code

我之后去B站看了有关教程,排除这个是官方BUG的可能性。
最后想起来hs_code是字符串,可能在algorithmExpression运算时候出错了。
我把hs_code替换为int类型的id字段后,问题解决。

# 修改后的配置
shardingRule:tables:ods_exp_pre_in:actualDataNodes: sharding_db.ods_exp_pre_in_s$->{0..2}tableStrategy: inline:shardingColumn: idalgorithmExpression: ods_exp_pre_in_s$->{id % 3}keyGenerator:type: SNOWFLAKEcolumn: hs_code

额外问题1

若有如上的配置问题,目前还发现了三种情况会报如下错误

2Unknown exception: [No signature of method: java.lang.String.mod() is applicable for argument types: (java.lang.Integer) values: [3]
Possible solutions: drop(int), any(), find(), use([Ljava.lang.Object;), is(java.lang.Object), take(int)]

1.Kettle的“表输出”插件。
2.Python的pymysql库使用executemany
进一步的,我发现了一个奇怪的地方:

INSERT INTO logic_db.ods_imp_pre_in
VALUES(1, NULL, NULL, "3780017", NULL, "2016-01-01", "394068602", "BG EXPLORATION AND PRODUCTION INDIA LTD", "BG HOUSE,LAKE BOULEVARD,HIRANANDANI BUSINESS PARK,POWAI", "400076", "MUMBAI,MAHARASHTRA", NULL, NULL, NULL, NULL, NULL, "SCHLUMBERGER RESERVOIR PRODUCTS FZE", "P.O.BOX. 18070, JEBEL ALI FREE ZONE, DUBAIUnited Arab Emirates", NULL, "73079990", "CLAMPS FOR SECURING CONTROL LINES OVER 3-1/2 TUBING COUPLING (QTY 200 NOS UNIT PRICE 54 USD) (OILFIELD SUPPLIES)", 1010.000000, "KGS", NULL, 10.800000, NULL, 10908.000000, "USD", 725.760000, 733017.580000, "INR", NULL, 0.000000, 2, 10867.569755, 67.199998, 67.450000, "4A", NULL, "ARYA OFFSHORE SERVICES PVT LTD", NULL, "CN", "China", NULL, "IN", "India", "INNSA1", "Nhava Sheva Sea", NULL, "IN_2016_IMP")
;

INSERT语句中,若使用的双引号标记字符串,就会重复插入数据。
若用单引号,则会发生上述报错。
目前暂时不知道原因是啥。

额外问题2

若想用hs_code(字符串)来分片,可以用将hs_code转化为数字,再去mod。

shardingRule:tables:ods_exp_pre_in:actualDataNodes: sharding_db.ods_exp_pre_in_s$->{0..2}tableStrategy: inline:shardingColumn: hs_codealgorithmExpression: ods_exp_pre_in_s$->{hs_code.toInteger() % 3}keyGenerator:type: SNOWFLAKEcolumn: hs_code

额外问题3

若想用日期来做分片,则可以依照如下方法进行。

shardingRule:tables:ods_exp_pre_in:actualDataNodes: sharding_db.ods_exp_pre_in_s20190${1..9}, sharding_db.ods_exp_pre_in_s20191${0..2} tableStrategy: inline:shardingColumn: registration_datealgorithmExpression: ods_exp_pre_in_s${Date.parse('yyyy-MM-dd 00:00:00', registration_date).format('yyyyMM')}

我这边的样例数据都是2019年的,所以actualDataNodes里直接写死了2019,。
另外,这里有个我没想到的点。registration_date在数据库里是date类型,而读取出来后成了字符串类型,所以我本来的行表达式是registration_date.format(‘yyyyMM’),饶了很久才发现可能是数据类型问题。
若有知道怎么查详细日志的朋友,还请给我留言告知一下。我只设置了sql.show: true,光这么配置没法知道algorithmExpression具体被解析成什么样了。找不到表就只有一个报错:no table route info

未完待续

笔记:部署Sharding-Proxy4.1.1时遇到的坑(持续更新中。。。)相关推荐

  1. 【计算机网络】从零开始的个人网站1 从部署轻量应用服务器到搭建简易网站(持续更新中!)

    文章目录 1. 部署服务器 (1) 为什么要使用云服务器 (2) 购买云服务器 (3) 服务器基本配置 (4) 远程连接服务器 (5) 安装宝塔面板 2. 搭建简易个人网站 (1) 通过宝塔面板建站 ...

  2. Go语言开发学习笔记(持续更新中)

    Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...

  3. C语言学习笔记Day3——持续更新中... ...

    上一篇文章C语言学习笔记Day2--持续更新中- - 八. 容器 1. 一维数组 1.1 什么是一维数组 当数组中每个元素都只带有一个下标(第一个元素的下标为0, 第二个元素的下标为1, 以此类推)时 ...

  4. C语言笔记系列文章 索引目录表(持续更新中......)

    前言: 都快大三了,想起大一的时候学C语言,什么都不懂.由于对语言不是很了解,也就没有认真学习.其实C语言在计算机行业中还是比较重要的一门基础课程.虽然现在的开发基本不会用C,但它是母语这是毋庸置疑的 ...

  5. C++学习笔记目录链接(持续更新中)

    学习目标: C++学习笔记目录链接(持续更新中,未完待续) 学习内容: 序号 链接 0 C++ 常见bug记录(持续记录中) 1 C++学习笔记1[数据类型] 2 C++学习笔记2[表达式与语句] 3 ...

  6. 【第十三届蓝桥杯备战】C/C++解题时的一些个人小技巧和注意事项(持续更新中)

    [第十三届蓝桥杯备战]C/C++解题时的一些个人小技巧和注意事项(持续更新中) 输入输出 数组 数据结构 1. 线段树 调试 References 先说一些废话:我最近觉得写算法题就像是打格斗游戏一样 ...

  7. 【前端基础知识笔记】 【项目导向型】(持续更新中)

    我在做项目的过程中,学习了一些前端基础知识.为了方便以后的查询,将这些知识集中在这篇博客中,方便以后的查询. 注意!这些知识是不成体系的,因为我只是按照遇到的先后顺序记载于此.这是为了方便结合项目开发 ...

  8. SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...

    @SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...

  9. python基础笔记,超详细,包含面向对象基础,爬虫实战【持续更新中...】

    前言: 本笔记中的函数和方法同义,面向python3 本笔记部分概念及代码由newbing搜集整理得出 本笔记适合有一定其他编程语言基础的同学,因为笔记中省略了部分基础概念(比如整型,浮点型等基本数据 ...

  10. native react ssh_React Native踩坑笔记(持续更新中...)

    最近发现市场上对React Native开发人员的需求挺多的,自己就想学习一下React Native,多一门技术,好将来买个好价位.嘿嘿! 在学习React Native中碰到了不少坑,再次记录下来 ...

最新文章

  1. 简单分析synchronized不会锁泄漏的原因
  2. thinkPHP5.0数据查询表达式生成技巧
  3. linux命令-locale字符显示
  4. mysql4ge表联表查询_【MySQL】MariaDB10.2新特性--Flashback
  5. 登陆页面html5代码qq,HTML5QQ登录的一篇代码分享
  6. 清华大学超级计算机中心,中国科学技术大学超级计算中心
  7. SAP ERP的版本演变基础知识
  8. jdk1.8中的永久代和元空间
  9. 【图神经网络】异构时间图卷积网络HTGCN——用于社区检测
  10. syswow64删除文件_win7系统Syswow64文件夹有什么作用?
  11. Proximal Policy Optimization Algorithms
  12. 怎样快速查询多个天天欧洲物流单号的在途信息
  13. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——2.3 层次结构和复合角色...
  14. 如何查看 Mac ssh key
  15. macOS安装brew和使用brew
  16. wifi 信号差 android,手机WiFi信号弱怎么办 手机WiFi信号突然变弱的解决方法
  17. 个人永久性免费-Excel催化剂功能第69波-打造最专业易用的商务图表库,即点即用的高级Excel图表...
  18. PVP:手游进程的终点
  19. 连接大智慧数据库接口
  20. Web安全工具—Nmap(持续更新)

热门文章

  1. 江南大学851计算机初试考研经验
  2. jar包瘦身的方法和思考
  3. 7.6 高阶线性微分方程
  4. 彩色图片按RGB通道分离,torch单通道卷积后,再合并
  5. 美股课堂:美国银行开户亲历记
  6. 取消CATIA启动时自动创建的Product或Part
  7. CATIA二次开发:定制化需求、降低错误率和提高工作效率的完美解决方案
  8. 【深入理解函数栈帧:探索函数调用的内部机制】
  9. 列出所有班级名称_班级名称
  10. 【每日一题】 1396. 设计地铁系统