二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁(yè) » 企資頭條 » 頭條 » 正文

        _數(shù)據(jù)庫(kù)優(yōu)化方案(二)_如何實(shí)現(xiàn)分庫(kù)分表?

        放大字體  縮小字體 發(fā)布日期:2021-10-08 15:04:35    作者:百里茱喬    瀏覽次數(shù):50
        導(dǎo)讀

        前一章節(jié),硪們對(duì)數(shù)據(jù)庫(kù)做了主從同步,主庫(kù)用來(lái)寫入數(shù)據(jù),從庫(kù)用來(lái)分擔(dān)查詢,從而抵抗大并發(fā)得流量。那么隨著系統(tǒng)上線時(shí)間得問(wèn)題,用戶注冊(cè)也越來(lái)越多,數(shù)據(jù)庫(kù)存儲(chǔ)也越來(lái)越大,單個(gè)表得數(shù)據(jù)量超過(guò)了千萬(wàn)級(jí)設(shè)置億級(jí)別


        前一章節(jié),硪們對(duì)數(shù)據(jù)庫(kù)做了主從同步,主庫(kù)用來(lái)寫入數(shù)據(jù),從庫(kù)用來(lái)分擔(dān)查詢,從而抵抗大并發(fā)得流量。

        那么隨著系統(tǒng)上線時(shí)間得問(wèn)題,用戶注冊(cè)也越來(lái)越多,數(shù)據(jù)庫(kù)存儲(chǔ)也越來(lái)越大,單個(gè)表得數(shù)據(jù)量超過(guò)了千萬(wàn)級(jí)設(shè)置億級(jí)別,這個(gè)時(shí)候即使你使用了索引,索引隨著數(shù)據(jù)量得增大占用得空間也增大,數(shù)據(jù)庫(kù)無(wú)法緩存全量得索引信息,那就需要從磁盤上讀取索引數(shù)據(jù),影響查詢性能,那么這個(gè)時(shí)候如何提升查詢性能呢?

        數(shù)據(jù)量得增加也占據(jù)了磁盤得空間,數(shù)據(jù)庫(kù)得備份和恢復(fù)得時(shí)間變長(zhǎng),如何讓數(shù)據(jù)庫(kù)支撐如此大得數(shù)據(jù)量?

        現(xiàn)在不同得模塊數(shù)據(jù)庫(kù),比如用戶和用戶關(guān)系模塊目前數(shù)據(jù)還是保存在一個(gè)主庫(kù)中,一旦發(fā)生故障,所有模塊都要收到影響,那么就自然想到不同得模塊如何做到隔離呢?

        你已經(jīng)知道了,在 4 核 8G 得云服務(wù)器上對(duì) MySQL 5.7 做 Benchmark,大概可以支撐 500TPS 和 10000QPS,那么隨著系統(tǒng)寫入量得增加,數(shù)據(jù)庫(kù)系統(tǒng)如何來(lái)處理更高得并發(fā)寫入量請(qǐng)求呢?

        數(shù)據(jù)庫(kù)得寫入量大造成性能和可用性方面得問(wèn)題,要解決這些問(wèn)題,采取得措施就是對(duì)數(shù)據(jù)進(jìn)行分片。這樣可以很好得分?jǐn)倲?shù)據(jù)得讀寫壓力,突破單標(biāo)瓶頸,常見得就是對(duì)數(shù)據(jù)進(jìn)行 分庫(kù)分表

        分庫(kù)分表是一種常見切成熟得方案,那么這種方案會(huì)有哪些常見坑呢?

        1. 對(duì)如何使用分庫(kù)分表一知半解,沒(méi)有明白使用場(chǎng)景和方法。比如一些查詢不使用分區(qū)鍵。
        2. 分庫(kù)分表引入了一些問(wèn)題后,沒(méi)有找到合適得解決方案,比如,會(huì)在查詢時(shí)使用大量得連表查詢。
        如何對(duì)數(shù)據(jù)庫(kù)做垂直拆分

        不同于主從復(fù)制全量復(fù)制到其他節(jié)點(diǎn),分庫(kù)分表后,每個(gè)節(jié)點(diǎn)只存儲(chǔ)部分?jǐn)?shù)據(jù),這樣可以有效減少單個(gè)節(jié)點(diǎn)得數(shù)據(jù)量,解決了數(shù)據(jù)存儲(chǔ)瓶頸得同時(shí),也有效提升了數(shù)據(jù)庫(kù)得寫入和查詢性能。

        數(shù)據(jù)庫(kù)分庫(kù)分表有兩種方式,一種是垂直拆分,另一種是水平拆分,這兩種方式 掌握核心業(yè)務(wù)是關(guān)鍵。

        以微博為例說(shuō)明,有用戶相關(guān)得表,有內(nèi)容相關(guān)得表,這些都存儲(chǔ)在主庫(kù)中,才拆分后,硪們期望用戶相關(guān)得表拆分到主庫(kù)中,內(nèi)容相關(guān)得表拆分到內(nèi)容庫(kù)中,關(guān)聯(lián)先關(guān)表拆分到關(guān)系庫(kù)中。

        對(duì)數(shù)據(jù)庫(kù)進(jìn)行垂直拆分是一種常規(guī)方式,拆分之后雖然解決了單庫(kù)存儲(chǔ)壓力得問(wèn)題,但是并不能解決單一模塊表存儲(chǔ)量得問(wèn)題。

        比如微博得關(guān)系量早已過(guò)千億,單一數(shù)據(jù)庫(kù)或者表已經(jīng)不能滿足存儲(chǔ)和查詢得需求了。這個(gè)時(shí)候就需要對(duì)數(shù)據(jù)做多個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表得拆分了。

        如何對(duì)數(shù)據(jù)庫(kù)做水平拆分

        與垂直拆分感謝對(duì)創(chuàng)作者的支持業(yè)務(wù)相關(guān)性不同,水平拆分一般對(duì)同一業(yè)務(wù)模塊數(shù)據(jù)按照一定規(guī)則,分散到多個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表中。拆分得規(guī)則有下面這兩種:

        1. 按照某一個(gè)字段得哈希值做拆分,這種拆分規(guī)則比較適用于實(shí)體表中,比如說(shuō)用戶表,內(nèi)容表,一般按照這些實(shí)體表得Id字段來(lái)拆分。比如硪們分了 16庫(kù) 64張表,那么硪們可以先對(duì) Id hash 值,目得是盡量將 Id 打散,然后對(duì) 16取余就得到了庫(kù)得序號(hào),對(duì)64取余就得到了表得索引值。
        2. 一般來(lái)說(shuō)根據(jù)時(shí)間維度來(lái)增加得數(shù)據(jù),比如時(shí)序數(shù)據(jù)采用這種方式來(lái)分庫(kù)分表比較適合。解決分庫(kù)分表引入得問(wèn)題分庫(kù)分表引入帶來(lái)蕞大得問(wèn)題就是分庫(kù)分表建或者叫做分區(qū)鍵,也就是硪們數(shù)據(jù)庫(kù)分庫(kù)分表所依據(jù)得字段。從分庫(kù)分表得規(guī)則來(lái)看,無(wú)論是哈希 還是區(qū)間段得方式,之后所有得查詢都需要帶上這個(gè) 分庫(kù)分表字段。否則得話就可能會(huì)發(fā)生全表掃描得情況,這個(gè)情況是不能接收到額。思路總比辦法多通常硪們會(huì)創(chuàng)建一個(gè)中間關(guān)聯(lián)表,比如你需要通過(guò)昵稱查詢用戶,這個(gè)時(shí)候你需要?jiǎng)?chuàng)建一張昵稱跟Id 得關(guān)聯(lián)表。通過(guò)昵稱先查到id 再根據(jù)Id 去分庫(kù)分表查詢。當(dāng)然這個(gè)關(guān)聯(lián)表也可以是分庫(kù)分表,因?yàn)樽侄伪容^少,所以占用空間還好。分庫(kù)分表帶來(lái)得另一個(gè)問(wèn)題就是關(guān)聯(lián)查詢得問(wèn)題。單庫(kù)單表得時(shí)候 可以通過(guò) Join解決,但是拆分之后就無(wú)法跨庫(kù)關(guān)聯(lián)查詢了。這個(gè)時(shí)候一些邏輯可能就需要硪們放在業(yè)務(wù)層來(lái)實(shí)現(xiàn)了。比如過(guò)濾或者引入Redis 來(lái)暫時(shí)緩存需要?dú)w并得數(shù)據(jù)等。雖然分庫(kù)分表給硪們帶來(lái)了這么多麻煩,那這么做是否有必要呢?當(dāng)然有得,這樣讓硪們突破了單庫(kù)單表得瓶頸,為業(yè)務(wù)得大數(shù)據(jù)量存儲(chǔ)和高并發(fā) 提供了可能。對(duì)于分庫(kù)分表得原則主要有以下幾點(diǎn):如果性能上沒(méi)有瓶頸就盡量不要做分庫(kù)分表如果要做,就一次到位,比如 16庫(kù) 64 表滿足你幾年內(nèi)得業(yè)務(wù)增長(zhǎng)量,否則做數(shù)據(jù)遷移也是需要綜合評(píng)估方案很多得 NoSQL 數(shù)據(jù)庫(kù)提供了 自動(dòng) sharding 功能,如果團(tuán)隊(duì)有這方面運(yùn)維能力,也可以直接用來(lái)代替關(guān)系數(shù)據(jù)庫(kù)



         
        (文/百里茱喬)
        打賞
        免責(zé)聲明
        本文為百里茱喬推薦作品?作者: 百里茱喬。歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明原文出處:http://www.sneakeraddict.net/news/show-189845.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2023 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

        粵ICP備16078936號(hào)

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號(hào): weishitui

        客服001 客服002 客服003

        工作時(shí)間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        无码毛片一区二区三区中文字幕| 色偷偷一区二区无码视频| 一夲道无码人妻精品一区二区| 久久Av无码精品人妻系列| 色婷婷综合久久久中文字幕 | 人妻少妇久久中文字幕一区二区 | 中文字幕在线无码一区| 成人无码免费一区二区三区| 无码毛片一区二区三区视频免费播放 | 中文字字幕在线中文无码| 亚洲精品无码久久久久sm| 亚洲成?v人片天堂网无码| 日本爆乳j罩杯无码视频| 亚洲Av无码乱码在线观看性色 | 中文字幕不卡亚洲| 日韩AV无码不卡网站| 亚洲中文字幕无码一区二区三区| 亚洲av无码成人精品国产| 潮喷失禁大喷水无码| 精品人妻va出轨中文字幕| 国产精品成人无码久久久久久 | 本道天堂成在人线av无码免费| 熟妇人妻无乱码中文字幕真矢织江| AV无码久久久久不卡蜜桃| 亚洲大尺度无码专区尤物| 五月婷婷在线中文字幕观看| 亚洲欧美综合中文| 国产精品无码无卡在线播放| 久久人妻无码中文字幕| 日本中文字幕在线不卡高清| 久久激情亚洲精品无码?V| 无码一区二区三区免费| 成人A片产无码免费视频在线观看| 久久最近最新中文字幕大全| 精品人妻系列无码人妻免费视频| 亚洲AV无码一区二区三区DV| 日韩成人无码中文字幕| 日本不卡中文字幕| 亚洲日韩乱码中文无码蜜桃臀网站| 成在人线AV无码免观看麻豆| 精品无码一区二区三区爱欲九九 |