Mycat配置MySql的读写分离

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31246691/article/details/80393728

我们知道MySql的存储引擎有两种:InnoDB和MyISAM,其中MyISAM是MySql的默认存储引擎,其实平时不会有太多人关心这个东西,但是对于实际的业务,存储引擎的合理选择是会对性能影响很大的因素。
以下是这两种引擎适合的场景:
• MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如 果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
• InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如 果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB, 这样可以提高多用户并发操作的性能。
这样的话,就会有一个问题:如果我的业务中同时需要执行大量的查询和插入语句,该怎么选择呢?鱼和熊掌就真的没法兼得吗?No,是可以兼得的。那么就不得不提出MyCat这个东西了。
总的来说,可以通过MyCat来实现这样的效果:
首先,需要一个MySql的主从配置,假设主:master,从:slave,在两个节点里分别创建同一个数据库db1,并在master的db1里创建一个InnoDB表,在slave里创建一个同样的MyISAM表,然后通过Mycat的读写分离配置,可以使插入或者更新操作都去Master里的InnoDB表执行,查询操作都去slave里的MyISAM表执行。如此一来,岂不是兼得了两个存储引擎的优势吗?
MyCat的读写分离配置很简单,只需在配置文件schema.xml里的writeHost内添加一个readHost,并将balance改为3,如图:
这里写图片描述
这里的node6是上面所说的MySql的slave节点,node1是master节点。
我们使用DataFactory来向node1的table1插入1000000条数据(node6的table1会自动同步),然后分别在mycat、node1、node6里做如下查询:
mycat
mycat
node1
node1
node6
node6
通过以上三图中的执行时间的比较,明显的可以发现mycat所做的事情 :将查询请求转发到MyISAM引擎表,可以看到MyISAM的查询效率(时间)相比InnoDB是数量级的提升。
而下图是没有做读写分离的MyCat的配置文件和执行效率:
这里写图片描述
这里写图片描述
可以发现此时的执行效率与在node1里执行的效率在一个数量级
以上就是MyCat配置MySql的读写分离的效果

展开阅读全文

没有更多推荐了,返回首页