zoukankan      html  css  js  c++  java
  • 分布式数据库

    分布式数据库

    --------------------------------------------------------------------------------

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

    配置database.deploy 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下:
    //分布式数据库配置定义
    return [
    // 启用分布式数据库
    'deploy' => 1,
    // 数据库类型
    'type' => 'mysql',
    // 服务器地址
    'hostname' => '192.168.1.1,192.168.1.2',
    // 数据库名
    'database' => 'demo',
    // 数据库用户名
    'username' => 'root',
    // 数据库密码
    'password' => '',
    // 数据库连接端口
    'hostport' => '',
    ]
    连接的数据库个数取决于hostname定义的数量,所以即使是两个相同的IP也需要重复定义,但是其他的参数如果存在相同的可以不用重复定义,例如:
    'hostport'=>'3306,3306' 和 'hostport'=>'3306' 等效。
    'username'=>'user1','password'=>'pwd1', 和'username'=>'user1,user1','password'=>'pwd1,pwd1', 等效。

    还可以设置分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作,对于主从式数据库而言,需要设置读写分离,通过下面的设置就可以:
    'rw_separate' => true,
    在读写分离的情况下,默认第一个数据库配置是主服务器的配置信息,负责写入数据,如果设置了master_num参数,则可以支持多个主服务器写入。其它的都是从数据库的配置信息,负责读取数据,数量不限制。每次连接从服务器并且进行读取操作的时候,系统会随机进行在从服务器中选择。

    还可以设置slave_no 指定某个服务器进行读操作。

    如果从数据库连接错误,会自动切换到主数据库连接。

    调用模型的CURD操作的话,系统会自动判断当前执行的方法的读操作还是写操作,如果你用的是原生SQL,那么需要注意系统的默认规则: 写操作必须用模型的execute方法,读操作必须用模型的query方法,否则会发生主从读写错乱的情况。

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

  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/lin-er/p/8268961.html
Copyright © 2011-2022 走看看