国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

給你10億數(shù)據(jù),如何做遷移?

開發(fā) 前端
某次金融系統(tǒng)遷移項(xiàng)目中,原計(jì)劃8小時(shí)完成的用戶數(shù)據(jù)同步遲遲未能完成。24小時(shí)后監(jiān)控警報(bào)顯示:由于全表掃描SELECT * FROM users導(dǎo)致源庫(kù)CPU幾乎熔毀,業(yè)務(wù)系統(tǒng)被迫停機(jī)8小時(shí)。

前言

某次金融系統(tǒng)遷移項(xiàng)目中,原計(jì)劃8小時(shí)完成的用戶數(shù)據(jù)同步遲遲未能完成。

24小時(shí)后監(jiān)控警報(bào)顯示:由于全表掃描SELECT * FROM users導(dǎo)致源庫(kù)CPU幾乎熔毀,業(yè)務(wù)系統(tǒng)被迫停機(jī)8小時(shí)。

這讓我深刻領(lǐng)悟到——10億條數(shù)據(jù)不能用蠻力搬運(yùn),得用巧勁兒遞接!

今天這篇文章,跟大家一起聊聊10億條數(shù)據(jù),如何做遷移,希望對(duì)你會(huì)有所幫助。

一、分而治之

若把數(shù)據(jù)遷移比作吃蛋糕,沒人能一口吞下整個(gè)十層蛋糕;

必須切成小塊細(xì)嚼慢咽。

避坑案例:線程池濫用引發(fā)的血案

某團(tuán)隊(duì)用100個(gè)線程并發(fā)插入新庫(kù),結(jié)果目標(biāo)庫(kù)死鎖頻發(fā)。

最后發(fā)現(xiàn)是主鍵沖突導(dǎo)致——批處理必須兼顧順序和擾動(dòng)。

分頁(yè)遷移模板代碼:

long maxId = 0;  
int batchSize = 1000;  
while (true) {  
    List<User> users = jdbcTemplate.query(  
        "SELECT * FROM users WHERE id > ? ORDER BY id LIMIT ?",  
        new BeanPropertyRowMapper<>(User.class),  
        maxId, batchSize  
    );  
    if (users.isEmpty()) {
        break;  
    }
    // 批量插入新庫(kù)(注意關(guān)閉自動(dòng)提交)  
    jdbcTemplate.batchUpdate(  
        "INSERT INTO new_users VALUES (?,?,?)",  
        users.stream().map(u -> new Object[]{u.id, u.name, u.email}).collect(Collectors.toList())  
    );  
    
    maxId = users.get(users.size()-1).getId();  
}

避坑指南:

  • 每批取遞增ID而不是OFFSET,避免越往后掃描越慢
  • 批處理大小根據(jù)目標(biāo)庫(kù)寫入能力動(dòng)態(tài)調(diào)整(500-5000條/批)

二、雙寫

經(jīng)典方案是停機(jī)遷移,但對(duì)10億數(shù)據(jù)來說停機(jī)成本難以承受,雙寫方案才是王道。

雙寫的三種段位:

  1. 青銅級(jí):先停寫舊庫(kù)→導(dǎo)數(shù)據(jù)→開新庫(kù) →風(fēng)險(xiǎn):停機(jī)時(shí)間不可控
  2. 黃金級(jí):同步雙寫+全量遷移→差異對(duì)比→切流 →優(yōu)點(diǎn):數(shù)據(jù)零丟失
  3. 王者級(jí):逆向同步兜底(新庫(kù)→舊庫(kù)回寫),應(yīng)對(duì)切流后異常場(chǎng)景

當(dāng)然雙寫分為:

  • 同步雙寫
  • 異步雙寫

同步雙寫實(shí)時(shí)性更好,但性能較差。

異步雙寫實(shí)時(shí)性差,但性能更好。

我們這里考慮使用異步雙寫。

異步雙寫架構(gòu)如圖所示:

圖片圖片

代碼實(shí)現(xiàn)核心邏輯:

  • 開啟雙寫開關(guān)
@Transactional  
public void createUser(User user) {  
    // 舊庫(kù)主寫  
    oldUserRepo.save(user);  
    // 異步寫新庫(kù)(允許延遲)  
    executor.submit(() -> {  
        try {  
            newUserRepo.save(user);  
        } catch (Exception e) {  
            log.error("新庫(kù)寫入失?。簕}", user.getId());  
            retryQueue.add(user);  
        }  
    });  
}
  • 差異定時(shí)校驗(yàn)
