Yii分表插件Par(Partition Active Record)[原创]
2013-08-05 00:00
531 查看
PAR
An extension of Yii ORM to support partition tables.特点
基于表的一个字段计算hash并分表,方便使用,初始化时指定需要hash的字段即可。使用方法
将par.php放在components目录下,需要分表支持的model继承Par类,并定义$tablename静态变量作为表的未分表名称。代码如下:Controller
class IndexController extends Controller { public function actionTest() { $test = new Test(); $test->name='a test name'; $test->save(); {{or}} $test = Test::model()->findByPk(3); var_dump($test->name); } }
Model
class Test extends Par { public static $tablename = 'test'; //未分表前的表名 public static function model($opts = null, $entry = array(), $className=__CLASS__) { return parent::model($opts, $entry, $className); } public function rules() { return array( array('url, name', 'safe'), ); } }
源码
class Par extends CActiveRecord { const STRING_HASH = 1; const DATE_HASH = 2; protected static $tablename = 'pars'; protected $hashnum = 10; protected $hashtype = self::DATE_HASH; protected $_key; /** * Constructor. * @param array $entry=array($key=>$value) key is the partition field name. * @param array $opts some optitions: hash_num=>the hash num default 10. */ public function __construct($opts = array(), $entry = array()){ if($opts === null){ return; } $this->parseParams($opts, $entry); parent::__construct(); } public static function model($opts = null, $entry = array(), $className=__CLASS__) { $model = new $className($opts, $entry); return $model; } public function tableName() { return static::$tablename; } protected function parseParams($opts, $entry){ if(isset($opts['hash_num'])){ $this->hashnum = $opts['hash_num']; } if(isset($opts['hash_type'])){ $this->hashtype = $opts['hash_type']; } if(!empty($entry)){ $key = key($entry); $value = $entry[$key]; $this->_key = $value; } static::$tablename .= '_'.$this->getHashTablename(); } //根据字符串hash到十进制,计算表hash值 protected function getHashTablename(){ switch($this->hashtype){ case self::STRING_HASH: $str = base_convert(md5($this->_key),16, 10); $key_hash = substr($str, strlen($str)-1, 1); $table_hash = $key_hash % $this->hashnum; break; case self::DATE_HASH: $table_hash = date('Y_m'); 3ff0 break; default: break; } return $table_hash; } }
源码地址:https://github.com/fate2013/par
相关文章推荐
- yii 日期插件
- 【原创】mac下为eclipse安装反编译插件
- Reflector5.0反编译工具及插件集[原创]
- 对以前改的c#分页插件的补充[原创]
- YII中使用自带的日期插件
- Yii框架官方指南系列26——使用数据库:关系型 Active Record
- 安装使用yii-debug-toolbar,yii框架的调试插件
- 原创jQuery插件之图片自适应
- 原创基于标签的表单验证插件,有源码,有注释,有实例,使用超级方便。
- (原创)一个JavaScript Function Outliner插件 第三个版本 让你的JavaScript代码也支持折叠
- 关于Yii的菜单插件CMenu和面包屑breadcrumbs路径管理插件的一些使用问题
- (原创)jseclipse插件和myeclipse的使用优化Tips
- [原创] JavaScript 图片放大镜插件 enlarge.js 以及移动版 enlarge.touch.js
- 原创 jQuery 幻灯插件
- 【原创】FireFox 常用插件整理(一)
- 【原创】一个非常简洁基于jquery原创无限级联ajax异步请求下拉框插件
- [原创]jQuery插件Realtime-Modifier正式发布!
- 【原创】WinForm导出数据到EXCEL(根据微软的Excel插件)
- [原创]分表处理设计思想和实现
- 【原创】微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析