MySql分區、分庫分表、主從複製總結

最近面試經常被問到mysql的高可用的相關問題,分區、分庫分表、主從複製被問起的最多,所以參考資料做一個總結。

分區操作:

  1. 工作原理:對用戶來說,分區表是一個獨立的邏輯鏈表,但底層的MySQL將其分成了多個物理子表(用戶看來是一個整表,但每一個分區表都會使用一個獨立的表文件)。分區後,對代碼上來說是無感知的,代碼該怎麼寫就怎麼寫,不用做特定的改變。執行查詢的時候,優化器會根據分區定義(年齡段、地區、ID段等等)找出那些我們需要的數據所在的分區,然後進行查找。
    在這裏插入圖片描述
    如上圖,比如一張表1000萬條數據,分了5個區,每個區就可以存200萬的數據。這樣查詢起來速度就會快一些。
    分區的主要目的是把數據以較粗的粒度分佈在不同的表中,將相關的數據放在一起,如果想一次性刪除整個分區的數據也很方便。

  2. 適用場景
    1.表非常大,無法全部存在內存中,或者只在表的最後有熱點數據,其他的都是歷史數據。
    2.爲了更好的維護分區數據,對獨立的分區進行對的操作。
    3.分區表的數據可以分佈在不同的機器上面,可以高效的使用資源。
    4.備份和恢復獨立的分區。

  3. 限制
    1.一個表最多隻能分1024個分區。
    2.分區字段中如果有主鍵和唯一索引列,那麼主鍵和唯一索引列必須包含進來。
    3.分區表無法使用外鍵索引。
    4.所有分區都必須使用相同的存儲引擎。
    5.某些存儲引擎不支持分區(MyISAM 和 InnoDB都支持)。

分庫分表:

  1. 工作原理:通過一些hash算法或者工具實現將一張表垂直或者水平進行物理切分。

  2. 分表方式
    水平分割 :分割後可降低在查詢時需要讀取的數據和索引的頁數,同時也降低了索引層數,提高查詢的速度。 切分後變成了多個表,查詢的時候就需要實現算法判斷數據存放在哪一張表上。
    在這裏插入圖片描述
    水平分割適用場景
    1.表中的數據本身具有獨立性,比如各個時期的數據,不同地區的數據,特別是有些數據常用有些不常用。
    2.需要把數據存放在多個介質上(放在不同的服務器上,利用不同服務器的資源)。
    水平分割缺點
    1.增加應用的複雜度,通常查詢時需要多個表名,查詢所有數據需要union操作。
    2.在許多數據庫應用中,這種複雜性往往會超過它帶來的優點。

    垂直分割 :把主鍵和一些列放在一張表,再把主鍵和另外的一些列放在一張表。
    在這裏插入圖片描述
    垂直分割適用場景
    1.表中的一些列常用,另外一些列不常用。
    2.可以使數據行變小,一個數據頁能存放更多的數據,查詢時可以減少I/O次數。
    垂直分割缺點
    1.查詢所有數據需要join(關聯)操作。
    2.在許多數據庫應用中,這種複雜性往往會超過它帶來的優點。

  3. 分表的缺點和限制
    1.分表的策略基於應用層的邏輯算法,一旦算法改變,整個分表邏輯都會改變,擴展性較差。

主從複製:

  1. 工作原理:在主庫上把數據更改記錄到二進制日誌中(binlog),從庫將主庫中的日誌複製到自己的中繼日誌,然後讀取中繼日誌中的事件(增刪改操作的SQL語句),在從庫中執行一遍。
  2. 解決的問題
    1.數據分佈:隨意的開始或停止複製,在不同的地理位置數據備份。
    2.負載均衡:降低單個服務器的壓力。
    3.高可用和故障切換:幫助應用程序避免單點失敗。比如主數據庫機器掛掉,可以立馬切換到從庫,服務是不會受到影響的。
    4.升級測試:使用更高版本的數據庫作爲從庫。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章