資料庫的分庫分表

2021-09-26 19:57:34 字數 1696 閱讀 7349

(1)概念:以字段為依據,按照一定策略(hash、range等),將乙個庫中的資料查分到多個庫中

(2)結果:

每個庫的結構都一樣;

每個庫的資料都不一樣,沒有交集;

所有庫的並集是全量資料;

(3)場景:系統絕對併發量上來了,分表難以根本上解決問題,並且還沒有明顯的業務歸屬來垂直分庫。

(4)分析:庫多了,io和cpu的壓力自然可以成倍緩解。

(1)概念:以字段為依據,按照一定策略(hash、range等),將乙個表中的資料拆分到多個表中。

(2)結果:

每個表的結構都一樣

每個表的資料都不一樣,沒有交集;

所有表的並集是全量資料;

(3)場景:系統絕對併發量並沒有上來,只是單錶的資料量太多,影響了sql效率,加重了cpu負擔,以至於成為瓶頸。

(4)分析:表的資料量少了,單次sql執行效率高,自然減輕了cpu的負擔。

(1)概念:以表為依據,按照業務歸屬不同,將不同的表拆分到不同的庫中。

(2)結果:

每個庫的結構都不一樣;

每個庫的資料也不一樣,沒有交集;

所有庫的並集是全量資料;

(3)場景:系統絕對併發量上來了,並且可以抽象出單獨的業務模組。

(4)分析:到這一步,基本上就可以服務化了。例如,隨著業務的發展一些公用的配置表、字典表等越來越多,這時可以                      將這些表拆到單獨的庫中,甚至可以服務化。再有,隨著業務的發展孵化出了一套業務模式,這時可以將相關                      的表拆到單獨的庫中,甚至可以服務化。

(1)概念:以字段為依據,按照欄位的活躍性,將表中字段拆到不同的表(主表和擴充套件表)中。

(2)結果:

每個表的結構都不一樣;

每個表的資料也不一樣,一般來說,每個表的字段至少有一列交集,一般是主鍵,用於關聯資料;

所有表的並集是全量資料;

(3)場景:系統絕對併發量並沒有上來,表的記錄並不多,但是欄位多,並且熱點資料和非熱點資料在一起,單行資料所需的儲存空間較大。以至於資料庫快取的資料行減少,查詢時會去讀磁碟資料產生大量的隨機讀io,產生io瓶頸。

(4)分析:可以用列表頁和詳情頁來幫助理解。垂直分表的拆分原則是將熱點資料(可能會冗餘經常一起查詢的資料)放在一起作為主表,非熱點資料放在一起作為擴充套件表。

這樣更多的熱點資料就能被快取下來,進而減少了隨機讀io。拆了之後,要想獲得全部資料就需要關聯兩個表來取資料。但記住,千萬別用join,因為join不僅會增加cpu負擔並且會講兩個表耦合在一起(必須在乙個資料庫例項上)。關聯資料,應該在業務service層做文章,分別獲取主表和擴充套件表資料然後用關聯字段關聯得到全部資料。

資料庫分庫分表

1 基本思想之什麼是分庫分表?從字面上簡單理解,就是把原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存到多個表上。2 基本思想之為什麼要分庫分表?資料庫中的資料量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量也會越來越大,相...

資料庫分庫 分表

分庫的優點是 實現簡單,庫與庫之間界限分明,便於維護,缺點是不利於頻繁跨庫操作,單錶資料量大的問題解決不了。分表的優點是 能解決分庫的不足點,但是缺點卻恰恰是分庫的優點,分表實現起來比較複雜,特別是分表規則的劃分,程式的編寫,以及後期的 資料庫拆分移植維護。實際應用中,一般網際網路企業的路線都是先分...

資料庫分庫分表

簡單了解資料庫分庫分表,以及資料庫的分片 什麼是分庫分表 原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存在到多個表上 為什麼分庫分表 當一張表的資料達到幾千萬時,你查詢一次所花的時間會變多,如果有聯合查詢的花,我想啃根會死在那。分表的目的就在於此,減少資料庫的負擔,縮短查...