`
wbj0110
  • 浏览: 1599149 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多

需求:原网站功能庞大,数据库服务器与数据库众多,有部分数据单库多表都不足以应付业务的快速增长(例如用户系统)。我们便有了分库的需求

 

问题:YII单DB方式已经满足不了我们的需求,急切需要对YII进行扩展设计,支持数据库分库设计

 

解决方法

 

1、在protected/component目录下面新建一个JUnicomActiveRecord.php文件。代码如下:

 

[php] view plaincopy
 
  1. class JUnicomActiveRecord extends Ar   
  2. {  
  3.     public $dbname      = 'unicom1';  
  4.     public $userIdKey   = 'user_id';  
  5.     protected $_userId;  
  6.       
  7.     /** 
  8.      * 获得DBConnenction(non-PHPdoc) 
  9.      * @see CActiveRecord::getDbConnection() 
  10.      */  
  11.     public function getDbConnection()  
  12.     {  
  13.         if ($this->hasProperty($this->userIdKey))  
  14.         {  
  15.             $this->dbname    = $this->chooseDb($this->{$this->userIdKey});  
  16.         }  
  17.         elseif ($this->_userId)   
  18.         {  
  19.             $this->dbname    = $this->chooseDb($this->_userId);  
  20.         }  
  21.         return parent::getDbConnection();  
  22.     }  
  23.       
  24.     /** 
  25.      * 选择数据库 
  26.      */  
  27.     public function chooseDb($userId)  
  28.     {  
  29.         $unicom = 'unicom2';  
  30.         $userId = (float)$userId;  
  31.         switch ($userId)  
  32.         {  
  33.             case $userId >= 10000 && $userId <= 29999999:  
  34.                 $unicom = 'unicom1';  
  35.                 break;  
  36.             case $userId >= 30000000 && $userId <= 39999999:  
  37.                 $unicom = 'unicom2';  
  38.                 break;  
  39.             case $userId >= 40000000 && $userId <= 49999999:  
  40.                 $unicom = 'unicom3';  
  41.                 break;  
  42.             case $userId >= 50000000 && $userId <= 59999999:  
  43.                 $unicom = 'unicom4';  
  44.                 break;  
  45.             case $userId >= 60000000 && $userId <= 69999999:  
  46.                 $unicom = 'unicom5';  
  47.                 break;  
  48.             case $userId >= 70000000 && $userId <= 89999999:  
  49.                 $unicom = 'unicom6';  
  50.                 break;  
  51.             case $userId >= 210000000 && $userId <= 239999999:  
  52.                 $unicom = 'unicom7';  
  53.                 break;  
  54.             case $userId >= 240000000 && $userId <= 269999999:  
  55.                 $unicom = 'unicom8';  
  56.                 break;  
  57.             case $userId >= 270000000 && $userId <= 299999999:  
  58.                 $unicom = 'unicom27';  
  59.                 break;  
  60.             case $userId >= 1000000000 && ($userId % 2) == 0:  
  61.                 $unicom = 'unicom9';  
  62.                 break;  
  63.             case $userId >= 1000000000 && ($userId % 2) == 1:  
  64.                 $unicom = 'unicom10';  
  65.                 break;  
  66.          }  
  67.          return $unicom;  
  68.     }  
  69.       
  70.     /** 
  71.      * 设置用户ID 
  72.      * 
  73.      * @param int $user_id 
  74.      */  
  75.     public function setUserId($user_id)  
  76.     {  
  77.         $this->_userId   = $user_id;  
  78.         return $this;  
  79.     }  
  80. }  

2、配置数据库配置文件,将用户库中涉及到的数据库链接配置全部补全

分享到:
评论

相关推荐

    Yii 读写分离 分表分库

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

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

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

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

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

    yii framework 商城

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

    用Yii写的商城源代码

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

    yii-advanced-app-2.0.11.tgz

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

    ajax翻页效果模仿yii框架自己写的

    本文将介绍如何在网页中实现Ajax翻页效果,模仿Yii框架中的分页功能。Ajax(Asynchronous JavaScript and XML)技术允许我们在不重新加载整个页面的情况下更新部分网页内容,提供更好的用户体验。 首先,观察给定的...

    yii-1.1.5.r2654.zip

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

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

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

    yii2 图片上传扩展插件

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

    yii2-webadmin.rar

    "yii2-webadmin.rar" 文件显然包含了基于 Yii2.0 框架构建的后台管理系统的源代码。这个系统已经集成了诸如日志记录、权限管理和用户登录鉴权等基础功能,展现了 Yii2 的强大性能和组件化开发的优势。 首先,让我们...

    Yii的开发说明(中文版)

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

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

    Yii 2.0相比上一代版本进行了重大的改进,包括引入了Composer作为依赖管理工具、使用了更现代的设计模式(如PSR-4自动加载)等,这使得Yii 2.0成为构建复杂Web应用的理想选择之一。 #### 三、项目需求分析 1. **...

    yii mongodb 小说系统.zip

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

    老爷车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. **支付集成**:电商系统通常需要集成第三方支付接口,如支付宝、微信支付等,...

Global site tag (gtag.js) - Google Analytics