热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库分表和分库的原理及基于thinkPHP的实现方法

为什么要分表,分库:当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类数据存入不同的几张表,当分表已经不能满足

为什么要分表,分库: 当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类数据存入不同的几张表,当分表已经不能满足

为什么要分表,分库:

当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类数据存入不同的几张表,当分表已经不能满足需求是,我们还可以分库,及用几个数据库存储。

分表会随着需求和功能的不同有不同的实现方法,下面是我做项目中的一个例子:

需求:product,product_price两张表是一对多的关系,及产品和产品每日的价格,一个产品对应几种价格,现在由于产品表数据量很大,每天多有上百万条数据,就以天为单位对表进行分表,以月为单位对数据库进行分库,表的命名为‘product_price2014-07-20’表格式:前面是原数据库表名,后面是日期(年-月-日).

创建数据库和表的代码如下:

function get_product_price_table(){
    $db_info=array();   
    
    //这个月
    $newmot_time=date("Y-m");
    //今天日期
    $newday_time=date("Y-m-d");
    //本月数据库,今天的表
    $db_name = 'acbooking'.$newmot_time;
    $table_name = "product_price".$newday_time;
    
    //昨天的日期
    $yesday_time = date("Y-m-d",strtotime("-1 day"));
    
    //取出昨天的数据,获取 product_price的最后id,作为新表id的起始值
    $last_one_product_price = get_info('product_price_table_id',array('time'=>$yesday_time));
    if($last_one_product_price['table_id_end']>0){
        $table_id = $last_one_product_price['table_id_end']+1;
    }else{
        $table_id = 1;
    }    
    
    //创建数据库	
	$Db_string_line = C('DB_TYPE').'://'.C('DB_USER').':'.C('DB_PWD').'@'.C('DB_HOST').'/'.$new_db_database;
	$DB_P=C('DB_PREFIX');
	$Model=M($table,$DB_P,$Db_string_line);
	$db_name=$Model->execute($sql);//通过sql语句配置创建新数据库新标,此处省略了sql语句
 
//创建数据表
	$Db_string_line = C('DB_TYPE').'://'.C('DB_USER').':'.C('DB_PWD').'@'.C('DB_HOST').'/'.$new_db_database;
	$DB_P=C('DB_PREFIX');
	$Model=M($table,$DB_P,$Db_string_line);
	$table_name=$Model->execute($sql);
    //返回新 数据库,新的表
    $db_info['database']=$db_name;
    $db_info['table']=$table_name;
    return $db_info;
}

创建出分表后,即可存储当天的所有数据,每天换一张表,执行效率很高。。。。


推荐阅读
author-avatar
无奈中有几多Rudy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有