• 数据库分表和分库的原理及基于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;
    }

    创建出分表后,就可以存储当天的全部数据。每天换一张表,运行效率非常高。。。。


  • 相关阅读:
    更新安装xcode7插件
    提交自己的插件包(package)
    数组包含字典-根据key排序
    primeng 中 pickList组件的使用
    tomcat的启动和部署
    css中如何把鼠标变成手
    angular2新建组件
    Angular2的笔记
    idea 创建springboot工程
    jfinal excel表导出
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7161333.html
Copyright © 2020-2023  润新知