欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

數(shù)據(jù)庫架構(gòu)演變及分庫分表-創(chuàng)新互聯(lián)

當生產(chǎn)環(huán)境中業(yè)務(wù)量激增,數(shù)據(jù)庫數(shù)據(jù)量也會極具增加。當數(shù)據(jù)庫的數(shù)據(jù)量達到一定程度時(數(shù)據(jù)庫瓶頸),數(shù)據(jù)庫宿主機負載超高,會嚴重影響業(yè)務(wù),嚴重時會導致數(shù)據(jù)庫宕機。
為了避免這種極端情況的發(fā)生,我們應(yīng)當在發(fā)生前做好預案,用于解決數(shù)據(jù)庫數(shù)據(jù)量過載的問題。
以下是我個人工作中使用的解決方案:
1)數(shù)據(jù)庫主從或多主多從方案
2)數(shù)據(jù)庫冷熱數(shù)據(jù)拆分
3)數(shù)據(jù)庫分庫分表操作
4)在數(shù)據(jù)庫前端增加緩存redis或memcached

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

一開始時,公司部分業(yè)務(wù)的架構(gòu)如下(全都是單節(jié)點情況)
數(shù)據(jù)庫架構(gòu)演變及分庫分表
經(jīng)過自己強調(diào)該架構(gòu)嚴重的缺點:節(jié)點單一,服務(wù)中斷情況嚴重等嚴峻問題,后演變?yōu)槿缦潞唸D的架構(gòu):
數(shù)據(jù)庫架構(gòu)演變及分庫分表
上述架構(gòu)中,我們更新代碼實現(xiàn)了不中斷服務(wù),同時解決了部分單一節(jié)點問題。后來一段時間業(yè)務(wù)做推廣優(yōu)惠活動,業(yè)務(wù)量激增,數(shù)據(jù)庫數(shù)據(jù)量成指數(shù)性增長。數(shù)據(jù)庫負載一直居高不下。當前的架構(gòu)已經(jīng)無法滿足業(yè)務(wù)需求,后又提出對數(shù)據(jù)庫進行數(shù)據(jù)的冷熱數(shù)據(jù)拆分和數(shù)據(jù)讀寫分離(可以考慮使用中間件Mycat、Atlas、MaxScale,也可以考慮讓開發(fā)寫路由規(guī)則,有些框架自帶路由規(guī)則),這里我們使用Mycat,如下圖架構(gòu),這里只顯示后端:
數(shù)據(jù)庫架構(gòu)演變及分庫分表
隨著時間的推移,單庫單表已經(jīng)達到業(yè)務(wù)忍受的極限,這時候已經(jīng)在硬件還是在mysql參數(shù)調(diào)優(yōu)上都已經(jīng)無法滿足業(yè)務(wù)。這時候提出了數(shù)據(jù)庫的分庫分表。這里主要講解數(shù)據(jù)庫的分庫分表
分庫分表一共有兩種方案:
1) 垂直拆分
2) 水平拆分
1、 垂直拆分
所謂垂直拆分,就是將單一數(shù)據(jù)庫拆分成多個數(shù)據(jù)庫,可以考慮的方案:
1) 根據(jù)業(yè)務(wù)邏輯進行拆分
2) 根據(jù)冷熱數(shù)據(jù)進行拆分
這里先講解根據(jù)業(yè)務(wù)邏輯拆分:
這里以商品--訂單--用戶為例,當多種類商品存放于一個數(shù)據(jù)庫和一張表中時,隨著時間推移,數(shù)據(jù)量增大,單庫單表查詢能力下降,可以根據(jù)商品種類來進行拆分,比如公司的產(chǎn)品:高中、初中、小學,由單個表拆分成三個獨立表。如果還大,繼續(xù)拆分,高中拆分成高一、高二、高三。初中拆分成初一、初二、初三。小學拆分成小一、小二......小六。(所有的分庫分表都源于生活中的邏輯)。
我們生產(chǎn)環(huán)境中針對數(shù)據(jù)進行了拆分,冷數(shù)據(jù)(采用MyISAM引擎),熱數(shù)據(jù)(采用Innodb引擎),同時將MyISAM引擎的數(shù)據(jù)庫的宿主機多采用redis或memcache進行緩存,Innodb引擎的數(shù)據(jù)庫的宿主機針對業(yè)務(wù)情況分配計算型和內(nèi)存型物理機,還是混合型,同時可以考慮使用redis做部分存儲,用于緩解數(shù)據(jù)庫壓力。
垂直拆分優(yōu)缺點:
優(yōu)點:
1) 由單庫單表拆分成多庫多表,降低了數(shù)據(jù)庫增刪改查壓力
2) 對冷熱數(shù)據(jù)拆分,降低了成本并合理利用硬件
3) 對于垂直拆分的數(shù)據(jù)庫,在設(shè)計數(shù)據(jù)庫時就應(yīng)當考慮好數(shù)據(jù)庫架構(gòu)的延展性,(否則會對后期的擴展造成很大的阻力)
4) 按照業(yè)務(wù)分庫后,業(yè)務(wù)邏輯更加清晰,更方便運維管理。
缺點:
1) 對于聯(lián)表查詢,帶來了不便,可以通過調(diào)用接口的方式來觸發(fā)聯(lián)表查詢的操作,對整個系統(tǒng)而言,復雜度提高了。
2) 對于有些數(shù)據(jù)庫,存在單庫性能瓶頸影響整個業(yè)務(wù)情況。
3) 同時對于事務(wù)而言,復雜度提高了。
2、 水平拆分
所謂水平拆分,簡單來說就是將一張表中的數(shù)據(jù)按照行拆分成多份存儲到不同的數(shù)據(jù)庫的表中。比如user表有9000條數(shù)據(jù),將user表拆成user1、user2、user3三張表存放于不同的數(shù)據(jù)庫中,user1存儲前3000條數(shù)據(jù),中間3000條數(shù)據(jù)存儲到user2表中,最后3000條數(shù)據(jù)存放到user3表中。
水平拆分的分片維度(有很多算法來決定采用哪種水平拆分的方案)
1) 按照哈希切片,對某個字段進行求哈希值,然后除以分片的數(shù)量,最后取模,取模相同的數(shù)據(jù)為一個分片,這就是哈希分片。
這種分片方式?jīng)]有時效性。對數(shù)據(jù)分散比較均勻,缺點是如果需要查詢則需要對數(shù)據(jù)進行聚合處理。
2) 按照時間序列算法切片,有的業(yè)務(wù)會有明顯的季度波動,可以使用時間算法。這種算法就是數(shù)據(jù)分配不均。
生產(chǎn)環(huán)境中,我們部分業(yè)務(wù)采用的是哈希算法和時間序列算法的混合式
說到水平拆分,不得不提的是水平拆分的路由規(guī)則
設(shè)計數(shù)據(jù)庫的時候,就要考慮到數(shù)據(jù)庫中各種表的路由規(guī)則,同時還需要考慮數(shù)據(jù)表將來按照什么樣的路由規(guī)則來進行分庫分表。
比如,某個新用戶注冊,這個用戶是如何分配到哪個庫哪個表中?一般在注冊的時候都會系統(tǒng)自動分配一個uid。根據(jù)這個uid可以按照某種算法來進行分配。比如uid%4,(這里將一張表分成4個表),如果是1 則分到第一張表中,以此類推。

