資料庫分庫分表

2021-09-26 13:19:17 字數 971 閱讀 1755

垂直拆分

垂直分表

也就是「大表拆小表」,基於列欄位進行的。一般是表中的字段較多,將不常用的, 資料較大,長度較長(比如text型別字段)的拆分到「擴充套件表「。 一般是針對那種幾百列的大表,也避免查詢時,資料量太大造成的「跨頁」問題。

垂直分庫

垂直分庫針對的是乙個系統中的不同業務進行拆分,比如使用者user乙個庫,商品producet乙個庫,訂單order乙個庫。 切分後,要放在多個伺服器上,而不是乙個伺服器上。為什麼? 我們想象一下,乙個購物**對外提供服務,會有使用者,商品,訂單等的crud。沒拆分之前, 全部都是落到單一的庫上的,這會讓資料庫的單庫處理能力成為瓶頸。按垂直分庫後,如果還是放在乙個資料庫伺服器上, 隨著使用者量增大,這會讓單個資料庫的處理能力成為瓶頸,還有單個伺服器的磁碟空間,記憶體,tps等非常吃緊。 所以我們要拆分到多個伺服器上,這樣上面的問題都解決了,以後也不會面對單機資源問題。

資料庫業務層面的拆分,和服務的「治理」,「降級」機制類似,也能對不同業務的資料分別的進行管理,維護,監控,擴充套件等。 資料庫往往最容易成為應用系統的瓶頸,而資料庫本身屬於「有狀態」的,相對於web和應用伺服器來講,是比較難實現「橫向擴充套件」的。 資料庫的連線資源比較寶貴且單機處理能力也有限,在高併發場景下,垂直分庫一定程度上能夠突破io、連線數及單機硬體資源的瓶頸。

事務支援

分庫分表後,就成了分布式事務了。如果依賴資料庫本身的分布式事務管理功能去執行事務,將付出高昂的效能代價; 如果由應用程式去協助控制,形成程式邏輯上的事務,又會造成程式設計方面的負擔。

多庫結果集合並(group by,order by)

todo

跨庫join

todo 分庫分表後表之間的關聯操作將受到限制,我們無法join位於不同分庫的表,也無法join分表粒度不同的表, 結果原本一次查詢能夠完成的業務,可能需要多次查詢才能完成。 粗略的解決方法: 全域性表:基礎資料,所有庫都拷貝乙份。 字段冗餘:這樣有些欄位就不用join去查詢了。 系統層組裝:分別查詢出所有,然後組裝起來,較複雜。

資料庫分庫分表

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

資料庫分庫 分表

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

資料庫分庫分表

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