分布式数据库库数据表导入mysql之后数据量增加问题
1、背景:
新疆分布式数据库crm数据导入,表做分片,导入之后表数据量比原表数据量多。
导入方式:load
2、排查过程
以表tf_bhb_ocs_batdeal_2016测试排查:
1)表结构:
CREATE TABLE `tf_bhb_ocs_batdeal_2016` (
`DEAL_ID` decimal(22,0) NOT NULL,
`BATCH_ID` decimal(22,0) DEFAULT NULL,
`SERIAL_NUMBER` varchar(40) NOT NULL,
`CHANNEL_NO` decimal(22,0) NOT NULL,
`ACCEPT_DATE` datetime NOT NULL,
`ACCEPT_MONTH` decimal(22,0) NOT NULL,
`ACCEPT_STAFF_ID` char(8) NOT NULL,
`ACCEPT_DEPART_ID` char(5) NOT NULL,
`ACCEPT_MODE` char(1) NOT NULL,
`MONITOR_TYPE` varchar(3) NOT NULL,
`WRITE_TYPE` char(1) NOT NULL,
`ENABLE_TAG` char(1) NOT NULL,
`START_DATE` datetime DEFAULT NULL,
`END_DATE` datetime DEFAULT NULL,
`DEAL_STATE` char(1) NOT NULL,
`DEAL_TIME` datetime DEFAULT NULL,
`DEAL_RESULT` varchar(500) DEFAULT NULL,
`TRADE_ID` decimal(22,0) DEFAULT NULL,
`REMARK` varchar(500) DEFAULT NULL,
`BIZ_TYPE` varchar(2) DEFAULT NULL,
`MONITOR_FLAG` char(1) DEFAULT NULL,
`MONITOR_RULE_CODE` varchar(5) DEFAULT NULL,
KEY `IDX_TF_BHB_OCS_BATDEAL_2016_S` (`SERIAL_NUMBER`),
KEY `PK_TF_BHB_OCS_BATDEAL_2016` (`DEAL_ID`,`ACCEPT_MONTH`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2)分片规则:
trade_id
murmur256
3)测试方式:
将发现的数据多的记录单独拿出做以下测试,txt文件内容如下

1.表不分片时,decimal对应列不为空,取一条数据导入分布式Mysql数据库,查询结果为1条;(未分片测试咩有截图)
2.表不分片时,decimal对应列为空,取一条数据导入分布式Mysql数据库,查询结果为1条;
3. 表分片,decimal对应列为空,往分布式Mysql数据库导入一条数据结果为,查询结果为256条;

4.表分片,decimal对应列为空,替换为0,往分布式Mysql数据库导入一条数据结果为,查询结果为1条;


查看表结构发现: 分片字段数据类型默认为null, 而 代理是根据传入的切分字段的值进行计算路由的,DEFAULT NULL,或者 DEFAULT 0都是在MySQL端默认的,没有作用,所以切分字段必须要传入值。
解决:
根据以上原理, 将切分规则字段修改为不为空的字段 DEAL_ID , 重启代理生效,在进行测试,数据量对比正常
根据以上原理, 将切分规则字段修改为不为空的字段 DEAL_ID , 重启代理生效,在进行测试,数据量对比正常
分类:
mysql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报