垂直拆分:
垂直拆分是根據資料庫裡面的資料表的業務進行拆分,比如:乙個資料庫裡面既存在使用者資料,又存在訂單資料,那麼垂直拆分可以把使用者資料放入到使用者庫,把訂單資料放到訂單庫。垂直分表是對資料表進行垂直拆分的一種方式,常見是把乙個多欄位的大表按常用字段和非常用字段進行拆分,每個表裡面的資料記錄數一般情況下是相同的,只是欄位不一樣,使用主鍵關聯。
比如原始使用者表是:
垂直拆分後的表是:
垂直拆分的優點是:
1. 可以使得資料變小,乙個資料塊(block)就能存放更多的資料,在查詢時就會減少i/o次數(每次查詢時讀取的block就少)
2. 可以達到最大化利用cache的目的,具體在垂直拆分的時候可以將不常變的字段放一起,將經常改變的放一起
3. 資料維護簡單
缺點是:
1. 主鍵出現冗餘,需要管理冗餘例
2. 會引起表連線join操作(增加cpu開銷)可以通過在業務伺服器上進行join來減少資料庫壓力
3. 依然存在單錶資料量過大的問題(需要水平拆分)
4. 事務處理複雜
水平拆分
概述水平拆分是通過某種策略將資料分片來儲存,分庫內分表和分庫兩部分,每片資料會分散到不同的mysql表或庫,達到分布式的效果,能夠支援非常大的資料量。前面的表分割槽本質上也是一種特殊的庫內分表
庫內分表,僅僅是單純的解決了單一表資料過大的問題,由於沒有把錶的資料分布到不同的機器上,因此對於減輕mysql伺服器的壓力來說,並沒有太大的作用,大家還是競爭同乙個物理機上的io、cpu、網路,這個就要通過分庫來解決
水平拆分表如下:
實際情況中往往會是垂直拆分和水平拆分的結合,即將users_a_m和users_n_z再拆成users和userextras,這樣一共四張表
水平拆分的優點是:
不存在單庫大資料和高併發的效能瓶頸
應用端改造較少
提高了系統的穩定性和負載能力
缺點是:
分片事務一致性難以解決
跨節點join效能差,邏輯複雜
資料多次擴充套件難度跟維護量極大
垂直拆分與水平拆分
垂直拆分 垂直拆分是指資料表列的拆分,把一張列比較多的表拆分為多張表 通常我們按以下原則進行垂直拆分 把不常用的字段單獨放在一張表。把text,bigint等大字段拆分出來放在附表中。經常組合查詢的列放在一張表中 聯合索引 垂直拆分的表在查詢的時候用join關鍵字連線起來即可。水平拆分 水平拆分是指...
垂直拆分和水平拆分
前言 做資料庫分表的時候,總是能看到水平切分 垂直切分,但是並不能理解何為水平 何為垂直。僅此做個記錄。一般情況下說的水平切分 垂直切分,都是指的資料庫層面的。隨著業務量的增加,資料量肯定快速增長,拿mysql來說,單錶資料量在百萬級內讀取效率還是可以的,可是一旦達到千萬級,效能會有較大的降低。如果...
水平拆分和垂直拆分
網際網路時代談論最多的話題就是拆分。拆分一般分為水平拆分和垂直拆分,這並不單指對資料庫或者快取的拆分,主要是表達一種分而治之的思想。水平拆分是指由於單一節點無法滿足需求,需要擴充套件為多個節點,多個節點具有一直的功能,組成乙個服務池,乙個節點服務一部分請求量,所有節點共同處理大規模高併發的請求量。垂...