本發(fā)明涉及網(wǎng)絡應用,尤其涉及一種基于flink的分布式增量數(shù)據(jù)同步方法及裝置。
背景技術:
1、在大數(shù)據(jù)集成和處理領域,數(shù)據(jù)同步是確保數(shù)據(jù)一致性和時效性的關鍵環(huán)節(jié),傳統(tǒng)的數(shù)據(jù)集成框架通常采用基于時間戳(timestamp)或唯一標識符(id)的增量同步機制,這種機制的基礎是數(shù)據(jù)源中存在明確的增量字段,通過比較這些字段的值來識別并同步新增或變更的數(shù)據(jù)記錄。
2、然而,在實際應用中,并非所有的數(shù)據(jù)源都具備這樣的增量字段,當數(shù)據(jù)源缺乏明確的時間戳或唯一標識符時,傳統(tǒng)的增量同步方法便無法有效工作,在這種情況下,為了保持數(shù)據(jù)的一致性,數(shù)據(jù)集成框架往往不得不采取全量同步的方式,即每次同步時都重新傳輸整個數(shù)據(jù)集,這種做法不僅效率低下,而且浪費了大量的網(wǎng)絡資源和計算資源。
3、此外,即使數(shù)據(jù)源具備增量字段,傳統(tǒng)的同步方法也面臨著另一個挑戰(zhàn),無法準確識別數(shù)據(jù)的變更類型,特別是當數(shù)據(jù)被更新或刪除時,傳統(tǒng)的同步方法往往無法區(qū)分這兩種變更,導致在同步過程中可能出現(xiàn)數(shù)據(jù)不一致的情況,對于刪除操作,傳統(tǒng)的同步方法更是無能為力,因為缺乏有效的機制來識別和同步被刪除的數(shù)據(jù)記錄。
4、為了解決這些問題,業(yè)界一直在探索更加高效和準確的數(shù)據(jù)同步方法,其中,一種基于哈希碼(hashcode)和循環(huán)冗余校驗(crc)的數(shù)據(jù)同步方法逐漸嶄露頭角,這種方法通過計算數(shù)據(jù)記錄的哈希碼或crc值來生成數(shù)據(jù)的唯一標識,然后通過比較這些唯一標識來快速識別并同步變更的數(shù)據(jù)記錄。
5、然而,盡管這種方法在理論上具有可行性,但在實際應用中仍面臨著諸多挑戰(zhàn),例如,如何確保哈希碼或crc值的準確性和穩(wěn)定性,如何高效地計算和存儲這些唯一標識,以及如何在實際的數(shù)據(jù)集成場景中實現(xiàn)這種基于哈希碼和crc值的數(shù)據(jù)同步方法等,這些都是亟待解決的問題。
技術實現(xiàn)思路
1、本發(fā)明的目的在于提供一種基于flink的分布式增量數(shù)據(jù)同步方法及裝置,以解決現(xiàn)有技術數(shù)據(jù)集成框架實現(xiàn)增量數(shù)據(jù)同步時無法識別行的變更記錄,且在遇到刪除數(shù)據(jù)的情況下只能進行全量數(shù)據(jù)同步的問題。
2、為實現(xiàn)上述目的,本技術采用以下技術方案:
3、本技術的一種基于flink的分布式增量數(shù)據(jù)同步方法,包括以下步驟:
4、在作業(yè)管理器中根據(jù)預設的分塊鍵和分塊大小確定每個分塊的邊界,并根據(jù)所述邊界構(gòu)建分片式數(shù)據(jù)庫查詢語句;
5、根據(jù)目標校驗算法確定分塊的校驗和計算規(guī)則,并生成所述校驗和計算規(guī)則對應的參數(shù)化數(shù)據(jù)庫查詢語句;
6、初始化表管理器以在所述表管理器中存儲每次增量數(shù)據(jù)同步相關的數(shù)據(jù)庫信息,并獲取其元數(shù)據(jù)庫中用于存儲分塊索引及其對應校驗和的校驗數(shù)據(jù)存儲表;
7、基于所述分片式數(shù)據(jù)庫查詢語句和所述參數(shù)化數(shù)據(jù)庫查詢語句計算每個分塊的初始校驗和,并將得到的初始校驗和及其分塊索引全部寫入所述校驗數(shù)據(jù)存儲表中;
8、在任務管理器中接收所述作業(yè)管理器下發(fā)的包含目標分塊索引的分塊信息,并根據(jù)所述目標分塊索引從所述校驗數(shù)據(jù)存儲表中提取目標分塊對應的初始校驗和;
9、初始化增量數(shù)據(jù)同步任務并執(zhí)行,計算所述目標分塊的最新校驗和以與其初始校驗和進行比對,根據(jù)比對結(jié)果執(zhí)行增量數(shù)據(jù)同步操作。
10、作為優(yōu)選,所述根據(jù)預設的分塊鍵和分塊大小確定每個分塊的邊界,包括:
11、根據(jù)預設的分塊鍵構(gòu)建用于查詢所述分塊鍵最小值和最大值的第一數(shù)據(jù)庫查詢語句,執(zhí)行所述第一數(shù)據(jù)庫查詢語句得到所述分塊鍵的最小值和最大值;
12、獲取增量數(shù)據(jù)同步的源數(shù)據(jù)庫中源表的估算行值,并根據(jù)預設的分塊大小、所述分塊鍵的最小值和最大值以及所述估算行值確定每個分塊的邊界。
13、作為優(yōu)選,所述目標校驗算法包括目標第一校驗算法和目標第二校驗算法;
14、在根據(jù)目標校驗算法確定分塊的校驗和計算規(guī)則之前還包括:
15、判斷預先配置的任務參數(shù)中是否存在第一算法參數(shù),若存在,則將所述第一算法參數(shù)的值作為目標第一校驗算法,若不存在,則查詢內(nèi)置的多個第一校驗算法中源數(shù)據(jù)庫支持的算法,并將查詢到的所述源數(shù)據(jù)庫支持的第一個算法作為目標第一校驗算法;
16、判斷任務參數(shù)中是否存在第二算法參數(shù),若存在,則將所述第二算法參數(shù)的值作為目標第二校驗算法,若不存在,則獲取內(nèi)置的多個第二校驗算法,并根據(jù)數(shù)據(jù)同步過濾條件從多個內(nèi)置第二校驗算法中篩選出目標第二校驗算法。
17、作為優(yōu)選,所述目標第二校驗算法包括按位異或算法和自定義第二校驗算法;
18、所述根據(jù)目標校驗算法確定分塊的校驗和計算規(guī)則,包括:
19、判斷根據(jù)目標第一校驗算法生成的校驗碼是否為整數(shù);
20、于所述校驗碼為整數(shù)且所述目標第二校驗算法為按位異或算法時,對所述校驗碼進行異或運算并將運算結(jié)果轉(zhuǎn)換為小寫的十六進制字符串;
21、于所述校驗碼不為整數(shù)且所述目標第二校驗算法為按位異或算法時,根據(jù)所述校驗碼的寬度分割其表達式并將分割結(jié)果拼接后轉(zhuǎn)換為小寫的十六進制字符串;
22、于所述校驗碼為整數(shù)且所述目標第二校驗算法為所述自定義第二校驗算法時,將所述校驗碼與其累積值拼接后輸入所述目標第一校驗算法中進行計算得到輸出,并將所述輸出轉(zhuǎn)換為十六進制字符串,調(diào)用目標第二校驗算法對轉(zhuǎn)換得到的十六進制字符串進行計算;
23、于所述校驗碼不為整數(shù)且所述目標第二校驗算法為自定義第二校驗算法時,將所述校驗碼與其累積值拼接后輸入所述目標第一校驗算法中進行計算得到輸出,并調(diào)用所述目標第二校驗算法對所述輸出進行計算。
24、作為優(yōu)選,所述獲取其元數(shù)據(jù)庫中用于存儲分塊索引及其對應校驗和的校驗數(shù)據(jù)存儲表,包括:
25、判斷所述表管理器的元數(shù)據(jù)庫中是否存在用于存儲分塊索引及其對應校驗和的校驗數(shù)據(jù)存儲表,若不存在,則根據(jù)分塊信息構(gòu)建校驗數(shù)據(jù)存儲表,所述校驗數(shù)據(jù)存儲表用于存儲分塊索引及其對應的所有校驗和。
26、作為優(yōu)選,所述基于所述分片式數(shù)據(jù)庫查詢語句和所述參數(shù)化數(shù)據(jù)庫查詢語句計算每個分塊的初始校驗和,包括:
27、根據(jù)目標校驗列和所述分片式數(shù)據(jù)庫查詢語句對所述參數(shù)化數(shù)據(jù)庫查詢語句進行實例化得到多個用于計算分塊校驗和的第二數(shù)據(jù)庫查詢語句,執(zhí)行所有的第二數(shù)據(jù)庫查詢語句得到每個分塊的初始校驗和。
28、作為優(yōu)選,所述根據(jù)比對結(jié)果執(zhí)行增量數(shù)據(jù)同步操作,包括:
29、于所述最新校驗和等于所述初始校驗和時,無需執(zhí)行增量數(shù)據(jù)同步操作;
30、于所述最新校驗和不等于所述初始校驗和時,獲取所述目標分塊在源表和目標表中分別對應的數(shù)據(jù)集,并計算兩個數(shù)據(jù)集的交集和差集,根據(jù)計算結(jié)果執(zhí)行數(shù)據(jù)更新、插入或刪除操作。
31、一種基于flink的分布式增量數(shù)據(jù)同步裝置,包括:
32、構(gòu)建模塊,用于在作業(yè)管理器中根據(jù)預設的分塊鍵和分塊大小確定每個分塊的邊界,并根據(jù)所述邊界構(gòu)建分片式數(shù)據(jù)庫查詢語句;
33、生成模塊,用于根據(jù)目標校驗算法確定分塊的校驗和計算規(guī)則,并生成所述校驗和計算規(guī)則對應的參數(shù)化數(shù)據(jù)庫查詢語句;
34、存儲模塊,用于初始化表管理器以在所述表管理器中存儲每次增量數(shù)據(jù)同步相關的數(shù)據(jù)庫信息,并獲取其元數(shù)據(jù)庫中用于存儲分塊索引及其對應校驗和的校驗數(shù)據(jù)存儲表;
35、計算模塊,用于基于所述分片式數(shù)據(jù)庫查詢語句和所述參數(shù)化數(shù)據(jù)庫查詢語句計算每個分塊的初始校驗和,并將得到的初始校驗和及其分塊索引全部寫入所述校驗數(shù)據(jù)存儲表中;
36、提取模塊,用于在任務管理器中接收所述作業(yè)管理器下發(fā)的包含目標分塊索引的分塊信息,并根據(jù)所述目標分塊索引從所述校驗數(shù)據(jù)存儲表中提取目標分塊對應的初始校驗和;
37、同步模塊,用于初始化增量數(shù)據(jù)同步任務并執(zhí)行,計算所述目標分塊的最新校驗和以與其初始校驗和進行比對,根據(jù)比對結(jié)果執(zhí)行增量數(shù)據(jù)同步操作。
38、一種電子設備,包括存儲器和處理器,所述存儲器用于存儲一條或多條計算機指令,其中,所述一條或多條計算機指令被所述處理器執(zhí)行以實現(xiàn)如上述中任一項所述的一種基于flink的分布式增量數(shù)據(jù)同步方法。
39、一種存儲有計算機程序的計算機可讀存儲介質(zhì),所述計算機程序使計算機執(zhí)行時實現(xiàn)如上述中任一項所述的一種基于flink的分布式增量數(shù)據(jù)同步方法。
40、本技術具有如下有益效果:
41、本技術在不需要數(shù)據(jù)庫開啟增量字段的情況下就可以基于指定的列獲取到表中的數(shù)據(jù)變更,包括識別到已經(jīng)刪除的行,而不需要對整表進行同步,特別是對大數(shù)據(jù)量的存儲表來說,極大地提高了數(shù)據(jù)集成場景下數(shù)據(jù)變更的及時性。