前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MyCat - 生产进阶篇(1)

MyCat - 生产进阶篇(1)

作者头像
干货满满张哈希
发布2021-04-12 16:08:34
发布2021-04-12 16:08:34
4480
举报

数据库路由中间件MyCat - 生产进阶篇(1)

首先,利用开源产品,我们的第一个首要目标是–稳定!

1. MyCat求稳首要原则:

还是用之前的例子:

1.1 事务

首先,我们可以这么理解,MyCat只应该做两件事:请求转发与结果合并。源代码篇讲过MyCat的分布式事务的弱XA原理(其实根本不算是分布式事务),这是不可靠的,我们要想稳定的高可信的利用MyCat,就要避免一切分布式事务。 从现在开始,MyCat的所有图例为了演示方便将采用以下规则:

1.某一表同一分片多记录的插入和更新多次的事务是允许的:

对于分片表的事务,如果只包含单一分片列id,则事务只会被发送到一个真实数据库上执行。不涉及到分布式事务。

2.只涉及到同种分片规则并相同分布的表(其实就是父子表,就算你不用childtable标签,分布和分片规则都相同的表和父子表也是等价的)的同一条对应记录的插入和更新多次的事务是允许的!

多条记录更新:不允许这么做!

3.其他类型的,例如涉及到同一表不同分片的插入更新事务,或者涉及到不同分布分片的表的插入更新事务,都是不允许的。

4. 公共表的更新是不允许的,最好交由DBA去每一个分片上更新,保证一致性。

1.2 查询:

再次强调,MyCat只应该做两件事:请求转发与结果合并。 但是,在结果合并时,我们要考虑到JVM的内存限制,不能返回结果过大。好在MyCat设置里面我们可以开启sqllimit来控制每条不加limit的语句返回的结果数量。 1.要么开启sqllimit来控制每条不加limit的语句返回的结果数量,要么保证每条业务sql都加上合适的limit 2.MySQL本身不能做join,只能交由底层真实数据库去做, MyCat去做结果合并(sqllimit有效) 父子表按分片列join

如果join条件为分片列,则可以返回正确结果 父子表按非分片列join 如果join条件为非分片列,返回的结果不可靠,因为join是底层真实数据库完成的,但是每个库都没有完整的数据

分片表与公共表join 这样结果是正确的,因为公共表有全量数据

超过2表以上join,不支持

3. 不论是什么查询,都要考虑好量级,Join,group by还有order by都最好不要用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/03/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库路由中间件MyCat - 生产进阶篇(1)
    • 1. MyCat求稳首要原则:
      • 1.1 事务:
      • 1.2 查询:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档