資料庫分庫分表

2021-10-07 20:36:08 字數 1692 閱讀 3555

解決痛點:資料量過大。對關係型資料庫效能,造成影響。訪問效能變慢。

例子:例如乙個資料庫有3張表,乙個是商品資訊表,乙個是店鋪表,乙個是區域表。

問題:目前要根據商品id 展示出 商品的描述,店鋪的名稱,和店鋪所在的城市名字。那麼就是3張表關聯查詢。如果3張表資料量越來越大,單錶資料量超過1000w。再像之前這麼查,是不可能了。增加索引也是一樣的。還是慢。

想到的解決方案:

分庫分表包括分庫和分表兩個部分,在生產中通常包括:垂直分庫、水平分庫、垂直分表、水平分表四種方式。

那麼就是將商品資訊表,分成乙個商品基本資訊表,乙個商品詳情資訊表。

它帶來的提公升是:

1.為了避免io爭搶並減少鎖表的機率。

2.充分發揮熱門資料的操作效率。

通常我們按以下原則進行垂直拆分:

把不常用的字段單獨放在一張表;

把text,blob等大字段拆分出來放在附表中;

經常組合查詢的列放在一張表中;

那麼就是將商品的表,放乙個資料庫;店鋪表放乙個資料庫;區域表放乙個資料庫。

它帶來的提公升是:

解決業務層面的耦合,業務清晰

能對不同業務的資料進行分級管理、維護、監控、擴充套件等

高併發場景下,垂直分庫一定程度的提公升io、資料庫連線數、降低單機硬體資源的瓶頸

把同乙個表的資料按一定規則拆到不同的資料庫中,每個庫可以放在不同的伺服器上

垂直分庫是把不同表拆到不同資料庫中,水平分庫是對資料行的拆分,不影響表結構

那麼就是將商品資訊資料庫,將資料劃分為2個資料庫,2個資料庫表結構還是一樣的。每個資料庫還是2張表。根據商品的id的單數,雙數,將商品資訊的資料分為了2部分。

它帶來的提公升是:

解決了單庫大資料的壓力,效能瓶頸。

提高了系統的穩定性及可用性。(穩定性體現在io衝突減少,鎖定減少,可用性指某個庫出問題,部分可用)

還是針對表,不是針對欄位了。還是針對資料,在同乙個資料庫內,把同乙個表的資料按一定規則拆到多個表中。

那麼我再將上訴的商品資訊2個資料庫中,每個資料庫的那倆張表的資料,再進行乙個拆分。按照店鋪的id的單數,雙數,再進行乙個劃分。也就是,這個商品資訊,2個庫,每個庫2套表(商品基本資訊+商品詳細資訊),表結構一樣,資料不一樣。

它帶來的提公升是:

優化單一表資料量過大而產生的效能問題

避免io爭搶並減少鎖表的機率

總結:垂直分表和垂直分庫,是從資料庫的結構來劃分,垂直分表是按照表的字段,垂直分庫是按照表的分類。一般是資料庫設計的時候考慮這倆種方式。

水平分庫和水平分表,是按照資料行的方式去劃分,水平分庫,將乙個表的資料按照規則劃分為多個庫。水平分表,將乙個表的資料按照規則拆分多個表。一般是後期單錶資料量大了,採用這倆種方式。不過,單錶資料量不是特別大。首先考慮,快取,讀寫分離,索引等方案。

這4種方式所帶來的問題:

事務一致性問題,帶來分布式事務的問題。

跨資料庫例項關聯查詢。

分頁,排序也複雜了。

主鍵可能會重複。

公共表,比如參數列,聯合查詢頻率較高。

資料庫分庫分表

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

資料庫分庫 分表

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

資料庫分庫分表

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