TB級(jí)數(shù)據(jù)分庫(kù)分表之Sharding-JDBC基礎(chǔ)(一)

什么是分庫(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))

OLTP與OLAP.png

聯(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ù)切分的方式

水平與垂直拆分的比較.png

垂直(縱向)切分(分表): 將一張表可按照字段之間的某種邏輯關(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ù)分表組件的選用

分庫(kù)分表組件比較.png

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ǔ)充
  1. 兩階段型: 就是分布式事務(wù)兩階段提交,對(duì)應(yīng)技術(shù)上的XA、JTA/JTS。這是分布式環(huán)境下事務(wù)處理的典型模式
  2. 補(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ù)模型中的一部分;
  3. 異步確保型: 將一些同步阻塞的事務(wù)操作變?yōu)楫惒降牟僮?,避免?duì)數(shù)據(jù)庫(kù)事務(wù)的爭(zhēng)用,典型例子是熱點(diǎn)賬戶(hù)異步記賬、批量記賬的處理
  4. 最大努力通知型幾種: 交易的消息通知與失敗重試(例如商戶(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)操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容