分庫分表實戰問題

2021-10-08 09:12:53 字數 1137 閱讀 9753

1.分庫分表中水平拆分和垂直拆分的區別?

水平拆分:將表資料拆分到不同的資料資料庫中。

垂直拆分:把乙個大表拆成多個小表。字段進行拆分。

分表:是指的是把表資料拆分到多張表裡面。

range分發:每個月生成乙個新錶。如果訪問新的資料還好,但是訪問舊的資料就麻煩一些。

hash分發:平均分配,但是擴容的話會比較麻煩。

2.如何讓未分庫分表的系統,設計成分庫分表的系統?

1)停機遷移方案

2)雙寫遷移方案

修改系統中所有寫庫的**,同時讓他寫老庫和新的分庫分表的庫。

單錶的資料中取資料,同步到分庫分表的系統,如果分庫分表中不存在,直接寫入進去。如果存在比較時間戳,單錶的資料比資料庫中的要新,就覆蓋。遷移完了進行檢查,檢查完了之後一摸一樣就可以關掉開始的寫單錶,如果不一樣迴圈幾次,直到一樣。

3.如何設計可以動態擴容所容的分庫分表方案?

例如 3個庫 12張表的資料,擴容到6個庫12張表。

【解決方案】

1.就一次性,一開始設計32個庫 32張表

四個伺服器,每個服務建立8個庫,每個庫建立32張表。現在支援的寫併發8000/s,擴容的話,加四台伺服器。每台伺服器變成4個庫,每個庫32張表。直接遷移庫,比較快捷和方便。最多可以擴到32個伺服器。每個伺服器放乙個庫,乙個庫存32張表。 

有多少個庫,取模32的時候放到指定的庫裡面。放到指定表,再取32的模。

4.分庫分表之後,id怎麼解決?

1)資料庫自增id

2)uuid

3)獲取當前時間

4)雪花演算法

5.mysql主從複製是如何實現的?

主庫將變更寫binlog日誌中,然後從庫連線到主庫之後,從庫有乙個io執行緒,將主庫binlog日誌拷貝到本地,寫入乙個中繼日誌中。然後從庫會有乙個sql執行緒從中繼日誌中讀取binlog日誌,就會在本地執行一遍sql。

mysql有半同步複製來解決資料庫主庫資料丟失問題。意思是當資料存入binlog日誌後,緊接著會傳送給從庫,從庫會將日誌寫入relaylog日誌中,接著會返回乙個ack。至少乙個ack才算成功。

mysql有並行複製來解決主從同步延時。指的是從庫開啟多個執行緒,並行讀取relay log中不同庫的日誌,然後並行重放不同庫的日誌,這是庫級別的並行。

強制讀主庫來解決延時問題。

mysql 分庫分表實戰 MySQL分庫分表實戰

為什麼要分庫分表 在大型 中,當使用者量以及使用者產生的業務資料量達到單庫單錶效能極限時,為了支撐業務可持續發展,對於重要的核心業務必然要進行分庫分表來儲存業務資料。對於非核心業務產生的大量資料,例如爬蟲爬取的資訊,論壇產生的資料等,可以考慮把資料儲存在像mongodb這樣的nosql儲存裡面,這些...

企業Shell實戰 MySQL分庫分表備份指令碼

企業 shell 實戰 mysql分庫分表備份 今天是2015年的最後一天,大家都開心的跨年,而我還在苦逼的呵呵 省略 此處內容來自老男孩教育oldboy以及老男孩26期王續精彩分享整理而來 為表示感謝,特整理此篇博文分享給大家!root db02 scripts cat server script...

企業Shell實戰 MySQL分庫分表備份指令碼

企業 shell 實戰 mysql分庫分表備份 今天是2015年的最後一天,大家都開心的跨年,而我還在苦逼的呵呵 省略 root db02 scripts cat server scripts store backup.sh 指令碼詳細內容 bin sh myuser root mypass xul...