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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 23:23   11   0
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倍。
















分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP