thinkphp 3.2分布式数据库读写分离扩展阅读

        thinkphp 3.2分布式数据库读写分离扩展阅读

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

        配置DB_DEPLOY_TYPE 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下:

            //分布式数据库配置定义
            'DB_DEPLOY_TYPE'=> 1, // 设置分布式数据库支持
            'DB_TYPE' => 'mysql', //分布式数据库类型必须相同
            'DB_HOST' => '192.168.0.1,192.168.0.2',
            'DB_NAME' => 'thinkphp', //如果相同可以不用定义多个
            'DB_USER' => 'user1,user2',
            'DB_PWD' => 'pwd1,pwd2',
            'DB_PORT' => '3306',
            'DB_PREFIX' => 'think_',

        连接的数据库个数取决于DB_HOST定义的数量,所以即使是两个相同的IP也需要重复定义,但是其他的参数如果存在相同的可以不用重复定义,例如:

            'DB_PORT'=>'3306,3306'

        和

            'DB_PORT'=>'3306'

        等效。

            'DB_USER'=>'user1',
            'DB_PWD'=>'pwd1', 

        和

            'DB_USER'=>'user1,user1',
            'DB_PWD'=>'pwd1,pwd1',

        等效。

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

            'DB_RW_SEPARATE'=>true,

        在读写分离的情况下,默认第一个数据库配置是主服务器的配置信息,负责写入数据,如果设置了DB_MASTER_NUM参数,则可以支持多个主服务器写入。其它的都是从数据库的配置信息,负责读取数据,数量不限制。每次连接从服务器并且进行读取操作的时候,系统会随机进行在从服务器中选择。

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

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

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

时间: 2024-11-02 18:34:00

thinkphp 3.2分布式数据库读写分离扩展阅读的相关文章

Spring 实现数据库读写分离

[本文转载于 Spring 实现数据库读写分离] 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验.我们通常的做法就是把查询从主库中抽取出来,采用多个从库,使用负载均衡,减轻每个从库的查询压力. 采用读写分

分布式数据库——从线性扩展谈分布式JOIN

在首届阿里巴巴中间件峰会上,来自阿里巴巴DRDS团队的梦实分享了<分布式数据库--从线性扩展谈分布式JOIN>.他主要从OLTP数据库的线性扩展.水平扩容.IN查询.分布式JOIN四个方面进行了分享.在分享中,他主要通过买家与订单场景.家庭与孩子场景介绍了IN查询,通过同维度的JOIN.广播表的JOIN.Nested Loop Join详细介绍了分布式JOIN的坑与填坑.   以下内容根据直播视频整理而成.   在数据库的使用过程中,我们难免会问到这样的问题,为什么分库分表?答案是为了达到线性

在应用层通过spring特性解决数据库读写分离

在应用层通过spring特性解决数据库读写分离    如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496   常见的解决数据库读写分离有两种方案 1.应用层 http://neoremind.net/2011/06/spring实现数据库读写分离 目前的一些解决方案需要在程序中手动指定数据源,比较麻烦,后边我会通过AOP思想来解决这个问题.   2.中间件 mysql-proxy:http://hi.baidu.com/

CYQ.Data V5 数据库读写分离功能介绍

前言 好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来: 这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始,急需被拯救. 之后又回到.NET的思维来,想着怎么在框架里实现读写分离控制请求切换. 之前几个月一直都有在思考,想及对框架现有的代码改动可能较大,所以迟迟没怎么下手. 最近终于在厕所蹲下的一瞬间,灵光一闪,感觉思绪来了,然后一鼓作气,就把它给作了. 数据库读写分离的三步曲 1:实现主(读)从(写)

phalapi-进阶篇5(数据库读写分离以及多库使用)

phalapi-进阶篇5(数据库读写分离以及多库使用) 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 读写分离是我们常用的一种解决方案,它可以解决大量读操作的时候数据库瓶颈的问题,我们在真正开发一个项目的过程中可能会遇一个接口或者一个操作中需要用到多个数据库操作的时候怎么办,今天的教程就从这个两个问题出来,来聊聊使用phalapi怎么解决这个问题. 附上: 官网地址:http://www.phalapi.net/ 开源中国Git地址:http:

thinkphp下MySQL数据库读写分离代码剖析

当采用原生态的sql语句进行写入操作的时候,要用execute,读操作要用query. MySQL数据主从同步还是要靠MySQL的机制来实现,所以这个时候MySQL主从同步的延迟问题是需要优化,延迟时间太长不仅影响业务,还影响用户体验. thinkphp核心类Thinkphp/library/Model.class.php 中,query 方法,调用Thinkphp/library/Think/Db/Driver/Mysql.class.php /** * SQL查询 * @access pub

数据库读写分离

随着一 个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变 现状.读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了.ebay就做得非常好.ebay用的是oracle,听说是用Quest Share Plex 来实现主从复制数据.      读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力.主数据库提供写操作,从数据库提 供读操作,

yii2 数据库读写分离配置示例

开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.PHP),DSN( Data Source Name )是数据源名称,用于指定数据库信息.如下所示: return [ // ... 'components' => [ // ... 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbna

sql server2005实现数据库读写分离介绍_mssql2005

Internet的规模每一百天就会增长一倍,客户希望获得7天×24小时的不间断可用性及较快的系统反应时间,而不愿屡次看到某个站点"Server Too Busy"及频繁的系统故障. 随着业务量的提高,以及访问量和数据流量的快速增长,网络各个核心部分的处理性能和计算强度也相应增大,使得单一设备根本无法承担.在此情况下,如果扔掉现有设备去做大量的硬件升级,必将造成现有资源的浪费,而且下一次业务量的提升,又将导致再一次硬件升级的高额成本投入.于是,负载均衡机制应运而生. 对于负载均衡,笔者经