需求:原网站功能庞大,数据库服务器与数据库众多,有部分数据单库多表都不足以应付业务的快速增长(例如用户系统)。我们便有了分库的需求
问题:YII单DB方式已经满足不了我们的需求,急切需要对YII进行扩展设计,支持数据库分库设计
解决方法:
1、在protected/component目录下面新建一个JUnicomActiveRecord.php文件。代码如下:
- class JUnicomActiveRecord extends Ar
- {
- public $dbname = 'unicom1';
- public $userIdKey = 'user_id';
- protected $_userId;
- /**
- * 获得DBConnenction(non-PHPdoc)
- * @see CActiveRecord::getDbConnection()
- */
- public function getDbConnection()
- {
- if ($this->hasProperty($this->userIdKey))
- {
- $this->dbname = $this->chooseDb($this->{$this->userIdKey});
- }
- elseif ($this->_userId)
- {
- $this->dbname = $this->chooseDb($this->_userId);
- }
- return parent::getDbConnection();
- }
- /**
- * 选择数据库
- */
- public function chooseDb($userId)
- {
- $unicom = 'unicom2';
- $userId = (float)$userId;
- switch ($userId)
- {
- case $userId >= 10000 && $userId <= 29999999:
- $unicom = 'unicom1';
- break;
- case $userId >= 30000000 && $userId <= 39999999:
- $unicom = 'unicom2';
- break;
- case $userId >= 40000000 && $userId <= 49999999:
- $unicom = 'unicom3';
- break;
- case $userId >= 50000000 && $userId <= 59999999:
- $unicom = 'unicom4';
- break;
- case $userId >= 60000000 && $userId <= 69999999:
- $unicom = 'unicom5';
- break;
- case $userId >= 70000000 && $userId <= 89999999:
- $unicom = 'unicom6';
- break;
- case $userId >= 210000000 && $userId <= 239999999:
- $unicom = 'unicom7';
- break;
- case $userId >= 240000000 && $userId <= 269999999:
- $unicom = 'unicom8';
- break;
- case $userId >= 270000000 && $userId <= 299999999:
- $unicom = 'unicom27';
- break;
- case $userId >= 1000000000 && ($userId % 2) == 0:
- $unicom = 'unicom9';
- break;
- case $userId >= 1000000000 && ($userId % 2) == 1:
- $unicom = 'unicom10';
- break;
- }
- return $unicom;
- }
- /**
- * 设置用户ID
- *
- * @param int $user_id
- */
- public function setUserId($user_id)
- {
- $this->_userId = $user_id;
- return $this;
- }
- }
2、配置数据库配置文件,将用户库中涉及到的数据库链接配置全部补全
相关推荐
总结,通过Yii框架的灵活配置和扩展支持,我们可以实现读写分离和分库分表,有效提升系统的数据库性能。同时,需要注意在设计过程中充分考虑数据的一致性和查询的便利性,以确保系统的稳定性和可维护性。
Yii框架是PHP开发中的一个高性能、基于组件的MVC(模型-视图-控制器)框架,特别适合开发大型Web应用。...通过深入研究源码,开发者不仅可以提升Yii框架的掌握程度,还能学习到电子商务系统的设计和实现技巧。
Fecshop是一款基于PHP的Yii2框架构建的开源电商系统,专为实现高效、灵活且功能丰富的在线购物体验而设计。Yii2框架以其高性能、安全性和可扩展性著称,使得Fecshop在电商领域中脱颖而出。下面我们将深入探讨Fecshop...
最后,Yii框架具有良好的社区支持和丰富的扩展库,如yiisoft/yii2-gii自动生成代码工具,yiisoft/yii2-debug调试工具,以及各种第三方组件,如用户认证和权限管理RBAC(Role-Based Access Control),这些都可以...
通过分析和学习这个项目,开发者不仅可以掌握Yii框架的使用,还能了解到商城系统设计的全过程,包括需求分析、数据库设计、前后端交互、安全策略等多个方面,这对于提升Web开发技能和项目经验非常有益。
vendor目录包含了所有通过Composer安装的第三方库,包括Yii框架本身。 开发Yii 2.0.11项目时,开发者可以利用Gii代码生成工具快速创建模型、控制器和视图文件,减少手动编码的工作量。此外,框架内置的单元测试和...
本文将介绍如何在网页中实现Ajax翻页效果,模仿Yii框架中的分页功能。Ajax(Asynchronous JavaScript and XML)技术允许我们在不重新加载整个页面的情况下更新部分网页内容,提供更好的用户体验。 首先,观察给定的...
1. **framework**:这是Yii框架的核心代码库,包含各种组件、类库和工具。 - **base**:基础类,提供基本的类定义,如CApplication、CComponent等。 - **db**:数据库相关的组件,如CDbConnection、CDbCommand等。...
15、完全面向对象:Yii框架坚持严格的面向对象编程范式。它没有定义任何全局函数或变量。而且,它定义的类层次结构允许最大的可重用性和定制。 16、友好的使用第三方代码:Yii精心设计让它第三方代码非常好的...
"yii2 图片上传扩展插件"就是为了简化这一过程而设计的。 该插件主要解决以下问题: 1. **图片预览**:允许用户在上传前预览图片,提高用户体验。 2. **多文件上传**:支持一次上传多个图片文件,提高效率。 3. **...
"yii2-webadmin.rar" 文件显然包含了基于 Yii2.0 框架构建的后台管理系统的源代码。这个系统已经集成了诸如日志记录、权限管理和用户登录鉴权等基础功能,展现了 Yii2 的强大性能和组件化开发的优势。 首先,让我们...
**Yii框架概述** Yii是一款高性能、基于组件的PHP框架,专为Web2.0应用设计。它极大地简化了Web应用程序的开发过程,提供了一系列强大的特性,包括MVC(模型-视图-控制器)架构模式、数据库抽象层、缓存管理、身份...
Yii 2.0相比上一代版本进行了重大的改进,包括引入了Composer作为依赖管理工具、使用了更现代的设计模式(如PSR-4自动加载)等,这使得Yii 2.0成为构建复杂Web应用的理想选择之一。 #### 三、项目需求分析 1. **...
在本项目中,“yii mongodb 小说系统.zip”是一个基于Yii框架和MongoDB数据库构建的小说管理系统。Yii是一个高效的PHP框架,专为Web 2.0应用开发而设计,而MongoDB则是一种流行的NoSQL数据库,特别适合处理大量非...
【老爷车yii点位盘 乐酒商城系统微盘源码+完整数据】是一个基于Yii框架开发的H5移动端电商系统。...通过深入研究这个源码,开发者不仅可以熟悉Yii框架的应用,还能掌握H5移动端电商系统的设计和实现。
描述 "yii2 rbac yii2 rest RBAC Auth manager for-yii2-rest-rbac" 似乎简略地重复了标题中的信息,但我们可以从中推测这个资源是专门为了在 Yii2 中管理和实现 RESTful API 的 RBAC 控制而设计的。 标签为空,...
6. **数据库优化**:为了处理大量用户和商品数据,YiiPiN可能运用了数据库索引、分表分库、读写分离等策略,确保系统的高并发性能。 7. **支付集成**:电商系统通常需要集成第三方支付接口,如支付宝、微信支付等,...