什么是分庫(kù)分表
按照一定的規(guī)則,將一個(gè)表拆分成多個(gè)表,將DB(數(shù)據(jù)庫(kù)) 從一臺(tái)服務(wù)器拆分到多臺(tái)服務(wù)器上的方式。
分庫(kù)分表的目的
分散單臺(tái)設(shè)備的負(fù)載,分散IO讀寫(xiě)和系統(tǒng)開(kāi)銷(xiāo)(CPU內(nèi)存資源等等)。
分庫(kù)分表的核心思想
數(shù)據(jù)切分(為了降低數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)的壓力)。
數(shù)據(jù)處理(使用場(chǎng)景分類(lèi))

聯(lián)機(jī)事務(wù)處理(OLTP): 對(duì)提交的事務(wù)進(jìn)行數(shù)據(jù)處理并及時(shí)的反饋處理的結(jié)果(例如:實(shí)時(shí)的交易系統(tǒng),insert/update)
聯(lián)機(jī)分析處理(OLAP): 通過(guò)維度方式(查詢(xún)條件),對(duì)數(shù)據(jù)進(jìn)行分析,報(bào)表進(jìn)行數(shù)據(jù)的客觀呈現(xiàn)(例如:數(shù)據(jù)報(bào)表,大數(shù)據(jù)分析 select)。
數(shù)據(jù)切分的方式

垂直(縱向)切分(分表): 將一張表可按照字段之間的某種邏輯關(guān)聯(lián),拆分成多個(gè)關(guān)聯(lián)表的方式。
水平(橫向)切分(分表): 將一張表可按照字段條件拆分成多個(gè)表的方式(如 按照日期拆分的歷史表)。
垂直切分(分庫(kù)): 一個(gè)系統(tǒng)可按照業(yè)務(wù)不同將DB拆分到不同服務(wù)器上。簡(jiǎn)單理解為:不同的表拆到不同的數(shù)據(jù)庫(kù)中。
水平切分(分庫(kù)): 一般會(huì)建立在垂直切分的基礎(chǔ)上,將表中的某些行切分到一個(gè)數(shù)據(jù)庫(kù),而另外的某些行又切分到其他的數(shù)據(jù)庫(kù)中,簡(jiǎn)單理解為:同一個(gè)表拆到不同的數(shù)據(jù)庫(kù)中。
注意: 影響數(shù)據(jù)庫(kù)性能瓶頸的原因是IO讀寫(xiě)和系統(tǒng)開(kāi)銷(xiāo)(CPU內(nèi)存等)。
分庫(kù)分表組件的選用

Sharding-JDBC基本概念
Sharding-JDBC為輕量級(jí)java框架,是一個(gè)開(kāi)源的適用于微服務(wù)的分布式數(shù)據(jù)訪(fǎng)問(wèn)基礎(chǔ)類(lèi)庫(kù),也可理解為增強(qiáng)版的JDBC驅(qū)動(dòng),只需引用jar包的依賴(lài)。
Sharding-JDBC內(nèi)部集成并實(shí)現(xiàn)分庫(kù)分表,讀寫(xiě)分離和分布式主鍵功能,并初步實(shí)現(xiàn)了柔性事務(wù)。
柔性事務(wù)補(bǔ)充
- 兩階段型: 就是分布式事務(wù)兩階段提交,對(duì)應(yīng)技術(shù)上的XA、JTA/JTS。這是分布式環(huán)境下事務(wù)處理的典型模式
- 補(bǔ)償型: TCC型事務(wù)(Try/Confirm/Cancel)可以歸為補(bǔ)償型;TCC思路是:盡早釋放鎖;在Try成功的情況下,如果事務(wù)要回滾,Cancel將作為一個(gè)補(bǔ)償機(jī)制,回滾Try操作;TCC各操作事務(wù)本地化,且盡早提交 (放棄兩階段約束);當(dāng)全局事務(wù)要求回滾時(shí),通過(guò)另一個(gè)本地事務(wù)實(shí)現(xiàn)“補(bǔ)償”行為; TCC是將資源層的兩階段提交協(xié)議轉(zhuǎn)換到業(yè)務(wù)層,成為業(yè)務(wù)模型中的一部分;
- 異步確保型: 將一些同步阻塞的事務(wù)操作變?yōu)楫惒降牟僮?,避免?duì)數(shù)據(jù)庫(kù)事務(wù)的爭(zhēng)用,典型例子是熱點(diǎn)賬戶(hù)異步記賬、批量記賬的處理
- 最大努力通知型幾種: 交易的消息通知與失敗重試(例如商戶(hù)交易結(jié)果通知重試、補(bǔ)單重試)
Sharding-JDBC關(guān)鍵詞概念
數(shù)據(jù)節(jié)點(diǎn): 數(shù)據(jù)拆分的最小單位(表)
邏輯表: 拆分出的多個(gè)表合在一起,也就是未拆分前的原表。
真實(shí)表: 根據(jù)某種規(guī)則拆分出的多個(gè)表都叫真實(shí)表。
邏輯索引: 用于同一個(gè)庫(kù)不能出現(xiàn)相同索引名稱(chēng)的分表場(chǎng)景
廣播表: 每個(gè)DB中都會(huì)使用到的數(shù)據(jù)表(如 省份/城市表)。
綁定表: 查詢(xún)時(shí)規(guī)定了只在同一個(gè)數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún)操作。