// 每天凌晨校驗(yàn)差異數(shù)據(jù)  
@Scheduled(cron = "0 0 3 * * ?")  
public void checkDiff() {  
    long maxOldId = oldUserRepo.findMaxId();  
    long maxNewId = newUserRepo.findMaxId();  
    if (maxOldId != maxNewId) {  
        log.warn("數(shù)據(jù)主鍵最大不一致,舊庫(kù){} vs 新庫(kù){}", maxOldId, maxNewId);  
        repairService.fixData();  
    }  
}

三、用好工具

不同場(chǎng)景需匹配不同的工具鏈,好比搬家時(shí)家具用貨車,細(xì)軟用包裹。

工具選型對(duì)照表

工具名稱

適用場(chǎng)景

10億數(shù)據(jù)速度參考

mysqldump

小型表全量導(dǎo)出

不建議(可能天級(jí))

MySQL Shell

InnoDB并行導(dǎo)出

約2-4小時(shí)

DataX

多源異構(gòu)遷移

依賴資源配置

Spark

跨集群大數(shù)據(jù)量ETL

30分鐘-2小時(shí)

Spark遷移核心代碼片段:

val jdbcDF = spark.read  
    .format("jdbc")  
    .option("url", "jdbc:mysql://source:3306/db")  
    .option("dbtable", "users")  
    .option("partitionColumn", "id")  
    .option("numPartitions", 100) // 按主鍵切分100個(gè)區(qū)  
    .load()  

jdbcDF.write  
    .format("jdbc")  
    .option("url", "jdbc:mysql://target:3306/db")  
    .option("dbtable", "new_users")  
    .mode(SaveMode.Append)  
    .save()

避坑經(jīng)驗(yàn):

  • 分區(qū)數(shù)量應(yīng)接近Spark執(zhí)行器核數(shù),太多反而降低效率
  • 分區(qū)字段必須是索引列,防止全表掃

四、影子測(cè)試

遷移后的數(shù)據(jù)一致性驗(yàn)證,好比宇航員出艙前的模擬訓(xùn)練。

影子庫(kù)驗(yàn)證流程:

  1. 生產(chǎn)流量同時(shí)寫入新&舊雙庫(kù)(影子庫(kù))
  2. 對(duì)比新舊庫(kù)數(shù)據(jù)一致性(抽樣與全量結(jié)合)
  3. 驗(yàn)證新庫(kù)查詢性能指標(biāo)(TP99/TP95延遲)

自動(dòng)化對(duì)比腳本示例:

def check_row_count(old_conn, new_conn):  
    old_cnt = old_conn.execute("SELECT COUNT(*) FROM users").scalar()  
    new_cnt = new_conn.execute("SELECT COUNT(*) FROM new_users").scalar()  
    assert old_cnt == new_cnt, f"行數(shù)不一致: old={old_cnt}, new={new_cnt}"  

def check_data_sample(old_conn, new_conn):  
    sample_ids = old_conn.execute("SELECT id FROM users TABLESAMPLE BERNOULLI(0.1)").fetchall()  
    for id in sample_ids:  
        old_row = old_conn.execute(f"SELECT * FROM users WHERE id = {id}").fetchone()  
        new_row = new_conn.execute(f"SELECT * FROM new_users WHERE id = {id}").fetchone()  
        assert old_row == new_row, f"數(shù)據(jù)不一致, id={id}"

五、回滾

即便做好萬(wàn)全準(zhǔn)備,也要設(shè)想失敗場(chǎng)景的回滾方案——遷移如跳傘,備份傘必須備好。

回滾預(yù)案關(guān)鍵點(diǎn):

  1. 備份快照:遷移前全量快照(物理備份+ Binlog點(diǎn)位)
  2. 流量回切:準(zhǔn)備路由配置秒級(jí)切換舊庫(kù)
  3. 數(shù)據(jù)標(biāo)記:新庫(kù)數(shù)據(jù)打標(biāo),便于清理臟數(shù)據(jù)

快速回滾腳本:

# 恢復(fù)舊庫(kù)數(shù)據(jù)  
mysql -h舊庫(kù) < backup.sql  

