真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

數(shù)據(jù)庫(kù)分庫(kù)概念是什么

本篇文章為大家展示了數(shù)據(jù)庫(kù)分庫(kù)概念是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來(lái),是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元平橋做網(wǎng)站,已為上家服務(wù),為平橋各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

分庫(kù)在數(shù)據(jù)量較大的項(xiàng)目中使用得很多,每個(gè)人都有各自的經(jīng)驗(yàn)和心得。但要系統(tǒng)的說清楚分庫(kù)是怎么回事,有哪些注意事項(xiàng)及問題,感覺不是那么容易。下面主要說一下分庫(kù)的相關(guān)概念。

一、何為數(shù)據(jù)切分

簡(jiǎn)單來(lái)說,就是指通過某種特定的條件,將存放在同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主機(jī))上,以達(dá)到分散單臺(tái)設(shè)備負(fù)載的效果。

數(shù)據(jù)的切分(Sharding)根據(jù)其切分規(guī)則的類型,分為兩種切分模式。一種是按照不同的表(或者 Schema)來(lái)切分到不同的數(shù)據(jù)庫(kù)(主機(jī))之上,這種切可以稱之為數(shù)據(jù)的垂直(縱向)切分;另外一種則是根據(jù)表中的數(shù)據(jù)的邏輯關(guān)系,將同一個(gè)表中的數(shù)據(jù)按照某種條件拆分到多臺(tái)數(shù)據(jù)庫(kù)(主機(jī))上面,這種切分稱之為數(shù)據(jù)的水平(橫向)切分。

垂直切分的最大特點(diǎn)就是規(guī)則簡(jiǎn)單,實(shí)施也更為方便,尤其適合各業(yè)務(wù)之間的耦合度非常低,相互影響很小,業(yè)務(wù)邏輯非常清晰的系統(tǒng)。在這種系統(tǒng)中,可以很容易做到將不同業(yè)務(wù)模塊所使用的表分拆到不同的數(shù)據(jù)庫(kù)中。根據(jù)不同的表來(lái)進(jìn)行拆分,對(duì)應(yīng)用程序的影響也更小,拆分規(guī)則也會(huì)比較簡(jiǎn)單清晰。

按照業(yè)務(wù)把數(shù)據(jù)庫(kù)拆開就已經(jīng)屬于分庫(kù)了

水平切分于垂直切分相比,相對(duì)來(lái)說稍微復(fù)雜一些。因?yàn)橐獙⑼粋€(gè)表中的不同數(shù)據(jù)拆分到不同的數(shù)據(jù)庫(kù)中,對(duì)于應(yīng)用程序來(lái)說,拆分規(guī)則本身就較根據(jù)表名來(lái)拆分更為復(fù)雜,后期的數(shù)據(jù)維護(hù)也會(huì)更為復(fù)雜一些。

水平切分估計(jì)才是大家心目中的分庫(kù)吧

二、垂直切分

一個(gè)數(shù)據(jù)庫(kù)由很多表的構(gòu)成,每個(gè)表對(duì)應(yīng)著不同的業(yè)務(wù),垂直切分是指按照業(yè)務(wù)將表進(jìn)行分類,分布到不同的數(shù)據(jù)庫(kù)上面,這樣也就將數(shù)據(jù)或者說壓力分擔(dān)到不同的庫(kù)上面,如下圖: 

數(shù)據(jù)庫(kù)分庫(kù)概念是什么

系統(tǒng)被切分成了,用戶、訂單交易、支付幾個(gè)模塊。

大家好像都是這么做的

架構(gòu)設(shè)計(jì)較好的應(yīng)用系統(tǒng),總體功能是由很多個(gè)功能模塊所組成,而每一個(gè)功能模塊所需要的數(shù)據(jù)對(duì)應(yīng)到數(shù)據(jù)庫(kù)中就是一個(gè)或者多個(gè)表。而在架構(gòu)設(shè)計(jì)中,各個(gè)功能模塊相互之間的交互點(diǎn)越統(tǒng)一越少,系統(tǒng)的耦合度就越低,系統(tǒng)各個(gè)模塊的維護(hù)性以及擴(kuò)展性也就越好。這樣的系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)的垂直切分也就越容易。

這點(diǎn)就是指的高內(nèi)聚、低耦合吧

但是往往系統(tǒng)之有些表難以做到完全的獨(dú)立,存在這擴(kuò)庫(kù) join 的情況,對(duì)于這類的表,就需要去做平衡,是數(shù)據(jù)庫(kù)讓步業(yè)務(wù),共用一個(gè)數(shù)據(jù)源,還是分成多個(gè)庫(kù),業(yè)務(wù)之間通過接口來(lái)做調(diào)用。在系統(tǒng)初期,數(shù)據(jù)量比較少,或者資源有限的情況下,會(huì)選擇共用數(shù)據(jù)源,但是當(dāng)數(shù)據(jù)發(fā)展到了一定的規(guī)模,負(fù)載很大的情況,就需要必須去做分割。

這就是程序員總覺的前任給自己挖坑的原因

一般來(lái)講業(yè)務(wù)存在著復(fù)雜 join 的場(chǎng)景是難以切分的,往往業(yè)務(wù)獨(dú)立的易于切分。如何切分,切分到何種程度是考驗(yàn)技術(shù)架構(gòu)的一個(gè)難題。

說實(shí)話,我業(yè)務(wù)做得少,看這篇文章之前根本沒想到過跨庫(kù)join的問題

垂直切分的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

  • 拆分后業(yè)務(wù)清晰,拆分規(guī)則明確;

  • 系統(tǒng)之間整合或擴(kuò)展容易; 

  • 數(shù)據(jù)維護(hù)簡(jiǎn)單。

