sharding-jdbc分庫(kù)分表入門(mén)知識(shí)點(diǎn)

  1. 為什么要分庫(kù)分表

隨著業(yè)務(wù)擴(kuò)大怀各,系統(tǒng)訪問(wèn)量增大倔韭,數(shù)據(jù)表數(shù)據(jù)增大,導(dǎo)致數(shù)據(jù)庫(kù)性能出現(xiàn)瓶頸

  1. 如何分庫(kù)分表

水平分庫(kù)分表瓢对,垂直分庫(kù)分表

垂直分表:將一張表按照字段劃分為多張表

垂直分庫(kù):按照業(yè)務(wù)寿酌,讓不同業(yè)務(wù)的表放在不同的數(shù)據(jù)庫(kù)中

垂直:針對(duì)的是數(shù)據(jù)表結(jié)構(gòu)進(jìn)行切分

水平分表:在同一個(gè)數(shù)據(jù)庫(kù)中,將一張表水平切分為多長(zhǎng)表

水平分庫(kù):將一張表切分成多張表到不同的數(shù)據(jù)庫(kù)中

水平:針對(duì)的是數(shù)據(jù)行進(jìn)行的切分

  1. 常用的分庫(kù)分表中間件

Sharding-jdbc(原則上不能稱做中間件硕蛹,它是以jar包的形式存在的)醇疼,mycat

  1. 垂直分表的作用

減少I(mǎi)O帶來(lái)的性能損耗

減少I(mǎi)O鎖表的可能

讓每頁(yè)存儲(chǔ)更多的行數(shù)據(jù)


垂直分表的原則: 讓熱門(mén)數(shù)據(jù)字段單獨(dú)分一張表,讓大字段不經(jīng)常查詢的到另外一張表

  1. 垂直分庫(kù)的作用

垂直分表只解決了單一表數(shù)據(jù)量過(guò)大的問(wèn)題法焰,但沒(méi)將表分到不同的數(shù)據(jù)庫(kù)中秧荆,因此每個(gè)表還是競(jìng)爭(zhēng)同一個(gè)物理機(jī)的CPU,內(nèi)存埃仪,網(wǎng)絡(luò)IO乙濒,磁盤(pán)

垂直分庫(kù)的原則:按照業(yè)務(wù),讓數(shù)據(jù)庫(kù)中的表分到不同的數(shù)據(jù)庫(kù)中卵蛉,專庫(kù)專用

  1. 水平分庫(kù)的作用

解決單表數(shù)據(jù)量大訪問(wèn)頻繁的問(wèn)題颁股。前面垂直分庫(kù)分表的策略已經(jīng)不能解決當(dāng)前的問(wèn)題時(shí),需要使用到水平分

水平分庫(kù)的原則:根據(jù)原始表的某個(gè)業(yè)務(wù)ID傻丝,對(duì)ID%庫(kù)的數(shù)量甘有,讓不同的數(shù)據(jù)進(jìn)入到水平切分后不同的庫(kù)中對(duì)應(yīng)的表中。每個(gè)庫(kù)的表結(jié)構(gòu)是一樣的

  1. 水平分表的作用

解決單表數(shù)據(jù)量過(guò)大的問(wèn)題

水平分表的原則:在同一個(gè)數(shù)據(jù)庫(kù)內(nèi)桑滩,將一張表水平拆分為多張表梧疲,表的數(shù)據(jù)結(jié)構(gòu)不變

  1. 分庫(kù)分表設(shè)計(jì)的最佳實(shí)踐原則
  1. 分庫(kù)分表需要解決的問(wèn)題

1.事務(wù)一致性問(wèn)題

分布式事務(wù)

  1. 跨結(jié)點(diǎn)關(guān)聯(lián)查詢

  2. 跨結(jié)點(diǎn)分頁(yè)、排序

  3. 主鍵避重

無(wú)法使用自增主鍵

  1. 公共表(多個(gè)表需要用到的表运准,如區(qū)域表)

  2. Sharding-jdbc的功能

功能:

  1. 數(shù)據(jù)分片

  2. 讀寫(xiě)分離

  3. Sharding-jdbc分表規(guī)則配置