水平拆分的優(yōu)缺點:
1) 單庫單表的數(shù)據(jù)量大就那么大,有數(shù)據(jù)量的限制,我們可以根據(jù)業(yè)務(wù)情況來分配,剛好達到大(這個量很難把握),既能提高該表的操作性能又節(jié)省了資源
2) 因為對表的結(jié)構(gòu)改變非常少,對于開發(fā)而言更改代碼量非常少,只需要增加路由規(guī)則。
3) 對整體系統(tǒng)的穩(wěn)定性和負載都有大大的提高
缺點:
1) jion操作非常困難,尤其是跨庫的聯(lián)表查詢
2) 有的拆分規(guī)則很難抽象出來
3) 分片的事務(wù)一致性比較難解決
4) 還有數(shù)據(jù)庫的擴容和維護比較困難
針對上述垂直拆分和水平拆分,都有以下缺點:
1) jion操作困難
2) 事務(wù)一致性困難
3) 多個數(shù)據(jù)源的管理變復雜。
如何解決事務(wù)一致性問題呢?(這個重要性排在第一位)
1) 采用本地事務(wù)的一致性(能用則用)
2) 分布式事務(wù)處理
分布式事務(wù)處理的解決方案:
1) 兩階段提交方案(最嚴格的方案,很少使用,因為是阻塞協(xié)議造成性能問題):分為準備(鎖定資源)和提交(消費資源)兩個階段。這種方式依賴資源管理器。
2) 大努力保證模式(最常用,極端情況需要實時補償,將已提交的數(shù)據(jù)進行回滾)不依賴資源管理器
一共有兩種操作:從消息隊列中消費消息和更新數(shù)據(jù)庫操作
開始消息事務(wù)?開始數(shù)據(jù)庫事務(wù)?接收消息?更新數(shù)據(jù)庫?提交數(shù)據(jù)庫事務(wù)?提交消息事務(wù)
當更新數(shù)據(jù)庫時,突然中斷,會進行回滾,恢復到初始狀態(tài),特殊情況,如果提交數(shù)據(jù)庫事務(wù)成功,但是提交消息事務(wù)失敗,就會造成消息再次消費的情況。這個可以通過消息冪等處理(有時候很多消息無法滿足冪等性比如update操作,可以考慮增加一個消息應(yīng)用狀態(tài)表來記錄消息消耗情況和數(shù)據(jù)庫事務(wù)情況),出現(xiàn)上述極端情況,需要實時補償。這種補償機制類似于TCC模式Try-Confirm-Cancel(如果try都成功了,它會重復confirm或重復cancel,直到都成功),TCC要求Confirm/Cancel都必須是冪等操作。

3) 事務(wù)補償機制
前面兩種方案,都不是最好的,事務(wù)補償機既能保證性能又能盡大可能保證事務(wù)的一致性。說白了就是突破事務(wù)一失敗就回滾的思想,指定在一定的時間內(nèi)不斷提交直到成功為止,如果超時則回滾。
分庫分表過程中帶來的問題
1、 擴容和數(shù)據(jù)的遷移
數(shù)據(jù)已經(jīng)分片,同時數(shù)據(jù)量已經(jīng)快達到閾值,需要對集群進行擴容,都采用成倍擴容。
以下是5個擴容步驟:
1) 增加新的路由規(guī)則,對新的數(shù)據(jù)庫采用新路由規(guī)則進行寫,同時對舊數(shù)據(jù)庫采用舊路由規(guī)則寫。(雙寫,兩套路由規(guī)則)
2) 將雙寫前的舊數(shù)據(jù)按照新規(guī)則寫入到新數(shù)據(jù)庫中(需要做大量的數(shù)據(jù)清洗工作)。
3) 將按照舊的分片規(guī)則的查詢更改為按照新的分片規(guī)則查詢。
4) 將雙寫的路由規(guī)則代碼下線,只按照新規(guī)則寫數(shù)據(jù)
5) 刪除按照舊分片規(guī)則寫入的歷史數(shù)據(jù)。
2、 分庫分表帶來的聯(lián)表查詢問題
舉例:
賣家和買家,賣家需要查看該商品賣出情況,買家需要查看自己的交易情況,可以考慮使用兩個表,一個以買家維度,記錄買家商品交易情況,一個以賣家維度,記錄賣家該商品交易情況。也就是查詢交易和交易的數(shù)據(jù)是分別存儲的,并從不同的系統(tǒng)提供接口。
方法二:通過搜索引擎解決(大數(shù)據(jù)了)

參考文檔:
https://blog.csdn.net/it_man/article/details/21593187

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞名稱:數(shù)據(jù)庫架構(gòu)演變及分庫分表-創(chuàng)新互聯(lián)
URL標題:http://chinadenli.net/article10/cddjdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航ChatGPT品牌網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站動態(tài)網(wǎng)站軟件開發(fā)

廣告

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

成都網(wǎng)站建設(shè)