1、概念:以字段為依據,按照一定策略(hash、range等),將乙個庫中的資料拆分到多個庫中。
2、結果:
每個庫的結構都一樣;
每個庫的資料都不一樣,沒有交集;
所有庫的並集是全量資料;
3、場景:系統絕對併發量上來了,分表難以根本上解決問題,並且還沒有明顯的業務歸屬來垂直分庫。
4、分析:庫多了,io和cpu的壓力自然可以成倍緩解。
1、概念:以字段為依據,按照一定策略(hash、range等),將乙個表中的資料拆分到多個表中。
2、結果:
每個表的結構都一樣;
每個表的資料都不一樣,沒有交集;
所有表的並集是全量資料;
3、場景:系統絕對併發量並沒有上來,只是單錶的資料量太多,影響了sql效率,加重了cpu負擔,以至於成為瓶頸。
4、分析:表的資料量少了,單次sql執行效率高,自然減輕了cpu的負擔。
1、概念:以表為依據,按照業務歸屬不同,將不同的表拆分到不同的庫中。
2、結果:
每個庫的結構都不一樣;
每個庫的資料也不一樣,沒有交集;
所有庫的並集是全量資料;
3、場景:系統絕對併發量上來了,並且可以抽象出單獨的業務模組。
4、分析:到這一步,基本上就可以服務化了。例如,隨著業務的發展一些公用的配置表、字典表等越來越多,這時可以將這些表拆到單獨的庫中,甚至可以服務化。再有,隨著業務的發展孵化出了一套業務模式,這時可以將相關的表拆到單獨的庫中,甚至可以服務化。
1、概念:以字段為依據,按照欄位的活躍性,將表中字段拆到不同的表(主表和擴充套件表)中。
2、結果:
2.1、每個表的結構都不一樣;
2.2、每個表的資料也不一樣,一般來說,每個表的字段至少有一列交集,一般是主鍵,用於關聯資料;
2.3、所有表的並集是全量資料;
3、場景:系統絕對併發量並沒有上來,表的記錄並不多,但是欄位多,並且熱點資料和非熱點資料在一起,單行資料所需的儲存空間較大。以至於資料庫快取的資料行減少,查詢時會去讀磁碟資料產生大量的隨機讀io,產生io瓶頸。
4、分析:可以用列表頁和詳情頁來幫助理解。垂直分表的拆分原則是將熱點資料(可能會冗餘經常一起查詢的資料)放在一起作為主表,非熱點資料放在一起作為擴充套件表。這樣更多的熱點資料就能被快取下來,進而減少了隨機讀io。拆了之後,要想獲得全部資料就需要關聯兩個表來取資料。
但記住,千萬別用join,因為join不僅會增加cpu負擔並且會講兩個表耦合在一起(必須在乙個資料庫例項上)。關聯資料,應該在業務service層做文章,分別獲取主表和擴充套件表資料然後用關聯字段關聯得到全部資料。
資料庫之分庫分表 垂直?水平?
原文 資料庫之分庫分表 垂直?水平?不管是io瓶頸,還是cpu瓶頸,最終都會導致資料庫的活躍連線數增加,進而逼近甚至達到資料庫可承載活躍連線數的閾值。在業務service來看就是,可用資料庫連線少甚至無連線可用。接下來就可以想象了吧 併發量 吞吐量 崩潰 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫...
什麼是垂直分庫分表,水平分庫分表
垂直分片 按照業務拆分的方式稱為垂直分片,又稱為縱向拆分,它的核心理念是專庫專用。在拆分之前,乙個資料庫由多個資料表構成,每個表對應著不同的業務。而拆分之後,則是按照業務將表進行歸類,分布到不同的資料庫中,從而將壓力分散至不同的資料庫。下圖展示了根據業務需要,將使用者表和訂單表垂直分片到不同的資料庫...
資料庫水平分庫,垂直分庫的新理解
水平分庫 當資料量巨大時,將資料放到不同的表中,比如表1,表2,表3,垂直分庫 當一張表的字段太多,可拆分出一張或多張分表,根據主鍵唯一標示 新理解 垂直分庫 當一張表中字段不多,當某些字段長度過長,表占用空間很大,檢索表的時候需要執行大量的io 資料庫檢索的本質是對硬碟中的檔案進行io訪問 此時可...