应用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) ? $_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 = '.$_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;
}
}
分享到:
相关推荐
- 很简单,网上很多关于分表的都是含糊其辞,没有任何详细的,通用的,既然没有,那么我写一个出来吧。 - 主要目的 - 产品上线以后,数据量越来越大,当一个表有几十万上百万条记录的时候,是时候考虑分表了。...
在处理数据时,我们通常通过模型(Model)来进行数据库的CRUD操作。 批量添加数据通常涉及到以下步骤: 1. **数据准备**:首先,你需要将要插入的数据组织成一个数组或集合。每个元素代表一条记录,包含所有字段的值...
《基于ThinkPHP5.0的各项后台小功能代码实现》 ThinkPHP5.0是中国最流行的PHP框架之一,它为开发者提供了高效、简洁...提供的PDF文档应该包含更多具体的代码实例和详细解释,是深入理解ThinkPHP5.0后台功能的好资料。
Thinkphp代码生成器是一款强大的开发辅助工具,专为基于Thinkphp框架的Web应用程序设计。它极大地提升了开发效率,通过自动化的方式生成表单和实体类,从而减轻了开发者手动编写重复代码的工作负担。这个工具的核心...
本篇文章将详细探讨如何在ThinkPHP5中利用SimHash算法进行海量内容数据的查重。 SimHash是一种基于汉明距离的分布式相似性检测算法,由Charikar于2002年提出。它的核心思想是将任意长度的文本或数据转化为固定长度...
以下小编给大家列出了三种实现thinkphp批量更新数据的方法,写的不好还请见谅,有意见欢迎提出,共同学习进步! 方法一: //批量修改 data二维数组 field关键字段 参考ci 批量修改函数 传参方式 function batch_...
在大数据量的场景下,传统的单数据库架构可能会面临性能瓶颈,这时就需要采用分库分表策略来提升系统处理能力。本教程将详细讲解如何使用PHP实现MySQL的分库分表,帮助你理解并掌握这一核心技能。 首先,我们来探讨...
ThinkPHP 的 Ajax 引擎技术可以使用 XML、JSON、DOM 等技术来实现数据交互,它可以将数据传输到客户端,然后使用 JavaScript 进行数据处理和显示。 传统的 Ajax 数据交互和 ThinkPHP 的 Ajax 数据交互的比较: 1. ...
首先,ThinkPHP的核心理念是“简单而强大”,它采用模型-视图-控制器(MVC)设计模式,将业务逻辑、数据处理和用户界面分离开来,使得代码结构清晰,易于维护。讲义中的内容会涵盖如何创建控制器、模型和视图,以及...
【传智播客ThinkPHP后端代码生成器】是一款针对ThinkPHP框架的高效开发工具,旨在简化后端代码编写过程,提高开发效率。在大型电子商城项目中,它扮演着重要角色,帮助开发者快速生成符合业务逻辑的模型、控制器、...
本文实例讲述了thinkPHP框架实现多表查询的方法。分享给大家供大家参考,具体如下: 我们可以将两个表连起来一起查询数据,我现在有两张表,一个是feedback表和member表,如图: 总目录: 上代码: $where = ...
ThinkPHP5.0引入了中间件,这是一种处理请求和响应的机制,可以在不修改原有代码的情况下,插入额外的功能,如登录检查、日志记录、权限控制等。中间件让代码结构更加清晰,也易于维护和扩展。 七、错误处理与日志 ...
或许你用ThinkPHP做网站都是把一些常用的代码保存在一个文件夹,每次都是复制,再稍作修改,这样也麻烦。 ThinkPHP做GBK编码的网站还有多处乱码。 输出提示信息会乱码,分页有乱码。错误提示有乱码。 为什么其他...
这个过程展示了如何结合ThinkPHP的MVC架构和第三方库来处理复杂的业务需求,为开发者提供了一种便捷的方式将大量数据导出到Excel,便于分析和共享。在实际项目中,你还可以根据需要添加更多功能,如数据过滤、格式化...
本篇文章将详细探讨如何在ThinkPHP5.1框架下进行系统数据的备份与还原,以及其对多数据库链接的支持。 首先,理解数据备份的重要性是必要的。数据库备份是为了防止数据丢失或损坏,它可以在系统崩溃、硬件故障、...
《基于ThinkPHP5.0的各项后台小功能代码实现》 ThinkPHP5.0是一款流行的、高性能的PHP框架,被广泛应用于开发复杂的Web应用程序。本资料集合了基于该框架的多种后台小功能的代码实现,旨在帮助开发者提升工作效率,...
ThinkPHP遵循MVC(Model-View-Controller)设计模式,将业务逻辑、数据处理和用户界面分离,使得代码结构清晰,易于维护。在源代码中,你可以看到Controller、Model和View的实现,了解它们如何协同工作。 二、路由...
ThinkPHP5代码生成器是由开发者自主设计并实现的,其主要功能在于自动生成模型(Model)和控制器(Controller)代码,极大地简化了开发者在项目初期的数据表模型构建和CRUD操作的编写工作。通过此工具,开发者能够...
《ThinkPHP 源代码详解》 在深入探讨ThinkPHP框架的内核源代码之前,首先需要...《ThinkPHP 源代码详解》的CHM帮助文档,正是为此目的而准备,它详细阐述了各个模块的实现细节,是学习ThinkPHP不可或缺的参考资料。