成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQL中怎么實(shí)現(xiàn)數(shù)據(jù)切分

MySQL中怎么實(shí)現(xiàn)數(shù)據(jù)切分,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

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

什么是MySQL數(shù)據(jù)切分

"Shard"這個詞英文的意思是"碎片",而作為數(shù)據(jù)庫相關(guān)的技術(shù)用語,似乎最早見于大型多人在線角色扮演游戲中。"Sharding"姑且稱之為"分片"。Sharding不是一門新技術(shù),而是一個相對簡樸的軟件理念。眾所周知,MySQL5之后才有了數(shù)據(jù)表分區(qū)功能,那么在此之前,很多MySQL的潛在用戶都對MySQL的擴(kuò)展性有所顧慮,而是否具備分區(qū)功能就成了衡量一個數(shù)據(jù)庫可擴(kuò)展性與否的一個關(guān)鍵指標(biāo)(當(dāng)然不是唯一指標(biāo))。

數(shù)據(jù)庫擴(kuò)展性是一個永恒的話題,MySQL的推廣者經(jīng)常會被問到:如在單一數(shù)據(jù)庫上處理應(yīng)用數(shù)據(jù)捉襟見肘而需要進(jìn)行分區(qū)化之類的處理,是如何辦到的呢答案是:Sharding。Sharding不是一個某個特定數(shù)據(jù)庫軟件附屬的功能,而是在具體技術(shù)細(xì)節(jié)之上的抽象處理,是水平擴(kuò)展(ScaleOut,亦或橫向擴(kuò)展、向外擴(kuò)展)的解決方案,其主要目的是為突破單節(jié)點(diǎn)數(shù)據(jù)庫服務(wù)器的I/O能力限制,解決數(shù)據(jù)庫擴(kuò)展性問題。

通過一系列的切分規(guī)則將數(shù)據(jù)水平分布到不同的DB或table中,在通過相應(yīng)的DB路由或者table路由規(guī)則找到需要查詢的具體的DB或者table,以進(jìn)行Query操作。這里所說的“sharding”通常是指“水平切分”,這也是該篇文章討論的重點(diǎn)。具體將有什么樣的切分方式呢和路由方式呢?行文至此,讀者難免有所疑問,接下來舉個簡單的例子:我們針對一個Blog應(yīng)用中的日志來說明,比如日志文章(article)表有如下字段:article_id(int),title(varchar(128)),content(varchar(1024)),user_id(int).

面對這樣的一個表,我們怎樣切分呢?怎樣將這樣的數(shù)據(jù)分布到不同的數(shù)據(jù)庫中的表中去呢?其實(shí)分析blog的應(yīng)用,我們不難得出這樣的結(jié)論:blog的應(yīng)用中,用戶分為兩種:瀏覽者和blog的主人。瀏覽者瀏覽某個blog,實(shí)際上是在一個特定的用戶的blog下進(jìn)行瀏覽的,而blog的主人管理自己的blog,也同樣是在特定的用戶blog下進(jìn)行操作的(在自己的空間下)。所謂的特定的用戶,用數(shù)據(jù)庫的字段表示就是“user_id”。就是這個“user_id”,它就是我們需要的分庫的依據(jù)和規(guī)則的基礎(chǔ)。我們可以這樣做,將user_id為1~10000的所有的文章信息放入DB1中的article表中,將user_id為10001~20000的所有文章信息放入DB2中的article表中,以此類推,一直到DBn。

這樣一來,文章數(shù)據(jù)就很自然的被分到了各個數(shù)據(jù)庫中,達(dá)到了數(shù)據(jù)切分的目的。接下來要解決的問題就是怎樣找到具體的數(shù)據(jù)庫呢?其實(shí)問題也是簡單明顯的,既然分庫的時(shí)候我們用到了區(qū)分字段user_id,那么很自然,數(shù)據(jù)庫路由的過程當(dāng)然還是少不了user_id的。考慮一下我們剛才呈現(xiàn)的blog應(yīng)用,不管是訪問別人的blog還是管理自己的blog,總之我都要知道這個blog的用戶是誰吧,也就是大家都明白了這個blog的user_id,就利用這個user_id,利用分庫時(shí)候的規(guī)則,反過來定位具體的數(shù)據(jù)庫,比如user_id是234,利用該才的規(guī)則,就應(yīng)該定位到DB1,如果user_id是12343,利用該才的規(guī)則,就應(yīng)該定位到DB2。以此類推,利用分庫的規(guī)則,反向的路由到具體的DB,這個過程我們稱之為“DB路由”。

當(dāng)然考慮到數(shù)據(jù)切分的DB設(shè)計(jì)必然是非常規(guī),不正統(tǒng)的DB設(shè)計(jì)。那么什么樣的DB設(shè)計(jì)是正統(tǒng)的DB設(shè)計(jì)呢?

我們平常規(guī)規(guī)矩矩用的基本都是。平常我們會自覺的按照范式來設(shè)計(jì)我們的數(shù)據(jù)庫,負(fù)載高點(diǎn)可能考慮使用相關(guān)的Replication機(jī)制來提高讀寫的吞吐和性能,這可能已經(jīng)可以滿足很多需求,但這套機(jī)制自身的缺陷還是比較顯而易見的(下文會提及)。上面提到的“自覺的按照范式設(shè)計(jì)”。考慮到數(shù)據(jù)切分的DB設(shè)計(jì),將違背這個通常的規(guī)矩和約束,為了切分,我們不得不在數(shù)據(jù)庫的表中出現(xiàn)冗余字段,用作區(qū)分字段或者叫做分庫的標(biāo)記字段,比如上面的article的例子中的user_id這樣的字段(當(dāng)然,剛才的例子并沒有很好的體現(xiàn)出user_id的冗余性,因?yàn)閡ser_id這個字段即使就是不分庫,也是要出現(xiàn)的,算是我們撿了便宜吧)。當(dāng)然冗余字段的出現(xiàn)并不只是在分庫的場景下才出現(xiàn)的,在很多大型應(yīng)用中,冗余也是必須的,這個涉及到高效DB的設(shè)計(jì),該篇文章不再贅述。

