mysql 分庫分表 開源 MySQL優化分庫分表

2021-10-20 01:36:17 字數 920 閱讀 8422

昨天面試新人的時候,遇到了這麼乙個問題,按照自己的想法大體聊了一些,但大多是感性的,並沒有完整的了解why and how.

之一,為什麼要分表?

分表,按形式,有水平分表和主附分表。

水平分表常見於按id取模或者按日期將相同表結構的內容雜湊到不同的表上,主附分表常見於有對應關係的多張表,通過主外來鍵進行關聯。

1,解決磁碟系統最大檔案限制

如大家所知,各檔案系統對單個檔案大小的限制是不一樣的。

雖然在現代**架構設計中,這個問題基本上不用考慮,但在面試時,如果能回答上來這點,可以讓體現出較不錯的計算機基礎功底。

fat16(最大分割槽2gb,最大檔案2gb ,最大容量?)

fat32(最大分割槽32gb,最大容量2tb,最大檔案32g)

ntfs(最大分割槽2tb,最大容量,最大檔案2tb)

ext3(最大檔案大小: 2tb,最大檔案極限: 僅受檔案系統大小限制,最大分割槽/檔案系統大小: 4tb,最大檔名長度: 255 字元)

2,減少增量資料寫入時的鎖對查詢的影響,減少長時間查詢造成的表鎖,影響寫入操作等鎖競爭的情況

資料越來越多,查詢邏輯比較複雜的情況下,可能造成表鎖和行鎖,會影響到正常的讀寫需求,如果把資料進行分表,典型的情況有按id和日期進行分表,讀取舊資料和寫入新資料的操作在不同的表裡,這樣就可以避免單張表間產生的鎖競爭,節省排隊的時間開支,增加呑吐量。

需要注意的是,這裡說的減少鎖和排隊的時間開支,並沒有確切的說減少了cpu的運算開支,因為分表以後的運算需求還可能在同一臺裝置上。如果使用了分庫分表則能取得更好的運算速度提公升。

3,同2,由於單錶數量下降,常見的查詢操作由於減少了需要掃瞄的記錄,使得單表單次查詢所需的檢索行數變少,減少了磁碟io,時延變短。

mysql分表分庫實現 MySql分表分庫思路

一.資料庫瓶頸 1.1io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時會產生大量的io 分庫和垂直分表 第二種 網路io瓶頸,請求的資料太多,網路頻寬不夠 分庫 1.2cpu瓶頸 第一種 sql問題,如sql中包含join,group by,order by,非索引字段條...

MySQL範圍分表分庫 mysql 分表分庫策略

唯一id的生成 下面列舉幾種常見的唯一id生成方案,需要滿足兩大核心需求 1.全域性唯一 2趨勢有序 1.用資料庫的auto increment 自增id 來生成,每次通過寫入資料庫一條記錄,利用資料庫id自增的特性獲取唯一,有序的id。優點 使用資料庫原有的功能,相對簡單 能夠保證唯一 能夠保證遞...

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

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