缺點(diǎn):

  • 部分業(yè)務(wù)表無(wú)法 join,只能通過接口方式解決,提高了系統(tǒng)復(fù)雜度;

  • 受每種業(yè)務(wù)不同的限制存在單庫(kù)性能瓶頸,不易數(shù)據(jù)擴(kuò)展跟性能提高;

  • 事務(wù)處理復(fù)雜。 由于垂直切分是按照業(yè)務(wù)的分類將表分散到不同的庫(kù),所以有些業(yè)務(wù)表會(huì)過于龐大,存在單庫(kù)讀寫與存儲(chǔ)瓶頸,所以就需要水平拆分來(lái)做解決。

支付等強(qiáng)事務(wù)的業(yè)務(wù),垂直切分會(huì)不會(huì)很麻煩

三、水平切分

相對(duì)于垂直拆分,水平拆分不是將表做分類,而是按照某個(gè)字段的某種規(guī)則來(lái)分散到多個(gè)庫(kù)之中,每個(gè)表中包含一部分?jǐn)?shù)據(jù)。簡(jiǎn)單來(lái)說,可以將數(shù)據(jù)的水平切分理解為是按照數(shù)據(jù)行的切分,就是將表中的某些行切分到一個(gè)數(shù)據(jù)庫(kù),而另外的某些行又切分到其他的數(shù)據(jù)庫(kù)中,如圖: 

數(shù)據(jù)庫(kù)分庫(kù)概念是什么

拆分?jǐn)?shù)據(jù)就需要定義分片規(guī)則。關(guān)系型數(shù)據(jù)庫(kù)是行列的二維模型,拆分的第一原則是找到拆分維度。比如:從會(huì)員的角度來(lái)分析,商戶訂單交易類系統(tǒng)中查詢會(huì)員某天某月某個(gè)訂單,那么就需要按照會(huì)員結(jié)合日期來(lái)拆分,不同的數(shù)據(jù)按照會(huì)員 ID 做分組,這樣所有的數(shù)據(jù)查詢 join 都會(huì)在單庫(kù)內(nèi)解決;如果從商戶的角度來(lái)講,要查詢某個(gè)商家某天所有的訂單數(shù),就需要按照商戶 ID 做拆分;但是如果系統(tǒng)既想按會(huì)員拆分,又想按商家數(shù)據(jù),則會(huì)有一定的困難。如何找到合適的分片規(guī)則需要綜合考慮衡量。

這個(gè)點(diǎn)能夠很好體現(xiàn)程序員的水平,微信搜“架構(gòu)師之路”,這個(gè)公眾號(hào)上有好幾篇介紹這方面技巧的文章。

幾種典型的分片規(guī)則包括:

  • 按照用戶 ID 求模,將數(shù)據(jù)分散到不同的數(shù)據(jù)庫(kù),具有相同數(shù)據(jù)用戶的數(shù)據(jù)都被分散到一個(gè)庫(kù)中;

  • 按照日期,將不同月甚至日的數(shù)據(jù)分散到不同的庫(kù)中;

    剛工作的時(shí)候一個(gè)項(xiàng)目就是按照時(shí)間分庫(kù)的,當(dāng)時(shí)覺得很low,但實(shí)際上簡(jiǎn)單有效。

  • 按照某個(gè)特定的字段求摸,或者根據(jù)特定范圍段分散到不同的庫(kù)中。 

    一個(gè)同事問怎么把現(xiàn)有的線索表分庫(kù),線索表可能按照兩三個(gè)維度字段查詢。我覺得可以抽取這兩三個(gè)維度字段的某些特征,生成一個(gè)分庫(kù)字段,通過這個(gè)生成的分庫(kù)字段來(lái)分庫(kù)。

如圖,切分原則都是根據(jù)業(yè)務(wù)找到適合的切分規(guī)則分散到不同的庫(kù),下面用用戶 ID 求模舉例: 

數(shù)據(jù)庫(kù)分庫(kù)概念是什么

既然數(shù)據(jù)做了拆分有優(yōu)點(diǎn)也就優(yōu)缺點(diǎn)。

優(yōu)點(diǎn):

  • 拆分規(guī)則抽象好,join 操作基本可以數(shù)據(jù)庫(kù)做;

  • 不存在單庫(kù)大數(shù)據(jù),高并發(fā)的性能瓶頸;

  • 應(yīng)用端改造較少;

  • 提高了系統(tǒng)的穩(wěn)定性跟負(fù)載能力。

缺點(diǎn):

  • 拆分規(guī)則難以抽象;

    拋開業(yè)務(wù)談架構(gòu)都是耍流氓

  • 分片事務(wù)一致性難以解決;

  • 數(shù)據(jù)多次擴(kuò)展難度跟維護(hù)量極大;

    這個(gè)問題有一個(gè)2倍擴(kuò)容的辦法,在不依賴mycat等中間件時(shí)也能比較高效

  • 跨庫(kù) join 性能較差。 

四、數(shù)據(jù)切分共同缺點(diǎn)

前面講了垂直切分跟水平切分的不同跟優(yōu)缺點(diǎn),會(huì)發(fā)現(xiàn)每種切分方式都有缺點(diǎn),但共同的特點(diǎn)缺點(diǎn)有:

  • 引入分布式事務(wù)的問題;

  • 跨節(jié)點(diǎn) Join 的問題;

  • 跨節(jié)點(diǎn)合并排序分頁(yè)問題;

  • 多數(shù)據(jù)源管理問題。

上述內(nèi)容就是數(shù)據(jù)庫(kù)分庫(kù)概念是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)標(biāo)題:數(shù)據(jù)庫(kù)分庫(kù)概念是什么
文章路徑:http://weahome.cn/article/jphsoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部