快速业务通道

ThinkPHP处理海量数据分表机制详细代码及说明

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23

   应用ThinkPHP内置的分表算法处理百万级用户数据.

  数据表:

  house_member_0

  house_member_1

  house_member_2

  house_member_3

  模型中

  class MemberModel extends AdvModel {

  protected $partition = array(''field''=>''username'',''type''=>''id'',''num''=>''4'');

  public function getDao($data=array()) {

  $data = empty($data) ? ThinkPHP处理海量数据分表机制详细代码及说明 - 凌众科技

快速业务通道

ThinkPHP处理海量数据分表机制详细代码及说明

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

POST : $data;

  $table = $this->getPartitionTableName($data);

  return $this->table($table);

  }

  }

  方法中

  class MemberAction extends BaseAction {

  public function login() {

  if($this->isPost()) {

  $this->validToken();

  $dao = D(''Member'')->getDao();

  $res = $dao->where(''username = ''. ThinkPHP处理海量数据分表机制详细代码及说明 - 凌众科技

快速业务通道

ThinkPHP处理海量数据分表机制详细代码及说明

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

POST[''username''])->find();

  // output 为自定义方法

  // $isAjax - bool

  $this->output(false);

  }

  $this->display();

  }

  }

  /**

  +----------------------------------------------------------

  * 得到分表的的数据表名

  +----------------------------------------------------------

  * @access public

  +----------------------------------------------------------

  * @param array $data 操作的数据

  +----------------------------------------------------------

  * @return string

  +----------------------------------------------------------

  */

  public function getPartitionTableName($data=array()) {

  // 对数据表进行分区

  if(isset($data[$this->partition[''field'']])) {

  $field = $data[$this->partition[''field'']];

  switch($this->partition[''type'']) {

  case ''id'':

  // 按照id范围分表

  $step = $this->partition[''expr''];

  $seq = floor($field / $step)+1;

  break;

  case ''year'':

  // 按照年份分表

  if(!is_numeric($field)) {

  $field = strtotime($field);

  }

  $seq = date(''Y'',$field)-$this->partition[''expr'']+1;

  break;

  case ''mod'':

  // 按照id的模数分表

  $seq = ($field % $this->partition[''num''])+1;

  break;

  case ''md5'':

  // 按照md5的序列分表

  $seq = (ord(substr(md5($field),0,1)) % $this->partition[''num''])+1;

  break;

  default :

  if(function_exists($this->partition[''type''])) {

  // 支持指定函数哈希

  $fun = $this->partition[''type''];

  $seq = (ord(substr($fun($field),0,1)) % $this->partition[''num''])+1;

  }else{

  // 按照字段的首字母的值分表

  $seq = (ord($field{0}) % $this->partition[''num''])+1;

  }

  }

  return $this->getTableName().''_''.$seq;

  }else{

  // 当设置的分表字段不在查询条件或者数据中

  // 进行联合查询,必须设定 partition[''num'']

  $tableName = array();

  for($i=0;$i<$this->partition[''num''];$i++)

  $tableName[] = ''SELECT * FROM ''.$this->getTableName().''_''.$i;

  $tableName = ''( ''.implode(" UNION ",$tableName).'') AS ''.$this->name;

  return $tableName;

  }

  }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号