zoukankan      html  css  js  c++  java
  • 数据库分表和分库的原理及基于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;
    }

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


  • 相关阅读:
    三个心态做人做学问 沧海
    成功走职场要找准自己的"快捷键" 沧海
    免费离线下载 拂晓风起
    Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录) 拂晓风起
    无法读取mdb 如果连接不了ACCESS mdb文件,就尝试安装MDAC 拂晓风起
    Netbeans 使用 Hibernate 逆向工程 生成hbm和pojo 拂晓风起
    如何点击单选框 radio 后面的文字,选中单选框 拂晓风起
    Java 连接access 使用access文件 不用配置 拂晓风起
    mysql下如何执行sql脚本 拂晓风起
    Hibernate配置access Hibernate 连接 access 拂晓风起
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7161333.html
Copyright © 2011-2022 走看看