# 應(yīng)用Binlog增量  
mysqlbinlog --start-positinotallow=154 ./binlog.000001 | mysql -h舊庫(kù)  

# 切換DNS解析  
aws route53 change-resource-record-sets --cli-input-json file://switch_to_old.json

總結(jié)

處理10億數(shù)據(jù)的核心心法:

  1. 分而治之:拆解問題比解決問題更重要。
  2. 逐步遞進(jìn):通過灰度驗(yàn)證逐步放大流量。
  3. 守牢底線:回滾方案必須真實(shí)演練過。

記住——沒有百分百成功的遷移,只有百分百準(zhǔn)備的Plan B!

搬運(yùn)數(shù)據(jù)如同高空走鋼絲,你的安全保障(備份、監(jiān)控、熔斷)就是那根救命繩。

責(zé)任編輯:武曉燕 來源: 蘇三說技術(shù)
相關(guān)推薦

2025-07-03 08:21:16

2021-01-26 07:11:26

Redis數(shù)據(jù)同步數(shù)據(jù)遷移

2020-02-29 15:51:32

數(shù)據(jù)安全防護(hù)管理

2022-03-03 12:53:40

云遷移云計(jì)算云平臺(tái)

2024-11-12 16:58:35

2019-03-05 10:16:54

數(shù)據(jù)分區(qū)表SQLserver

2023-12-29 10:04:47

數(shù)據(jù)分析

2019-12-02 09:58:04

2017-11-02 08:54:13

數(shù)據(jù)存儲(chǔ)架構(gòu)

2018-05-18 09:18:00

數(shù)據(jù)分析報(bào)告數(shù)據(jù)收集

2022-08-29 08:08:58

SQLOracleCPU

2022-08-03 09:11:31

React性能優(yōu)化

2013-10-09 09:35:49

數(shù)據(jù)中心遷移虛擬化

2013-10-09 09:54:46

數(shù)據(jù)中心云計(jì)算

2019-08-20 00:39:28

數(shù)據(jù)存儲(chǔ)層冗余

2015-07-30 11:21:16

代碼審查

2025-10-15 09:20:00

2024-07-04 13:42:12

2023-09-27 22:44:18

數(shù)據(jù)遷移數(shù)據(jù)庫(kù)

2024-01-02 13:16:00

