`
vtrtbb
  • 浏览: 361366 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Yii框架数据库分库设计

阅读更多

现在项目中多数会用到数据库多库的切换场景,在Yii中是如何实践的呢?

其实通过动态设置

Yii::app()->setComponent(array('key'=>数据库连接的配置文件)); 

 具体代码:

<?php
class FSDB extends CComponent {
    
	/**
	 * 以$cityCode为键的二维数组。
	 * @var array
	 */
	private static $dbInstance = array();
	
	/**
	 * 数据库配置前缀。
	 *
	 * @var string
	 */
	const DB_ID = 'web_db_';	
    
    /**
     * 私有构造方法,防止类被直接实例化。     
     */    
    private function __construct() {
    	
    }
   	
	/**
	 * 获取唯一实例。
	 *
	 * @param string $cityCode 城市简拼
	 * @return instance of object
	 */
	public static function Instance($cityCode) {		
		if(!isset(self::$dbInstance[$cityCode])) {			
			self::$dbInstance[$cityCode] = self::init($cityCode);			
		}
		return self::$dbInstance[$cityCode];
	}
	
	/**
	 *  初始化函数。
	 *   @param string $cityCode 城市简拼
	 *  @param Object Yii 框架对象实例
	 */
	public static function init($cityCode) {		
		$dbLink = self::DB_ID.$cityCode;		
		if(Yii::app()->hasComponent($dbLink)) {			
            return Yii::app()->$dbLink;
		}
		$dbConf = self::_getCityDBConfig($cityCode);
		if(FALSE === $dbConf) {           
            throw new CException("Did not declare the database configuration!");
        }       
        Yii::app()->setComponents(array($dbLink => $dbConf));  
		return Yii::app()->$dbLink;		
	}
	
	/**
	 * 获取城市DB配置。
	 *
	 * @param string $cityCode 城市简拼
	 * @return boolean|array DB配置或假
	 */
	private static function _getCityDBConfig($cityCode){
		$cityCode = strtoupper($cityCode);
		$dbconfig = self::_getMasterConf($cityCode);
		if($slave){
			$dbconfig['slaves'] = self::_getSlaveConf($cityCode);
		}
		return $dbconfig;
	}	
    
   
	
	/**
	 * 取主库配置文件。
	 *
	 * @param string $cityCode
	 * @return array
	 */
	private static function _getMasterConf($cityCode) {
		return array(
            'class' => 'DbConnection',
            'connectionString' => mysql:host=;dbname=;port=",
            'emulatePrepare' => true,
            'username' => ,
            'password' => ,
            'tablePrefix' => 't_',
            'charset' => 'utf8',
            'enableProfiling' => true, //
            'enableParamLogging' => true, //
        );
	}
	
	/**
	 * 取从库配置文件。
	 *
	 * @param string $cityCode
	 * @return array
	 */
	private static function _getSlaveConf($cityCode) {
		return array(
                array(
                    'connectionString' => mysql:host=;dbname=;port=",
                    'emulatePrepare' => true,
                    'username' => ,
                    'password' => ,
                    'charset' => 'UTF8',
                    'tablePrefix' => 't',
                    'enableParamLogging' => YII_DEBUG,
                    'schemaCacheID' => 'cache',
                    'schemaCachingDuration' => 0,
                )
            );
	}
}

 调用方法:

 

<?
$cityCode = 'bj';
$dbx = FSDB::Instance($cityCode);		
$result = $dbx->createCommand("select 8 * 8;")->queryAll();
?>

 

分享到:
评论

相关推荐

    Yii 读写分离 分表分库

    总结,通过Yii框架的灵活配置和扩展支持,我们可以实现读写分离和分库分表,有效提升系统的数据库性能。同时,需要注意在设计过程中充分考虑数据的一致性和查询的便利性,以确保系统的稳定性和可维护性。

    PHP框架Yii商城源码,带数据库文件.rar

    Yii框架是PHP开发中的一个高性能、基于组件的MVC(模型-视图-控制器)框架,特别适合开发大型Web应用。...通过深入研究源码,开发者不仅可以提升Yii框架的掌握程度,还能学习到电子商务系统的设计和实现技巧。

    Fecshop是基于phpYii2框架之上开发的一款优秀的开源电商系统

    Fecshop是一款基于PHP的Yii2框架构建的开源电商系统,专为实现高效、灵活且功能丰富的在线购物体验而设计。Yii2框架以其高性能、安全性和可扩展性著称,使得Fecshop在电商领域中脱颖而出。下面我们将深入探讨Fecshop...

    用Yii写的商城源代码

    通过分析和学习这个项目,开发者不仅可以掌握Yii框架的使用,还能了解到商城系统设计的全过程,包括需求分析、数据库设计、前后端交互、安全策略等多个方面,这对于提升Web开发技能和项目经验非常有益。

    yii framework 商城

    最后,Yii框架具有良好的社区支持和丰富的扩展库,如yiisoft/yii2-gii自动生成代码工具,yiisoft/yii2-debug调试工具,以及各种第三方组件,如用户认证和权限管理RBAC(Role-Based Access Control),这些都可以...

    yii-advanced-app-2.0.11.tgz

    vendor目录包含了所有通过Composer安装的第三方库,包括Yii框架本身。 开发Yii 2.0.11项目时,开发者可以利用Gii代码生成工具快速创建模型、控制器和视图文件,减少手动编码的工作量。此外,框架内置的单元测试和...

    yii-1.1.5.r2654.zip

    1. **framework**:这是Yii框架的核心代码库,包含各种组件、类库和工具。 - **base**:基础类,提供基本的类定义,如CApplication、CComponent等。 - **db**:数据库相关的组件,如CDbConnection、CDbCommand等。...

    yiiframework官方最新版,包括源程序、api、文档

     15、完全面向对象:Yii框架坚持严格的面向对象编程范式。它没有定义任何全局函数或变量。而且,它定义的类层次结构允许最大的可重用性和定制。  16、友好的使用第三方代码:Yii精心设计让它第三方代码非常好的...

    Yii的开发说明(中文版)

    **Yii框架概述** Yii是一款高性能、基于组件的PHP框架,专为Web2.0应用设计。它极大地简化了Web应用程序的开发过程,提供了一系列强大的特性,包括MVC(模型-视图-控制器)架构模式、数据库抽象层、缓存管理、身份...

    yii mongodb 小说系统.zip

    在本项目中,“yii mongodb 小说系统.zip”是一个基于Yii框架和MongoDB数据库构建的小说管理系统。Yii是一个高效的PHP框架,专为Web 2.0应用开发而设计,而MongoDB则是一种流行的NoSQL数据库,特别适合处理大量非...

    Yii 2.0开发一个仿京东商城平台

    3. **数据库设计与创建**:根据需求文档设计并创建数据库表结构。 4. **前端页面设计**:绘制UI界面原型图,编写HTML/CSS代码实现页面布局。 5. **后端逻辑实现**:编写控制器、模型和服务层代码实现业务逻辑。 6. *...

    yii2 图片上传扩展插件

    "yii2 图片上传扩展插件"就是为了简化这一过程而设计的。 该插件主要解决以下问题: 1. **图片预览**:允许用户在上传前预览图片,提高用户体验。 2. **多文件上传**:支持一次上传多个图片文件,提高效率。 3. **...

    老爷车yii点位盘 乐酒商城系统微盘源码+完整数据

    【老爷车yii点位盘 乐酒商城系统微盘源码+完整数据】是一个基于Yii框架开发的H5移动端电商系统。...通过深入研究这个源码,开发者不仅可以熟悉Yii框架的应用,还能掌握H5移动端电商系统的设计和实现。

    yii2 rbac yii2 rest RBAC Auth manager for-yii2-rest-rbac.zip

    描述 "yii2 rbac yii2 rest RBAC Auth manager for-yii2-rest-rbac" 似乎简略地重复了标题中的信息,但我们可以从中推测这个资源是专门为了在 Yii2 中管理和实现 RESTful API 的 RBAC 控制而设计的。 标签为空,...

    基于PHP的YiiPiN社会化电商分享系统 php版.zip

    6. **数据库优化**:为了处理大量用户和商品数据,YiiPiN可能运用了数据库索引、分表分库、读写分离等策略,确保系统的高并发性能。 7. **支付集成**:电商系统通常需要集成第三方支付接口,如支付宝、微信支付等,...

    yii2saaS快速快速平台升级___下载.zip

    FunBoot可能是一个基于Yii2的开源SaaS框架,专为快速构建企业级SaaS应用而设计。 以下是关于Yii2 SaaS平台升级和FunBoot的一些关键知识点: 1. **Yii2框架**:Yii2是用PHP编写的,它提供了一个强大的MVC(模型-...

    yii2-gtreetable-master.rar

    8. **数据库交互**:如果GTreeTable涉及到数据存储,那么它可能与Yii2的ActiveRecord或查询构建器一起工作,以便与数据库进行交互。 9. **API接口**:如果GTreeTable用于展示从API获取的数据,开发者可能需要理解...

    基于Yii2的企业级商城系统源码和微信小程序.zip

    该压缩包文件“基于Yii2的企业级商城系统源码和微信小程序.zip”包含了一套完整的企业级电商解决方案,集成了Yii2框架的后端开发和微信小程序的前端展示。这个项目可能适合那些正在进行毕业设计或者想要了解企业级...

Global site tag (gtag.js) - Google Analytics