日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
mysql中怎么實現(xiàn)水平切分

今天就跟大家聊聊有關(guān)MySQL中怎么實現(xiàn)水平切分,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

目前創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、冠縣網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

方法一:使用MD5哈希
做法是對UID進行md5加密,然后取前幾位(我們這里取前兩位),然后就可以將不同的UID哈希到不同的用戶表(user_xx)中了。
Php代碼
function getTable( $uid ){
$ext = substr ( md5($uid) ,0 ,2 );
return "user_".$ext;
}
通過這個技巧,我們可以將不同的UID分散到256中用戶表中,分別是user_00,user_01 ……    user_ff。因為UID是數(shù)字且遞增,根據(jù)md5的算法,可以將用戶數(shù)據(jù)幾乎很均勻的分別到不同的user表中。
但是這里有個問題是,如果我們的系統(tǒng)的用戶越來越多,勢必單張表的數(shù)據(jù)量越來越大,而且根據(jù)這種算法無法擴展表,這又會回到文章開頭出現(xiàn)的問題了。
方法二:使用移位
具體方法是:
Php代碼
public function getTable( $uid ) {
return "user_" . sprintf( "%04d", ($uid >> 20) );
}
這里,我們將uid向右移動20位,這樣我們就可以把大約前100萬的用戶數(shù)據(jù)放在第一個表user_0000,第二個100萬的用戶數(shù)據(jù)放在 第二個表user_0001中,這樣一直下去,如果我們的用戶越來越多,直接添加用戶表就行了。由于我們保留的表后綴是四位,這里我們可以添加1萬張用戶 表,即user_0000,user_0001 ……
user_9999。一萬張表,每張表100萬數(shù)據(jù),我們可以存100億條用戶記錄。當(dāng)然,如果你的用戶數(shù)據(jù)比這還多,也不要緊,你只要改變保 留表后綴來增加可以擴展的表就行了,如如果有1000億條數(shù)據(jù),每個表存100萬,那么你需要10萬張表,我們只要保留表后綴為6位即可。
上面的算法還可以寫的靈活點:
Php代碼
/**
* 根據(jù)UID分表算法
* @param int $uid  //用戶ID
* @param int $bit    //表后綴保留幾位
* @param int $seed //向右移動位數(shù)
*/
function getTable( $uid , $bit , $seed ){
return "user_" . sprintf( "%0{$bit}d" , ($uid >> $seed) );
}
總結(jié):
上面兩種方法,都要對我們當(dāng)前系統(tǒng)的用戶數(shù)據(jù)量做出可能最大的預(yù)估,并且對數(shù)據(jù)庫單個表的最大承受量做出預(yù)估。
比如第二種方案,如果我們預(yù)估我們系統(tǒng)的用戶是100億,單張表的最優(yōu)數(shù)據(jù)量是100萬,那么我們就需要將UID移動20來確保每個表是100萬的數(shù)據(jù),保留用戶表(user_xxxx)四位來擴展1萬張表。
又如第一種方案,每張表100萬,md5后取前兩位,就只能有256張表了,系統(tǒng)總數(shù)據(jù)庫就是:256*100萬;如果你系統(tǒng)的總數(shù)據(jù)量的比這還多,那你實現(xiàn)肯定要MD5取前三位或者四位甚至更多位了。

看完上述內(nèi)容,你們對mysql中怎么實現(xiàn)水平切分有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)站標(biāo)題:mysql中怎么實現(xiàn)水平切分
文章鏈接:http://www.dlmjj.cn/article/jicphp.html