mysql优化之读写分离

mysql优化之读写分离

        • 一. TP框架实现mysql读写分离
        • 二.yii框架实现mysql读写分离
        • 三.laravel框架实现mysql读写分离

读写分离概述:

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

为什么要读写分离呢?

因为数据库的“写”(写10000条数据到mysql可能要3分钟)操作是比较耗时的。

但是数据库的“读”(从mysql读10000条数据可能只要5秒钟)。

所以我们可以采用读写分离,来提高数据库查询的效率。

读写分离,为什么能提升性能呢?

举例:
如果不分开,所有操作都在一个数据库中(比如mysql)中进行,如果并发用户有1000个。即mysql数据库,得为1000个用户提供查询、写入等数据库服务。

读写分离之后,msyql-master,msyql-slave。就相当于将1000个并发用户,分流了,一部分用户(如800人)对mysql-slave数据库进行读操作,另一部分用户(如200人)对mysql-master数据库进行操作。
即以前1000个用户的事情,由一个东西来干;读写分离后,1000个用户的事情,由两个东西来干。

读写分离的两种实现思路:

  1. 在代码中实现(框架中实现读写分离);–本次主讲
  2. 利用数据库代理(中间件 例如:官方的mysql-proxy) --暂时未完成

一. TP框架实现mysql读写分离


ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型。

分布式数据库配置定义:


'DB_DEPLOY_TYPE'=> 1,  //设置分布式数据库支持
'DB_TYPE'       => 'mysql',//分布式数据库类型必须相同
'DB_HOST'       => '192.168.2.181,192.168.2.182',
'DB_NAME'       => 'test',//如果相同可以不用定义多个
'DB_USER'       => 'itczp',
'DB_PWD'        => 'itczp',
'DB_PORT'       => '3306',
'DB_PREFIX'     => '',

分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作,
对于主从式数据库而言,需要设置读写分离,通过下面的设置就可以:

'DB_RW_SEPARATE'=>true, //开启读写分离

详细可看tp手册 -模型-分布式数据库支持

特别注意:

如果你用的是原生SQL,那么需要注意系统的默认规则:写操作必须用模型的execute方法,读操作必须用模型的query方法,否则会发生主从读写错乱的情况。

备注:主从数据库的数据同步工作不在框架实现++,需要数据库考虑自身的同步或者复制机制。

二.yii框架实现mysql读写分离

// 配置主服务器
	 'class' => 'yii\db\Connection',
	 'dsn' => 'mysql:host=192.168.2.181;dbname=test',
	 'username' => 'itczp',
	 'password' => 'itczp'  ,
	 // 配置从服务器
	 'slaveConfig' =>
	 [
	 	'username' => 'itczp',
	 	'password' => 'itczp',
	 	'attributes' =>
	 	[
	 		// 连接超时时间
	 		PDO::ATTR_TIMEOUT => 10,
	 	],
	 ],
	 // 配置从服务器组
	 'slaves' =>
	 [
	              ['dsn' => 'mysql:host=192.168.2.182;dbname=test'],
	              // ['dsn' => 'mysql:host=192.168.2.183;dbname=test'],
	              // ['dsn' => 'dsn for slave server 3'],
	              // ['dsn' => 'dsn for slave server 4'],
	 ],

以上的配置实现了一主多从的结构,从服务器用以执行读查询,主服务器执行写入查询,读写分离的功能由后台代码自动完成.调用者无须关心.

三.laravel框架实现mysql读写分离

源码分析:
https://laravel-china.org/topics/1879/laravel-5-configuration-read-and-write-separation-and-source-analysis

你可能感兴趣的:(MySQL优化)