為什么要MySQL數(shù)據(jù)切分

上面對什么是數(shù)據(jù)切分做了個概要的描述和解釋,讀者可能會疑問,為什么需要數(shù)據(jù)切分呢?像Oracle這樣成熟穩(wěn)定的數(shù)據(jù)庫,足以支撐海量數(shù)據(jù)的存儲與查詢了?為什么還需要數(shù)據(jù)切片呢?的確,Oracle的DB確實(shí)很成熟很穩(wěn)定,但是高昂的使用費(fèi)用和高端的硬件支撐不是每一個公司能支付的起的。試想一下一年幾千萬的使用費(fèi)用和動輒上千萬元的小型機(jī)作為硬件支撐,這是一般公司能支付的起的嗎?即使就是能支付的起,如果有更好的方案,有更廉價(jià)且水平擴(kuò)展性能更好的方案,我們?yōu)槭裁床贿x擇呢?

但是,事情總是不盡人意。平常我們會自覺的按照范式來設(shè)計(jì)我們的數(shù)據(jù)庫,負(fù)載高點(diǎn)可能考慮使用相關(guān)的Replication機(jī)制來提高讀寫的吞吐和性能,這可能已經(jīng)可以滿足很多需求,但這套機(jī)制自身的缺陷還是比較顯而易見的。首先它的有效很依賴于讀操作的比例,Master往往會成為瓶頸所在,寫操作需要順序排隊(duì)來執(zhí)行,過載的話Master首先扛不住,Slaves的數(shù)據(jù)同步的延遲也可能比較大,而且會大大耗費(fèi)CPU的計(jì)算能力,因?yàn)閣rite操作在Master上執(zhí)行以后還是需要在每臺slave機(jī)器上都跑一次。這時(shí)候Sharding可能會成為雞肋了。

Replication搞不定,那么為什么Sharding可以工作呢?道理很簡單,因?yàn)樗梢院芎玫臄U(kuò)展。大家都明白每臺機(jī)器無論配置多么好它都有自身的物理上限,所以當(dāng)我們應(yīng)用已經(jīng)能觸及或遠(yuǎn)遠(yuǎn)超出單臺機(jī)器的某個上限的時(shí)候,我們惟有尋找別的機(jī)器的幫助或者繼續(xù)升級的我們的硬件,但常見的方案還是橫向擴(kuò)展,通過添加更多的機(jī)器來共同承擔(dān)壓力。我們還得考慮當(dāng)我們的業(yè)務(wù)邏輯不斷增長,我們的機(jī)器能不能通過線性增長就能滿足需求?Sharding可以輕松的將計(jì)算,存儲,I/O并行分發(fā)到多臺機(jī)器上,這樣可以充分利用多臺機(jī)器各種處理能力,同時(shí)可以避免單點(diǎn)失敗,提供系統(tǒng)的可用性,進(jìn)行很好的錯誤隔離。

綜合以上因素,數(shù)據(jù)切分是很有必要的,且我們在此討論的數(shù)據(jù)切分也是將MySql作為背景的?;诔杀镜目紤],很多公司也選擇了Free且Open的MySql。對MySql有所了解的開發(fā)人員可能會知道,MySQL5之后才有了數(shù)據(jù)表分區(qū)功能,那么在此之前,很多MySQL的潛在用戶都對MySQL的擴(kuò)展性有所顧慮,而是否具備分區(qū)功能就成了衡量一個數(shù)據(jù)庫可擴(kuò)展性與否的一個關(guān)鍵指標(biāo)(當(dāng)然不是唯一指標(biāo))。數(shù)據(jù)庫擴(kuò)展性是一個永恒的話題,MySQL的推廣者經(jīng)常會被問到:如在單一數(shù)據(jù)庫上處理應(yīng)用數(shù)據(jù)捉襟見肘而需要進(jìn)行分區(qū)化之類的處理,是如何辦到的呢答案也是Sharding,也就是我們所說的數(shù)據(jù)切分方案。

關(guān)于MySQL中怎么實(shí)現(xiàn)數(shù)據(jù)切分問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

文章名稱:MySQL中怎么實(shí)現(xiàn)數(shù)據(jù)切分
文章URL:http://jinyejixie.com/article12/ijcpgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、響應(yīng)式網(wǎng)站、網(wǎng)站導(dǎo)航企業(yè)網(wǎng)站制作、動態(tài)網(wǎng)站網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
嘉峪关市| 塘沽区| 肇庆市| 襄城县| 桐乡市| 客服| 南宫市| 石渠县| 交口县| 东乡族自治县| 福海县| 家居| 手游| 台北县| 三原县| 甘孜| 新和县| 宜良县| 灌云县| 前郭尔| 莎车县| 恩施市| 永安市| 绥德县| 杭锦后旗| 安康市| 集安市| 从化市| 龙胜| 陆丰市| 塔城市| 特克斯县| 濮阳县| 大邑县| 乌拉特前旗| 博客| 和田市| 姜堰市| 巩义市| 潮州市| 博白县|