步驟:

  1. 配置數(shù)據(jù)源
  1. 配置數(shù)據(jù)表的數(shù)據(jù)節(jié)點(diǎn)

t_order是邏輯表幌氮,sharding_jdbc會(huì)根據(jù)設(shè)置的分片策略,將對(duì)邏輯表操作的sql映射生成在不同的數(shù)據(jù)表的sql并執(zhí)行

  1. 配置主鍵生成策略
  1. 配置分表策略:分片鍵和分片算法

Where后的條件如果出現(xiàn)order_id胁澳,會(huì)根據(jù)這個(gè)order_id并通過(guò)分片算法到對(duì)應(yīng)的數(shù)據(jù)表中獲取數(shù)據(jù)

  1. 打開(kāi)sql日志
  1. Sharding-jdbc的配置方法
  • Properties
  • Yml
  • @Configuration
  • Xml
  1. Sharding-jdbc的幾個(gè)概念
  • 邏輯表

用戶定義的sql操作的表

  • 真實(shí)表

Sharding-jdbc根據(jù)分片策略真正執(zhí)行sql操作的表

  • 數(shù)據(jù)節(jié)點(diǎn)

某一張真實(shí)表表示一個(gè)節(jié)點(diǎn)

  • 綁定表

指分片策略一致的主表和子表该互,例如:商品表和商品明細(xì)表。此時(shí)商品表和商品明細(xì)表之間的關(guān)聯(lián)查詢對(duì)于sharding-jdbc來(lái)說(shuō)不會(huì)出現(xiàn)笛卡爾積關(guān)聯(lián)查詢的問(wèn)題韭畸。因?yàn)槿绻墙壎ū淼脑捰钪牵鼈儗?duì)于同一個(gè)業(yè)務(wù)ID的數(shù)據(jù)肯定是落在各自對(duì)應(yīng)的同一個(gè)真實(shí)表中

  • 廣播表

指的是公共表,對(duì)于不同數(shù)據(jù)源中都會(huì)用到的表胰丁,那么sharding-jdbc在操作這個(gè)表的時(shí)候随橘,會(huì)對(duì)所有數(shù)據(jù)源的這個(gè)表執(zhí)行sql

  • 分片鍵(分片字段)
  • 分片算法
  • 分片策略

分片鍵+分片算法

  • 自增主鍵生成策略


  1. Sharding-jdbc的執(zhí)行原理

Sql解析->sql路由->sql改寫(xiě)->sql執(zhí)行->結(jié)果合并

  1. sql解析

目的:標(biāo)記語(yǔ)法樹(shù)上的哪些結(jié)點(diǎn)可能會(huì)被改寫(xiě)

分為詞法解析和語(yǔ)法解析

詞法解析:解析sql中的關(guān)鍵字

語(yǔ)法解析:將詞法解析的結(jié)果和sql生成語(yǔ)法樹(shù)

分為藍(lán)色ROOT,綠色:關(guān)鍵字锦庸,紅色:變量机蔗,白色:還可以再分子結(jié)點(diǎn)的結(jié)點(diǎn)

  1. sql路由

目的:把邏輯表的數(shù)據(jù)操作映射為對(duì)數(shù)據(jù)結(jié)點(diǎn)操作的過(guò)程

根據(jù)分片鍵操作類型分類:

1.單片路由:=

2.多片路由:in

3.范圍路由:between

4.廣播路由:不攜帶分片鍵

根據(jù)分片鍵進(jìn)行路由的場(chǎng)景分類:

  1. 直接路由

  2. 標(biāo)準(zhǔn)路由

  3. 笛卡爾路由

  4. 全庫(kù)表路由:廣播路由

  5. sql改寫(xiě)

目的1:將對(duì)邏輯表操作的sql,改寫(xiě)為對(duì)真實(shí)表操作的sql

目的2:對(duì)于Group By,order By操作萝嘁,在進(jìn)行結(jié)果歸并的時(shí)候梆掸,如果sql查詢的字段不包含 分組或排序的字段,那么在改寫(xiě)后會(huì)將 原sql查詢的字段增加上 分組或排序的字段牙言。為什么這么做呢酸钦?因?yàn)槿绻麤](méi)有補(bǔ)充的話,兩張表的數(shù)據(jù)進(jìn)行結(jié)果歸并沒(méi)辦法進(jìn)行分組或排序咱枉,因?yàn)槿鄙倥判蛄?/p>

  1. Sql執(zhí)行

