本發(fā)明涉及數(shù)據(jù)處理,具體涉及一種數(shù)據(jù)變更處理方法及裝置。
背景技術(shù):
1、在分布式系統(tǒng)架構(gòu)即分布式框架中,隨著業(yè)務(wù)規(guī)模和數(shù)據(jù)訪問量的增長(zhǎng),緩存技術(shù)逐漸成為提升系統(tǒng)性能的核心手段。其中維持緩存數(shù)據(jù)與數(shù)據(jù)庫(kù)持久化數(shù)據(jù)的一致性,是緩存框架的一個(gè)重要評(píng)價(jià)指標(biāo)。
2、傳統(tǒng)本地緩存框架(如ehcache、guavacache等)通過在內(nèi)存中直接訪問緩存數(shù)據(jù)實(shí)現(xiàn)了極低延遲響應(yīng),在緩存一致性的實(shí)現(xiàn)上容易達(dá)到單節(jié)點(diǎn)緩存強(qiáng)一致性。其單節(jié)點(diǎn)特性導(dǎo)致在分布式環(huán)境下存在數(shù)據(jù)孤島問題,無法實(shí)現(xiàn)跨節(jié)點(diǎn)緩存一致性。
3、主流集中式緩存系統(tǒng)(如redis、memcached等)通過集中存儲(chǔ)能部分解決緩存數(shù)據(jù)的一致性問題。但是額外的網(wǎng)絡(luò)通信開銷顯著增加了系統(tǒng)響應(yīng)時(shí)間。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)現(xiàn)有技術(shù)中的問題,本發(fā)明實(shí)施例提供一種數(shù)據(jù)變更處理方法及裝置,能夠至少部分地解決現(xiàn)有技術(shù)中存在的問題。
2、一方面,本發(fā)明提出一種數(shù)據(jù)變更處理方法,所述數(shù)據(jù)變更處理方法應(yīng)用于分布式框架;所述分布式框架包括與各業(yè)務(wù)服務(wù)分別對(duì)應(yīng)的服務(wù)節(jié)點(diǎn),每個(gè)服務(wù)節(jié)點(diǎn)和與集中緩存服務(wù)對(duì)應(yīng)的緩存節(jié)點(diǎn)相連接,每個(gè)服務(wù)節(jié)點(diǎn)和與數(shù)據(jù)庫(kù)服務(wù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn)相連接;所述數(shù)據(jù)變更處理方法包括:
3、在修改數(shù)據(jù)過程中修改數(shù)據(jù)節(jié)點(diǎn)向所述緩存節(jié)點(diǎn)發(fā)布變更記錄,更新所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)存儲(chǔ)表,并等待所述緩存節(jié)點(diǎn)發(fā)出變更開始通知消息;
4、其中,所述修改數(shù)據(jù)節(jié)點(diǎn)為執(zhí)行修改處理過程的服務(wù)節(jié)點(diǎn),所述緩存節(jié)點(diǎn)為所有服務(wù)節(jié)點(diǎn)在本地緩存的要修改的數(shù)據(jù)所屬的表的節(jié)點(diǎn);
5、所述緩存節(jié)點(diǎn)根據(jù)所述變更記錄進(jìn)行數(shù)據(jù)處理,緩存數(shù)據(jù)處理后的變更記錄,并向所述修改數(shù)據(jù)節(jié)點(diǎn)發(fā)送除所述修改數(shù)據(jù)節(jié)點(diǎn)外每個(gè)其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息;
6、所述修改數(shù)據(jù)節(jié)點(diǎn)若接收到所有其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息,則提交數(shù)據(jù)修改事務(wù)并向所述緩存節(jié)點(diǎn)發(fā)布變更完成消息;
7、所述緩存節(jié)點(diǎn)根據(jù)所述變更完成消息和所述變更記錄更新本地緩存,完成變更處理。
8、其中,所述變更記錄包括新增數(shù)據(jù)記錄、修改數(shù)據(jù)記錄和刪除數(shù)據(jù)記錄;相應(yīng)的,所述緩存節(jié)點(diǎn)根據(jù)所述變更記錄進(jìn)行數(shù)據(jù)處理,包括:
9、對(duì)所述新增數(shù)據(jù)記錄,若確定同一個(gè)主鍵收到多個(gè)新增數(shù)據(jù)記錄,則對(duì)所述多個(gè)新增數(shù)據(jù)記錄進(jìn)行平級(jí)存放;
10、對(duì)所述修改數(shù)據(jù)記錄,將所述本地緩存中滿足修改條件的緩存記錄轉(zhuǎn)換成變更記錄放到變更記錄列表中;
11、對(duì)所述刪除數(shù)據(jù)記錄,將所述本地緩存中滿足刪除條件的緩存記錄轉(zhuǎn)換成變更記錄放到變更記錄列表中。
12、其中,所述緩存節(jié)點(diǎn)根據(jù)所述變更完成消息和所述變更記錄更新本地緩存,完成變更處理,包括:
13、根據(jù)所述變更記錄計(jì)算得到所述本地緩存要更新的范圍,根據(jù)所述范圍從所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)中讀取數(shù)據(jù)并更新到所述本地緩存。
14、其中,所述數(shù)據(jù)變更處理方法還包括:
15、根據(jù)所述變更記錄加入到變更記錄列表中的時(shí)間計(jì)算出已超時(shí)的目標(biāo)變更記錄;
16、若遍歷完成所有目標(biāo)變更記錄的變更記錄檢查過程,則完成變更記錄檢查。
17、其中,所述數(shù)據(jù)變更處理方法還包括:
18、每完成一條目標(biāo)變更記錄檢查,根據(jù)完成檢查的目標(biāo)變更記錄更新本地緩存,完成變更處理。
19、其中,所述數(shù)據(jù)變更處理方法還包括:
20、在查詢數(shù)據(jù)過程中若確定查詢條件存在于所述本地緩存中的變更記錄中,則查詢數(shù)據(jù)庫(kù)行版本;
21、若確定所述數(shù)據(jù)庫(kù)行版本與所述本地緩存中的行版本不一致,則以kv方式查詢數(shù)據(jù)庫(kù),并根據(jù)查詢結(jié)果更新所述本地緩存。
22、一方面,本發(fā)明提出一種數(shù)據(jù)變更處理裝置,所述數(shù)據(jù)變更處理裝置應(yīng)用于分布式框架;所述分布式框架包括與各業(yè)務(wù)服務(wù)分別對(duì)應(yīng)的服務(wù)節(jié)點(diǎn),每個(gè)服務(wù)節(jié)點(diǎn)和與集中緩存服務(wù)對(duì)應(yīng)的緩存節(jié)點(diǎn)相連接,每個(gè)服務(wù)節(jié)點(diǎn)和與數(shù)據(jù)庫(kù)服務(wù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn)相連接;所述數(shù)據(jù)變更處理裝置包括:
23、發(fā)布單元,用于通過在修改數(shù)據(jù)過程中修改數(shù)據(jù)節(jié)點(diǎn)向所述緩存節(jié)點(diǎn)發(fā)布變更記錄,更新所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)存儲(chǔ)表,并等待所述緩存節(jié)點(diǎn)發(fā)出變更開始通知消息;
24、其中,所述修改數(shù)據(jù)節(jié)點(diǎn)為執(zhí)行修改處理過程的服務(wù)節(jié)點(diǎn),所述緩存節(jié)點(diǎn)為所有服務(wù)節(jié)點(diǎn)在本地緩存的要修改的數(shù)據(jù)所屬的表的節(jié)點(diǎn);
25、緩存單元,用于通過所述緩存節(jié)點(diǎn)根據(jù)所述變更記錄進(jìn)行數(shù)據(jù)處理,緩存數(shù)據(jù)處理后的變更記錄,并向所述修改數(shù)據(jù)節(jié)點(diǎn)發(fā)送除所述修改數(shù)據(jù)節(jié)點(diǎn)外每個(gè)其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息;
26、提交單元,用于若通過所述修改數(shù)據(jù)節(jié)點(diǎn)接收到所有其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息,則提交數(shù)據(jù)修改事務(wù)并向所述緩存節(jié)點(diǎn)發(fā)布變更完成消息;
27、更新單元,用于通過所述緩存節(jié)點(diǎn)根據(jù)所述變更完成消息和所述變更記錄更新本地緩存,完成變更處理。
28、再一方面,?本發(fā)明實(shí)施例提供一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)如下方法:
29、在修改數(shù)據(jù)過程中修改數(shù)據(jù)節(jié)點(diǎn)向所述緩存節(jié)點(diǎn)發(fā)布變更記錄,更新所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)存儲(chǔ)表,并等待所述緩存節(jié)點(diǎn)發(fā)出變更開始通知消息;
30、其中,所述修改數(shù)據(jù)節(jié)點(diǎn)為執(zhí)行修改處理過程的服務(wù)節(jié)點(diǎn),所述緩存節(jié)點(diǎn)為所有服務(wù)節(jié)點(diǎn)在本地緩存的要修改的數(shù)據(jù)所屬的表的節(jié)點(diǎn);
31、所述緩存節(jié)點(diǎn)根據(jù)所述變更記錄進(jìn)行數(shù)據(jù)處理,緩存數(shù)據(jù)處理后的變更記錄,并向所述修改數(shù)據(jù)節(jié)點(diǎn)發(fā)送除所述修改數(shù)據(jù)節(jié)點(diǎn)外每個(gè)其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息;
32、所述修改數(shù)據(jù)節(jié)點(diǎn)若接收到所有其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息,則提交數(shù)據(jù)修改事務(wù)并向所述緩存節(jié)點(diǎn)發(fā)布變更完成消息;
33、所述緩存節(jié)點(diǎn)根據(jù)所述變更完成消息和所述變更記錄更新本地緩存,完成變更處理。
34、本發(fā)明實(shí)施例提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包括:
35、所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下方法:
36、在修改數(shù)據(jù)過程中修改數(shù)據(jù)節(jié)點(diǎn)向所述緩存節(jié)點(diǎn)發(fā)布變更記錄,更新所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)存儲(chǔ)表,并等待所述緩存節(jié)點(diǎn)發(fā)出變更開始通知消息;
37、其中,所述修改數(shù)據(jù)節(jié)點(diǎn)為執(zhí)行修改處理過程的服務(wù)節(jié)點(diǎn),所述緩存節(jié)點(diǎn)為所有服務(wù)節(jié)點(diǎn)在本地緩存的要修改的數(shù)據(jù)所屬的表的節(jié)點(diǎn);
38、所述緩存節(jié)點(diǎn)根據(jù)所述變更記錄進(jìn)行數(shù)據(jù)處理,緩存數(shù)據(jù)處理后的變更記錄,并向所述修改數(shù)據(jù)節(jié)點(diǎn)發(fā)送除所述修改數(shù)據(jù)節(jié)點(diǎn)外每個(gè)其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息;
39、所述修改數(shù)據(jù)節(jié)點(diǎn)若接收到所有其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息,則提交數(shù)據(jù)修改事務(wù)并向所述緩存節(jié)點(diǎn)發(fā)布變更完成消息;
40、所述緩存節(jié)點(diǎn)根據(jù)所述變更完成消息和所述變更記錄更新本地緩存,完成變更處理。
41、本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下方法:
42、在修改數(shù)據(jù)過程中修改數(shù)據(jù)節(jié)點(diǎn)向所述緩存節(jié)點(diǎn)發(fā)布變更記錄,更新所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)存儲(chǔ)表,并等待所述緩存節(jié)點(diǎn)發(fā)出變更開始通知消息;
43、其中,所述修改數(shù)據(jù)節(jié)點(diǎn)為執(zhí)行修改處理過程的服務(wù)節(jié)點(diǎn),所述緩存節(jié)點(diǎn)為所有服務(wù)節(jié)點(diǎn)在本地緩存的要修改的數(shù)據(jù)所屬的表的節(jié)點(diǎn);
44、所述緩存節(jié)點(diǎn)根據(jù)所述變更記錄進(jìn)行數(shù)據(jù)處理,緩存數(shù)據(jù)處理后的變更記錄,并向所述修改數(shù)據(jù)節(jié)點(diǎn)發(fā)送除所述修改數(shù)據(jù)節(jié)點(diǎn)外每個(gè)其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息;
45、所述修改數(shù)據(jù)節(jié)點(diǎn)若接收到所有其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息,則提交數(shù)據(jù)修改事務(wù)并向所述緩存節(jié)點(diǎn)發(fā)布變更完成消息;
46、所述緩存節(jié)點(diǎn)根據(jù)所述變更完成消息和所述變更記錄更新本地緩存,完成變更處理。
47、本發(fā)明實(shí)施例提供的數(shù)據(jù)變更處理方法及裝置,在修改數(shù)據(jù)過程中修改數(shù)據(jù)節(jié)點(diǎn)向所述緩存節(jié)點(diǎn)發(fā)布變更記錄,更新所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)存儲(chǔ)表,并等待所述緩存節(jié)點(diǎn)發(fā)出變更開始通知消息;其中,所述修改數(shù)據(jù)節(jié)點(diǎn)為執(zhí)行修改處理過程的服務(wù)節(jié)點(diǎn),所述緩存節(jié)點(diǎn)為所有服務(wù)節(jié)點(diǎn)在本地緩存的要修改的數(shù)據(jù)所屬的表的節(jié)點(diǎn);所述緩存節(jié)點(diǎn)根據(jù)所述變更記錄進(jìn)行數(shù)據(jù)處理,緩存數(shù)據(jù)處理后的變更記錄,并向所述修改數(shù)據(jù)節(jié)點(diǎn)發(fā)送除所述修改數(shù)據(jù)節(jié)點(diǎn)外每個(gè)其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息;所述修改數(shù)據(jù)節(jié)點(diǎn)若接收到所有其他服務(wù)節(jié)點(diǎn)分別對(duì)應(yīng)的變更開始通知消息,則提交數(shù)據(jù)修改事務(wù)并向所述緩存節(jié)點(diǎn)發(fā)布變更完成消息;所述緩存節(jié)點(diǎn)根據(jù)所述變更完成消息和所述變更記錄更新本地緩存,完成變更處理,能夠保證本地緩存與數(shù)據(jù)庫(kù)中的數(shù)據(jù)一致性,并降低數(shù)據(jù)變更處理響應(yīng)時(shí)間。