第三章 數(shù)據(jù)同步之問題與解決辦法


分表分庫的處理

1)傳統(tǒng)數(shù)據(jù)庫的分表分庫處理:

2)在大數(shù)據(jù)系統(tǒng)中的做法是構(gòu)建分布式數(shù)據(jù)庫訪問引擎(中間層),將分布在不同數(shù)據(jù)庫中的表集成為一張表,業(yè)務(wù)系統(tǒng)像單表一樣使用

3)分布式數(shù)據(jù)庫訪問引擎位于數(shù)據(jù)持久層與JDBC驅(qū)動之間,實現(xiàn)了以下功能:


高效同步與批量同步

1)數(shù)據(jù)同步流程:創(chuàng)建表--同步工具中配置數(shù)據(jù)庫連接/表/字段--測試

2)存在問題:

① 數(shù)據(jù)量增大時,每天會有大量重復的配置工作,降低開發(fā)人員熱情

② 不同數(shù)據(jù)庫有個性配置

3)解決方式:

① 實現(xiàn)配置流程一鍵化操作,并封裝web接口進一步達到批量化的效果

② 開發(fā)數(shù)據(jù)庫管理平臺,統(tǒng)一管理數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu);實現(xiàn)對不同數(shù)據(jù)源配置透明化,通過庫名表名唯一的定位數(shù)據(jù)


增量與全量數(shù)據(jù)同步:

1)數(shù)據(jù)量超出一定閾值,每個周期同步全量數(shù)據(jù)會消耗大量資源。在這種情況下可以只同步增量數(shù)據(jù)并與前一天的全量數(shù)據(jù)進行合并。

2)當前流行的大數(shù)據(jù)平臺基本不支持update操作,所以我們用全外連接+全量覆蓋的方式更新數(shù)據(jù)。即將當天增量數(shù)據(jù)與前一天全量數(shù)據(jù)做全外連接,然后重新加載最新的全量數(shù)據(jù)。


數(shù)據(jù)漂移的處理

1)數(shù)據(jù)漂移發(fā)生在數(shù)據(jù)倉庫的最底層ODS層,當日業(yè)務(wù)數(shù)據(jù)中包含前一天或者后一天凌晨的數(shù)據(jù),或者當天的變更數(shù)據(jù)丟失

2)原因:數(shù)據(jù)在ODS層按時間分區(qū)存儲,時間戳的準確性導致了數(shù)據(jù)漂移。

時間戳分四類:

① 數(shù)據(jù)庫表中的數(shù)據(jù)更新時間(modified_time)

② 數(shù)據(jù)庫日志中的數(shù)據(jù)更新時間 (log_time)

③ 數(shù)據(jù)庫表中業(yè)務(wù)發(fā)生時間 (proc_time)

理論上這3個時間時相同的,事件中往往存在偏差,理由如下:

① 前臺業(yè)務(wù)手工修正數(shù)據(jù)未更新modified_time

② 由于網(wǎng)絡(luò)壓力,modified_time和log_time晚于proc_time

3)數(shù)據(jù)漂移場景

① 依據(jù)modified_time劃分,會發(fā)生因為未更新modified_time而導致數(shù)據(jù)遺漏,或者由于網(wǎng)絡(luò)壓力凌晨的數(shù)據(jù)漂移到后一天

②?依據(jù)log_time劃分,由于網(wǎng)絡(luò)壓力,業(yè)務(wù)發(fā)生時未能實時更新數(shù)據(jù),導致凌晨的數(shù)據(jù)漂移到后一天

③ 依據(jù)proc_time劃分,僅僅包含一個業(yè)務(wù)記錄,遺漏過程的變化記錄

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容