數據庫分表和分庫的原理及基於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; }

創建出分表后,就可以存儲當天的全部數據。每天換一張表,運行效率非常高。。。。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM