<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 數(shù)據(jù)庫架構(gòu)演變及分庫分表-創(chuàng)新互聯(lián)

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

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

            3) 事務(wù)補償機制
            前面兩種方案,都不是最好的,事務(wù)補償機既能保證性能又能盡大可能保證事務(wù)的一致性。說白了就是突破事務(wù)一失敗就回滾的思想,指定在一定的時間內(nèi)不斷提交直到成功為止,如果超時則回滾。
            分庫分表過程中帶來的問題
            1、 擴容和數(shù)據(jù)的遷移
            數(shù)據(jù)已經(jīng)分片,同時數(shù)據(jù)量已經(jīng)快達(dá)到閾值,需要對集群進(jìn)行擴容,都采用成倍擴容。
            以下是5個擴容步驟:
            1) 增加新的路由規(guī)則,對新的數(shù)據(jù)庫采用新路由規(guī)則進(jìn)行寫,同時對舊數(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標(biāo)題:http://www.jbt999.com/article10/cddjdo.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、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;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

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

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 亚洲中文字幕无码视频在线观看 | 无人无码深夜久久 | 一级黄色艳情A片 | 欧美亚洲黄色电影免费收看 | 亚洲日韩一级精品片在线播放 |