數(shù)據(jù)遷移PythonPETL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲另类春色校园小说| 日韩最新在线| 一区二区国产盗摄色噜噜| 国产精品一区在线免费观看| 欧美日本久久| 国产精品吴梦梦| 欧美色图五月天| 欧美激情精品久久久久久蜜臀| 电影网一区二区| 亚洲高清一二三区| 成人直播在线| 91麻豆精品91久久久久同性| 黄色电影免费在线看| 亚洲va国产天堂va久久en| 亚洲国产成人va在线观看麻豆| 国产aⅴ精品一区二区三区色成熟| 五月天色一区| 美女视频网站黄色亚洲| 午夜啪啪免费视频| 国产精品自拍毛片| www.av91| 91美女在线观看| 亚洲五月天综合| 中文字幕国产精品一区二区| 黑森林福利视频导航| 91麻豆精品一区二区三区| www.av蜜桃| 国产精品一区久久久久| 第九区2中文字幕| 国产高清一区日本| 久操网在线观看| 久久久久久9999| 啊啊啊好爽视频| 欧美日韩午夜剧场| 国产网站在线播放| 日韩欧美一区二区免费| 国产桃色电影在线播放| 日韩精品电影网| 色8久久久久| 欧美亚州一区二区三区| 性xxxx欧美老肥妇牲乱| 久久国产主播精品| 国产乱妇无码大片在线观看| 国内外成人免费激情视频| 亚洲男人的天堂一区二区| 天堂中文在线资| 亚洲国产成人精品女人久久久| 欧美日韩视频免费看| 国产激情久久久久| 久久一二三区| 国产91色在线观看| 在线免费观看成人短视频| √天堂8资源中文在线| 欧美另类高清videos| 一本精品一区二区三区| 超碰在线免费观看97| 亚洲婷婷国产精品电影人久久| aaa在线免费观看| 久久久国产一区| 一区二区蜜桃| 国产av国片精品| 欧美视频免费在线观看| 涩涩视频网站在线观看| 欧美一区二区大胆人体摄影专业网站| 韩国久久久久| 熟女性饥渴一区二区三区| 欧美日韩激情视频| 69久成人做爰电影| 91老司机精品视频| 成人性生交大片免费看中文| 两个人hd高清在线观看| 国产一区二区三区在线看| 久久久人成影片免费观看| 免费在线观看视频a| 91福利精品第一导航| 国产一区二区三区| 狠狠干一区二区| 综合久久一区二区三区| 亚洲精品mv| 国产伦精品一区二区| 日本一区二区免费在线观看视频| 国产激情在线观看| 国产精品视频一| 91美女视频网站| 污视频网站在线免费| 国产成人精品免费视频| 韩国毛片一区二区三区| 亚洲一区二区三区精品中文字幕| 一区二区三区黄色| 亚洲欧洲日本mm| 免费成年网站| 久久综合色88| 国产一区二区三区综合| av午夜在线| 国产精品中文久久久久久久| 久久久久成人黄色影片| 中文字幕在线高清| 麻豆久久久av免费| 欧美色xxxx| 国模精品一区| 加勒比在线一区二区三区观看| 一区二区三区欧美视频| 日本在线www| 亚洲国产日韩精品在线| 亚洲www啪成人一区二区| 97人人模人人爽人人喊中文字| 日韩不卡在线观看日韩不卡视频| 有码av在线| 欧美—级高清免费播放| 国产在线麻豆精品观看| 黄色的视频在线免费观看| 97在线视频国产| 成人a免费在线看| av中文字幕在线看| 久草精品电影| 在线免费亚洲电影| 久久精品影视| 最新亚洲伊人网| 国产精品 欧美在线| 久久久久久久电影| 香蕉久久一区| 日本精品久久久久久久久久| 亚洲精品美女网站| 蜜臀精品久久久久久蜜臀| 国产视频网站在线| 成人淫片在线看| 精品久久久久久亚洲精品| 国产探花在线精品一区二区| 91久久精品国产性色| 高清视频欧美一级| 中文字幕不卡一区| 精品综合久久88少妇激情| 亚洲色精品三区二区一区| 视频一区视频二区国产精品| 国产不卡高清在线观看视频| 97久久香蕉国产线看观看| 欧美另类videos| 国产香蕉精品视频一区二区三区| 麻豆传媒一区二区三区| 成入视频在线观看| 久久最新免费视频| 日韩一区二区欧美| 91视频国产资源| 这里视频有精品| 免费高清特黄a大片| 国产日本欧美在线观看| 欧美午夜久久久| 夜夜嗨网站十八久久 | 久久美女福利视频| 久久99国产精品自在自在app | 国产精品一区二区三区av | 成人免费毛片片v| 99精品国产九九国产精品| 超碰影院在线观看| 国产高清在线不卡| 欧美日韩精品系列| 极品少妇xxxx偷拍精品少妇| 日韩欧美专区| 日本激情视频网| 国产视频不卡| 国产视频一区在线| 欧美激情一区二区三区蜜桃视频| av一级亚洲| 无线免费在线视频| 亚洲午夜精品久久| 色中色综合影院手机版在线观看| 亚洲一区在线观看免费 | 北条麻妃在线一区| 欧美日韩精品久久久免费观看| 精品国产乱码久久久久久蜜臀| 99精品黄色片免费大全| 超碰一区二区三区| 久cao在线| 国产激情美女久久久久久吹潮| 亚洲免费资源在线播放| 久久综合视频网| 成人激情av网| 蜜臀av一区二区| 久久大综合网| 99tv成人影院| 香蕉精品久久| 国产一区二区三区免费观看在线 | 国产一二三四区在线观看| 亚洲性猛交xxxxwww| 亚洲天堂免费看| 亚洲欧美日韩国产综合精品二区| 日韩高清在线| 在线观看视频网站你懂得| 正在播放精油久久| 清纯唯美亚洲综合| 日韩成人av网| 亚洲va天堂va国产va久| 国产成人免费av在线| 一区二区三区在线| 四虎国产精品永久在线国在线| 国产视频二区在线观看| 韩国日本美国免费毛片| 欧美影视一区二区| 国产精品美女久久久久久免费| 日韩国产精品视频|