MyCat中ER表子表批量插入效率低的解决方案

MySQL版本:Mysql5.6.24 
Mycat版本:5.5.8-mycat-1.4-RC-20150713190023


分片规则如下:
<table name="p_test" dataNode="dn$1-6" rule="sharding-by-murmur_mobile-phone6" primaryKey="id" autoIncrement="true" needAddLimit="false">
     <childTable name="s_test" joinKey="id" primaryKey="id" parentKey="id"/>
</table>

测试结果:

主表p_test  记录数: 10580
子表s_test  记录数: 10580

通过mycat向mysql里灌数据,主表p_test数据在秒级能插入完成。
但子表s_test的插入速度实在是太慢了,基本上是每秒1条。1w多条数据要将近3个小时,传出去岂不是被笑死。


大胆的猜测:
应用都停了,只有mycat在向数据库里灌数据。经测试发现,在向mycat灌数据时,非ER表的插入速度还比较正常。

ER表的主表插入速度也正常,ER表的子表插入速度会比较慢。为什么呢?


可能是因为ER表的子表中没有分片规则,当插入ER表的子表一条数据时,必须遍历所有主表的数据后,才能知道将子表插入到那个节点。
如果我们能给子表增加一个分片规则,这样子表插入的效率能否提高呢?


于是我们参照主表的分片规则,给子表增加了一个分片字段。

这样在业务上并不会破坏原有ER表的关系,且由于有了分片规则,理论上插入的效率相对于没有分片规则的表的效率应该会有提升。



经测试证明:
我们尝试了在ER表子表里增加了与主表片键相同的冗余字段,子表的插入效率提高了至少100倍。
















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值