學習筆記 資料庫分庫分表簡介

2021-10-06 09:57:02 字數 1240 閱讀 1519

1、當單錶資料量達到千萬級需要做水平分表操作。

因為mysql的innodb引擎使用的是b+tree資料結構儲存索引,當資料量達到千萬級別,該資料結構中樹的層級將超過三層,會非常影響索引的執行效率。

2、當資料庫的吞吐量達到了瓶頸時,就需要增加資料庫例項,對資料庫進行拆分,緩解系統壓力。

1、水平拆分

根據分片演算法,保留原有資料表或資料庫結構,拆分為多個資料表或資料庫。

2、垂直拆分

根據業務維度,對原有資料表或資料庫的結構,進行拆分為多個資料表或資料庫。

1、客戶端分片

a)、直接在應用層實現分片邏輯和分片規則,需要在同乙個應用的多個節點間進行同步,每個應用層都嵌入乙個操作切片的邏輯實現,一般打包成乙個jar包提**用層使用。

b)、實現方式

b1)、在應用層直接實現

直接將分片邏輯和分片規則封裝成乙個jar。

優點:比較簡單、適合快速上線;缺點:業務入侵。

b2)、定製jdbc協議實現

針對業務層提供與jdbc一致的介面,對業務透明(開發人員不用關心實現邏輯),分庫分表操作在jdbc內部實現。

優點:不入侵業務,缺點:需要對jdbc協議熟悉。

流行的客戶端分庫分表框架sharding jdbc(就是採用該方式實現。

b3)、定製orm框架實現

把分片規則實現到orm框架中,或者通過orm框架支援的擴充套件機制完成分片邏輯。

例如:通過在mybatis的sql配置檔案中增加索引的引數來實現分片,如下**:

select orderid,price from order_# where orderid = #

2、**分片

在應用層和資料庫層之間增加乙個**層,把分片的路由規則配置在**層對外提供與jdbc相容的介面給應用層呼叫。開發人員不用關心分片規則,只需在**層配置路由規則即可用。

優點:開發人員只需關心業務邏輯,分片邏輯留給**層執行;缺點:增加了**層相對應增加了一層網路傳輸,對效能會有影響,同時也增加了資源開銷,另外需要對**層進行維護。

通過**分片實現的框架有:cobar和mycat。

3、支援事務的分布式資料庫

將分布式事務的實現包裝到資料庫內部實現,對使用者透明,使用者像使用傳統資料庫(如mysql)一樣來呼叫即可。

提供分布式事務支援的產品有oceanbase、tidb。

資料庫分庫分表

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

資料庫分庫 分表

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

資料庫分庫分表

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