<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      數(shù)據(jù)遷移工具設(shè)計(jì)

        在業(yè)務(wù)不斷發(fā)展變化的當(dāng)下,系統(tǒng)的更新?lián)Q代、擴(kuò)展延伸已成常態(tài)。當(dāng)新業(yè)務(wù)需要依托舊業(yè)務(wù)的歷史數(shù)據(jù),且這種情況并非個(gè)例,可能在多個(gè)場(chǎng)景中反復(fù)出現(xiàn)時(shí),一套通用的數(shù)據(jù)遷移工具就成為了支撐業(yè)務(wù)順暢過(guò)渡的關(guān)鍵。今天,我們不妨跳出具體的代碼實(shí)現(xiàn),從更宏觀的角度聊聊數(shù)據(jù)遷移工具設(shè)計(jì)的那些事兒。?

      一、為何需要數(shù)據(jù)遷移工具?

        業(yè)務(wù)的推進(jìn)往往不會(huì)一蹴而就,新業(yè)務(wù)上線時(shí),常常需要調(diào)用舊業(yè)務(wù)積累的歷史數(shù)據(jù)。就像有的路由業(yè)務(wù)在運(yùn)單業(yè)務(wù)運(yùn)行一段時(shí)間后才啟動(dòng),運(yùn)單的歷史數(shù)據(jù)就必須妥善遷移過(guò)去。而且,這種情況并非偶然,在不同的業(yè)務(wù)場(chǎng)景、不同的區(qū)域系統(tǒng)中都可能遇到。?
      隨著業(yè)務(wù)規(guī)模的擴(kuò)大,數(shù)據(jù)量也會(huì)急劇增長(zhǎng)。以某個(gè)快遞系統(tǒng)為例,短短幾個(gè)月就積累了數(shù)千萬(wàn)數(shù)據(jù),若按一年的業(yè)務(wù)量預(yù)估,數(shù)據(jù)總量更是龐大。這就要求數(shù)據(jù)遷移工具能夠應(yīng)對(duì)大規(guī)模數(shù)據(jù)的處理,同時(shí)為未來(lái)可能的系統(tǒng)擴(kuò)展做好準(zhǔn)備。?

      二、設(shè)計(jì)的核心思路?

        設(shè)計(jì)數(shù)據(jù)遷移工具,首先要明確整體的方向。我們可以采用新舊系統(tǒng)并行的方式,讓舊系統(tǒng)繼續(xù)處理業(yè)務(wù),同時(shí)搭建新的存儲(chǔ)架構(gòu)。通過(guò)全量同步與增量同步相結(jié)合的方式,先將大部分歷史數(shù)據(jù)遷移過(guò)去,然后在業(yè)務(wù)相對(duì)平緩的時(shí)段完成切換。最后,再通過(guò)數(shù)據(jù)核對(duì)來(lái)確保遷移的完整性,對(duì)可能遺漏的數(shù)據(jù)進(jìn)行補(bǔ)充。?
        這種思路的核心在于平衡業(yè)務(wù)連續(xù)性和數(shù)據(jù)遷移的效率與準(zhǔn)確性。既不能因?yàn)檫w移工作影響現(xiàn)有業(yè)務(wù)的正常運(yùn)行,又要保證數(shù)據(jù)能夠及時(shí)、準(zhǔn)確地轉(zhuǎn)移到新的系統(tǒng)中。

      三、全量同步的考量?

        全量同步,顧名思義,就是將指定范圍內(nèi)的歷史數(shù)據(jù)整體遷移。這就像搬家時(shí)先把大部分家具一次性搬到新家一樣。?
      • 批次管理:在進(jìn)行全量同步時(shí),如何合理劃分?jǐn)?shù)據(jù)批次是個(gè)關(guān)鍵問(wèn)題。批次太小,會(huì)增加處理的繁瑣程度;批次太大,又可能影響處理效率和穩(wěn)定性。我們需要找到一個(gè)合適的批次大小,讓數(shù)據(jù)處理既能有序進(jìn)行,又能在出現(xiàn)問(wèn)題時(shí)便于排查和恢復(fù)。?
      • 數(shù)據(jù)篩選:不是所有的數(shù)據(jù)都需要遷移,我們可以根據(jù)時(shí)間等條件,選取業(yè)務(wù)所需的那部分?jǐn)?shù)據(jù)。而且,對(duì)于已經(jīng)存在于新系統(tǒng)中的數(shù)據(jù),要判斷是否需要更新,確保數(shù)據(jù)的時(shí)效性。
      • 流程監(jiān)控:?在整個(gè)全量同步過(guò)程中,進(jìn)度的監(jiān)控也不可或缺。我們需要清楚地知道遷移進(jìn)行到了哪一步,還有多少數(shù)據(jù)未遷移,以便及時(shí)發(fā)現(xiàn)問(wèn)題并調(diào)整策略。?

      四、增量同步的邏輯?

        全量同步完成后,舊系統(tǒng)可能還在不斷產(chǎn)生新的數(shù)據(jù),這就需要增量同步來(lái)跟進(jìn)。增量同步就像是在搬家后,不斷把后續(xù)添置的小物件及時(shí)送到新家。?
      • 方案考量:為了保證增量數(shù)據(jù)能夠及時(shí)、準(zhǔn)確地同步,需要一套可靠的機(jī)制來(lái)捕獲和處理這些數(shù)據(jù)。可以借助消息隊(duì)列等工具,讓數(shù)據(jù)的傳遞更加高效、穩(wěn)定。
      • 風(fēng)險(xiǎn)兜底:要處理好數(shù)據(jù)傳遞過(guò)程中可能出現(xiàn)的異常情況,比如數(shù)據(jù)丟失、重復(fù)等,確保每一條新增或變更的數(shù)據(jù)都能正確地反映在新系統(tǒng)中。?
        增量同步的關(guān)鍵在于及時(shí)性和準(zhǔn)確性,它要緊跟業(yè)務(wù)的步伐,讓新系統(tǒng)中的數(shù)據(jù)始終與業(yè)務(wù)實(shí)際情況保持一致。?

      五、應(yīng)對(duì)沖突與保障可靠?

        在全量同步和增量同步同時(shí)進(jìn)行時(shí),難免會(huì)出現(xiàn)數(shù)據(jù)沖突的情況。比如,同一條數(shù)據(jù)在全量同步過(guò)程中,又在增量同步中被修改。這就需要我們制定合理的規(guī)則來(lái)判斷該保留哪份數(shù)據(jù),通常會(huì)以時(shí)間為依據(jù),保留更新時(shí)間更新的數(shù)據(jù)。?
        對(duì)于刪除操作,也需要謹(jǐn)慎處理。要考慮到全量同步和增量同步的先后順序,避免因?yàn)橥降臅r(shí)序問(wèn)題導(dǎo)致數(shù)據(jù)不一致。?
        此外,任何系統(tǒng)都可能出現(xiàn)故障,數(shù)據(jù)遷移工具也不例外。因此,一套完善的補(bǔ)償機(jī)制必不可少。當(dāng)某些數(shù)據(jù)遷移失敗時(shí),能夠自動(dòng)進(jìn)行重試,確保數(shù)據(jù)最終能夠遷移成功。

       六、全量同步設(shè)計(jì):

       流程圖:

      image

       設(shè)計(jì)思路:

      • 采用遷移任務(wù)表記錄此次遷移任務(wù),按N條數(shù)據(jù)一個(gè)批次進(jìn)行滾動(dòng)查詢數(shù)據(jù)和處理。本批次數(shù)據(jù)經(jīng)過(guò)一系列過(guò)濾和校驗(yàn)后寫入新庫(kù),每個(gè)批次會(huì)生成遷移明細(xì)記錄來(lái)記錄本批次的處理狀態(tài)和重試信息,并記錄下真實(shí)的每個(gè)批次執(zhí)行了多少數(shù)據(jù)量。
      • 把本批次最大的id設(shè)置為下一批次的起始id,并把這個(gè)id記錄在遷移任務(wù)表中,記錄上一次滾動(dòng)最后記錄的滾動(dòng)字段值。然后更新本批次遷移明細(xì)的狀態(tài)。如果發(fā)生異常會(huì)更新本次數(shù)據(jù)的遷移進(jìn)度和重試次數(shù)。
      數(shù)據(jù)過(guò)濾:
      • 按時(shí)間范圍過(guò)濾當(dāng)前階段的數(shù)據(jù),記錄創(chuàng)建時(shí)間在設(shè)定的遷移開始和截止時(shí)間之間,否則過(guò)濾
      • 按主鍵查詢新庫(kù),對(duì)比要遷移的數(shù)據(jù)是否已有記錄存在新庫(kù)。
        • 如果存在,則判斷同步時(shí)間是否大于新庫(kù)記錄的創(chuàng)建時(shí)間,如果大于需要更新數(shù)據(jù),否則不處理。
        • 如果不存在,對(duì)于修改要轉(zhuǎn)成新增、對(duì)于刪除進(jìn)行忽略

      寫入新庫(kù):

        寫新庫(kù)的擴(kuò)展,遷移是針對(duì)表去生成遷移任務(wù)。所以在這里可以把不同表的數(shù)據(jù)分組。然后針對(duì)每個(gè)組的數(shù)據(jù),把insert跟delete操作整合一下進(jìn)行批量,更新操作就是單獨(dú)執(zhí)行。

      執(zhí)行異常處理:

        一批數(shù)據(jù)寫入過(guò)程中,如果正常執(zhí)行完成就繼續(xù)執(zhí)行,更新失敗我們會(huì)拋出異常,終止全量任務(wù)。去排查異常后重啟。

      極端情況的考量:

      1. 數(shù)據(jù)寫入新庫(kù)后,新增明細(xì)掛了,未更新遷移表階段號(hào)
        1. 上一階段已經(jīng)更新了遷移表中的上一階段最后記錄值和階段號(hào),利用階段號(hào)+1查詢未產(chǎn)品明細(xì)數(shù)據(jù),代表下一階段并未完成,用最后記錄值作為起始查詢值,填充遷移表最后的記錄信息作為新一輪任務(wù)。
      2. 新增明細(xì)后,未更新遷移記錄和明細(xì)狀態(tài),掛了
        1. 未更新遷移明細(xì),重啟后查明細(xì)會(huì)針對(duì)未完成的階段繼續(xù)進(jìn)行寫入,利用數(shù)據(jù)過(guò)濾機(jī)制,保證不重復(fù)插入
      3. 下一階段查詢到數(shù)據(jù)后掛了
        1. 上一階段完成了,直接用上一階段保存的遷移記錄作為新的階段數(shù)據(jù),上一階段最后寫入的記錄值作為這一階段的起始值,查數(shù)據(jù)處理

      遷移進(jìn)度統(tǒng)計(jì):

      統(tǒng)計(jì)表架構(gòu):表名、業(yè)務(wù)系統(tǒng)id、數(shù)據(jù)量、統(tǒng)計(jì)時(shí)間、查詢統(tǒng)計(jì)開始截止時(shí)間、記錄時(shí)間
      生成邏輯:針對(duì)原表的數(shù)據(jù),從滾動(dòng)時(shí)間當(dāng)日開始到截止時(shí)間,統(tǒng)計(jì)原庫(kù)中原表數(shù)據(jù)每日的數(shù)據(jù)總量。用以與遷移任務(wù)表的數(shù)據(jù)總量進(jìn)行對(duì)比,形成遷移進(jìn)度。

      image

        正常情況下全量同步再更新完本輪的明細(xì)和遷移任務(wù)信息后,去查源表下一批次數(shù)據(jù)。當(dāng)查不到說(shuō)明在設(shè)定的時(shí)間范圍內(nèi),已經(jīng)完成了所有數(shù)據(jù)的同步。也存在一種情況,最后查到的數(shù)據(jù),經(jīng)過(guò)過(guò)濾判斷已經(jīng)存在于新庫(kù)了,那么在每次寫入后,需要跟遷移進(jìn)度表對(duì)比一下,看看是否已經(jīng)同步完成了。
      對(duì)比邏輯:通過(guò)當(dāng)前批次的滾動(dòng)時(shí)間去查詢對(duì)應(yīng)的需要遷移的數(shù)據(jù)總量,判斷遷移記錄表中已完成的遷移記錄數(shù)與需要遷移的數(shù)據(jù)總數(shù)對(duì)比,如果大于或等于代表已經(jīng)同步完成了,結(jié)束全量任務(wù)。

      補(bǔ)償:定時(shí)任務(wù)會(huì)查詢失敗的遷移任務(wù)數(shù)據(jù),進(jìn)行定時(shí)補(bǔ)償,獲取失敗前的同步記錄進(jìn)行滾動(dòng)數(shù)據(jù)設(shè)置,并設(shè)置重試次數(shù)。最大重試次數(shù)為3次。

      七、增量同步設(shè)計(jì)

      流程圖:

      image

       

      雙隊(duì)列機(jī)制:

      • 采用內(nèi)存隊(duì)列是為了提升下游消費(fèi)能力,隊(duì)列實(shí)現(xiàn)輕量異步,同時(shí)對(duì)隊(duì)列中的數(shù)據(jù),進(jìn)行一批批數(shù)據(jù)后,根據(jù)操作類型入庫(kù)可以減少磁盤IO頻次。
      • 采用讀寫隊(duì)列,是考慮到數(shù)據(jù)寫入失敗。所以設(shè)置了只讀MQ消息,數(shù)據(jù)成功后才進(jìn)提交。如果采用單隊(duì)列,隊(duì)列又要被寫入,又要讀取,無(wú)法保證高并發(fā)場(chǎng)景下,不上鎖怎么去清理掉正確的數(shù)據(jù),如果一直不清理,堆積的內(nèi)存會(huì)無(wú)限膨脹直到溢出。如果上鎖解決,性能反而更加不如雙隊(duì)列。

      兩個(gè)線程:

      • 拉取隊(duì)列負(fù)責(zé):新增消費(fèi)記錄,數(shù)據(jù)進(jìn)行轉(zhuǎn)換寫入內(nèi)存隊(duì)列;
      • 提交隊(duì)列負(fù)責(zé):查詢狀態(tài)已消費(fèi)的記錄,進(jìn)行提交;避免binlog消息不丟失,采用手動(dòng)提交ack。
      增量同步的停止:全量當(dāng)同步不到最新的訂單了,任務(wù)就會(huì)停止。增量同步任務(wù)會(huì)不斷運(yùn)行,確保兩邊數(shù)據(jù)庫(kù)狀態(tài)是同步的。會(huì)在某一個(gè)時(shí)刻,兩邊數(shù)據(jù)庫(kù)狀態(tài)一致。就需要進(jìn)行數(shù)據(jù)校驗(yàn)

      增量同步故障點(diǎn)和結(jié)局:

      1、消息剛拉取,還未寫入記錄表,掛了:未進(jìn)行任何處理,不影響什么,重啟后直接再次拉取
      2、消息拉取后,寫入了記錄表,往隊(duì)列寫數(shù)據(jù)。數(shù)據(jù)還沒有被拿出來(lái)就掛了: 針對(duì)已存在記錄的數(shù)據(jù),會(huì)判斷記錄狀態(tài),只要不是已提交數(shù)據(jù),都會(huì)進(jìn)行重新入隊(duì)處理
      3、數(shù)據(jù)被從隊(duì)列拿出來(lái),處理過(guò)程中掛了:數(shù)據(jù)仍舊是未被消費(fèi)和提交的,重新拉取處理即可
      4、數(shù)據(jù)拿出來(lái)了,寫入新庫(kù)了,但是還未來(lái)的及更新消費(fèi)記錄狀態(tài)為已消費(fèi): 重新拉取的數(shù)據(jù),會(huì)在寫入新庫(kù)前進(jìn)行數(shù)據(jù)過(guò)濾,通過(guò)時(shí)間判斷會(huì)過(guò)濾掉已經(jīng)落庫(kù)的數(shù)據(jù)。然后會(huì)在這次處理中,完成失敗的更新
      5、整個(gè)流程都成功了,但是offset提交線程還未提交就掛了:下次啟動(dòng)的時(shí)候仍舊是會(huì)被拉取,然后被數(shù)據(jù)過(guò)濾去重
      6、offset提交到mq了,但是本地消費(fèi)記錄狀態(tài)未修改為已提交:下次啟動(dòng)的時(shí)候仍舊是會(huì)被拉取,然后被數(shù)據(jù)過(guò)濾去重。這里就涉及到了已有消費(fèi)記錄的數(shù)據(jù),哪怕是已消費(fèi)只要沒提交都會(huì)進(jìn)行重新入隊(duì)
      哪怕是記錄都修改了后,但是mq本身提交消息時(shí)失敗了,重試后,對(duì)于已提交數(shù)據(jù)會(huì)進(jìn)行再次提交
       
      posted @ 2025-07-21 21:39  難得  閱讀(23)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲欧洲日产国无高清码图片| 国产精品久久蜜臀av| 最新av中文字幕无码专区| 乱码中字在线观看一二区| 国产精品天天看天天狠| 色一情一乱一区二区三区码| 国产综合久久亚洲综合| 一区二区三区精品不卡| 好吊视频在线一区二区三区| 毛茸茸性xxxx毛茸茸毛茸茸| 丝袜老师办公室里做好紧好爽| 香蕉乱码成人久久天堂爱| 国产亚洲精品综合99久久| 好紧好滑好湿好爽免费视频| 亚洲国产精品综合久久2007| 国产精品黄大片在线播放| 国产在线观看91精品亚瑟| 亚洲综合av一区二区三区| 94人妻少妇偷人精品| 亚洲综合在线日韩av| 国产蜜臀一区二区在线播放| 欧美日韩精品一区二区三区在线| 国产精品无码成人午夜电影| 日韩在线视频线观看一区| 午夜精品一区二区三区成人| 曰韩亚洲AV人人夜夜澡人人爽| 亚洲一区在线成人av| 99精品国产精品一区二区| 亚洲av午夜福利精品一区二区| 日本一区二区精品色超碰| 又爽又黄又无遮挡的激情视频| 最新亚洲av日韩av二区| 久久国产精品二国产人妻| 蜜臀av久久国产午夜福利软件| 国产精品亚洲专区无码导航| 国产一区韩国主播| 亚洲日本韩国欧美云霸高清| 色吊丝一区二区中文字幕| 无码高潮爽到爆的喷水视频app | 人人爽人人爽人人片av东京热| 天天爽夜夜爱|