中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中怎么實現水平切分

發布時間:2021-08-04 16:50:57 來源:億速云 閱讀:171 作者:Leah 欄目:數據庫

今天就跟大家聊聊有關mysql中怎么實現水平切分,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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

看完上述內容,你們對mysql中怎么實現水平切分有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿拉尔市| 新营市| 玛沁县| 慈利县| 泽普县| 张北县| 财经| 上思县| 武汉市| 黎城县| 府谷县| 万宁市| 娱乐| 十堰市| 汉中市| 驻马店市| 新源县| 兴业县| 略阳县| 法库县| 绥中县| 定襄县| 灌南县| 长宁区| 德化县| 南昌市| 绍兴县| 阳新县| 九江市| 丹东市| 高碑店市| 肃宁县| 凤翔县| 察隅县| 资阳市| 赫章县| 安阳县| 安图县| 大竹县| 大宁县| 湘阴县|