目的:負(fù)責(zé)將路由和改寫(xiě)后的sql發(fā)送到底層數(shù)據(jù)庫(kù)去執(zhí)行

特點(diǎn):自動(dòng)化的平衡數(shù)據(jù)庫(kù)連接資源與執(zhí)行效率卑硫。它會(huì)在 內(nèi)存限制模式和 連接限制模式之間進(jìn)行自適應(yīng)的切換

OLAP:面向分析的系統(tǒng)

OLTP:面向事務(wù)的操作

  1. 結(jié)果歸并

目的:查詢遍歷,分組庞钢,排序拔恰,聚合的結(jié)果進(jìn)行歸并

歸并的分類:

  1. 內(nèi)存歸并

  2. 流式歸并

通過(guò)游標(biāo)實(shí)現(xiàn)。先讓每張表查詢的數(shù)據(jù)有序基括,再通過(guò)每張表的游標(biāo)進(jìn)行移動(dòng)來(lái)排序

  1. 裝飾者歸并

在以前歸并后的結(jié)果的基礎(chǔ)上做進(jìn)一步增強(qiáng)颜懊,使用到了裝飾者模式

  1. Sharding-jdbc的執(zhí)行原理總結(jié)
  1. Sharding-jdbc水平分庫(kù)配置規(guī)則

  2. 配置多個(gè)數(shù)據(jù)源

  1. 配置分庫(kù)策略:分庫(kù)鍵和分庫(kù)算法

分片策略:inline

  1. 配置數(shù)據(jù)節(jié)點(diǎn)
  1. Sharding-jdbc的優(yōu)化

查詢的時(shí)候盡量使用到分片鍵,避免廣播路由產(chǎn)生額外的sql查詢

  1. Sharding-jdbc垂直分庫(kù)配置規(guī)則

  2. 配置數(shù)據(jù)源

  1. 配置數(shù)據(jù)節(jié)點(diǎn)


  2. 配置分表策略


  3. Sharding-jdbc公共表

  4. 配置公共表

  1. Sharding-jdbc讀寫(xiě)分離

  2. 修改mysql的配置文件

  3. 配置從庫(kù)數(shù)據(jù)源

  1. 配置主庫(kù)從庫(kù)邏輯數(shù)據(jù)源
  1. 配置主庫(kù)從庫(kù)數(shù)據(jù)節(jié)點(diǎn)



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末风皿,一起剝皮案震驚了整個(gè)濱河市河爹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桐款,老刑警劉巖咸这,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異魔眨,居然都是意外死亡媳维,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)遏暴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)侄刽,“玉大人,你說(shuō)我怎么就攤上這事朋凉≈莸ぃ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵杂彭,是天一觀的道長(zhǎng)墓毒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)亲怠,這世上最難降的妖魔是什么所计? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮团秽,結(jié)果婚禮上主胧,老公的妹妹穿的比我還像新娘钾腺。我一直安慰自己,他們只是感情好讥裤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著姻报,像睡著了一般己英。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吴旋,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天损肛,我揣著相機(jī)與錄音,去河邊找鬼荣瑟。 笑死治拿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笆焰。 我是一名探鬼主播劫谅,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嚷掠!你這毒婦竟也來(lái)了捏检?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤不皆,失蹤者是張志新(化名)和其女友劉穎贯城,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體霹娄,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡能犯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了犬耻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踩晶。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖香追,靈堂內(nèi)的尸體忽然破棺而出合瓢,到底是詐尸還是另有隱情,我是刑警寧澤透典,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布晴楔,位于F島的核電站,受9級(jí)特大地震影響峭咒,放射性物質(zhì)發(fā)生泄漏税弃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一凑队、第九天 我趴在偏房一處隱蔽的房頂上張望则果。 院中可真熱鬧幔翰,春花似錦、人聲如沸西壮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)款青。三九已至做修,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抡草,已是汗流浹背饰及。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留康震,地道東北人燎含。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腿短,于是被迫代替她去往敵國(guó)和親屏箍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353