分布式数据库

\n ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型。\n\n配置`database.deploy` 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下:\n\n~~~\n//分布式数据库配置定义\nreturn [\n // 启用分布式数据库\n 'deploy' => 1,\n // 数据库类型\n 'type' => 'mysql',\n // 服务器地址\n 'hostname' => '192.168.1.1,192.168.1.2',\n // 数据库名\n 'database' => 'demo',\n // 数据库用户名\n 'username' => 'root',\n // 数据库密码\n 'password' => '',\n // 数据库连接端口\n 'hostport' => '',\n]\n~~~\n连接的数据库个数取决于`hostname`定义的数量,所以即使是两个相同的IP也需要重复定义,但是其他的参数如果存在相同的可以不用重复定义,例如:\n\n~~~\n'hostport'=>'3306,3306'\n~~~\n和\n\n~~~\n'hostport'=>'3306'\n~~~\n等效。\n\n~~~\n'username'=>'user1', \n'password'=>'pwd1', \n~~~\n和\n\n~~~\n'username'=>'user1,user1', \n'password'=>'pwd1,pwd1',\n~~~\n等效。\n\n还可以设置分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作,对于主从式数据库而言,需要设置读写分离,通过下面的设置就可以:\n\n~~~\n 'rw_separate' => true,\n~~~\n在读写分离的情况下,默认第一个数据库配置是主服务器的配置信息,负责写入数据,如果设置了`master_num`参数,则可以支持多个主服务器写入。其它的都是从数据库的配置信息,负责读取数据,数量不限制。每次连接从服务器并且进行读取操作的时候,系统会随机进行在从服务器中选择。\n\n还可以设置`slave_no` 指定某个服务器进行读操作。\n\n> 如果从数据库连接错误,会自动切换到主数据库连接。\n\n调用模型的CURD操作的话,系统会自动判断当前执行的方法的读操作还是写操作,如果你用的是原生SQL,那么需要注意系统的默认规则: **写操作必须用模型的execute方法,读操作必须用模型的query方法**,否则会发生主从读写错乱的情况。\n\n> 注意:主从数据库的数据同步工作不在框架实现,需要数据库考虑自身的同步或者复制机制。\n