本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)采集方法、裝置及系統(tǒng)。
背景技術(shù):
在實際應(yīng)用中,常常需要實現(xiàn)兩個數(shù)據(jù)庫的同步,即目標數(shù)據(jù)庫所屬的設(shè)備常常需要將源數(shù)據(jù)庫發(fā)生的變化實時采集到目標數(shù)據(jù)庫中?,F(xiàn)有技術(shù)中主要有兩種數(shù)據(jù)采集的方式:(1)通過掃描并分析源數(shù)據(jù)庫歸檔日志的方式,識別出源數(shù)據(jù)庫的數(shù)據(jù)變化,然后采集變化數(shù)據(jù)至目標數(shù)據(jù)庫中;(2)通過啟動源數(shù)據(jù)庫自帶的觸發(fā)器的方式,實時監(jiān)控源數(shù)據(jù)庫的數(shù)據(jù)變化,然后采集變化數(shù)據(jù)至目標數(shù)據(jù)庫中。
雖然上述兩種數(shù)據(jù)采集方式都能夠?qū)崿F(xiàn)兩個數(shù)據(jù)庫的同步,但是卻存在一定的缺陷。對于第一種方式,由于源數(shù)據(jù)庫的歸檔操作需要數(shù)據(jù)庫管理員權(quán)限,但是大多數(shù)金融機構(gòu)出于安全考慮,都不愿意給予他人這么高的權(quán)限,所以當(dāng)沒有數(shù)據(jù)庫管理員權(quán)限時,就無法采集到源數(shù)據(jù)庫中的變化數(shù)據(jù);對于第二種方式,由于觸發(fā)器設(shè)置在源數(shù)據(jù)庫上,所以啟動觸發(fā)器來實時監(jiān)控數(shù)據(jù)變化后,會對源數(shù)據(jù)庫的性能產(chǎn)生較大影響,例如實現(xiàn)增加、刪除或者修改等操作的速度往往會降低一半以上。因此,在采集變化數(shù)據(jù)的過程中,如何在避免操作權(quán)限的基礎(chǔ)上,減少對源數(shù)據(jù)庫性能的影響是面臨的一大難題。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提供一種數(shù)據(jù)采集方法、裝置及系統(tǒng),能夠在避免操作權(quán)限的基礎(chǔ)上,減少對源數(shù)據(jù)庫性能的影響。
第一方面,本發(fā)明提供了一種數(shù)據(jù)采集方法,所述方法包括:
監(jiān)聽源數(shù)據(jù)庫的端口;
當(dāng)有數(shù)據(jù)請求訪問所述端口時,截獲并備份所述數(shù)據(jù)請求,其中,截獲的數(shù)據(jù)請求中包括對所述源數(shù)據(jù)庫進行更新操作的數(shù)據(jù)請求;
將備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便所述采集設(shè)備根據(jù)所述備份的數(shù)據(jù)請求,采集變化后的源數(shù)據(jù)庫中的變化數(shù)據(jù)并同步至目標數(shù)據(jù)庫。
可選的,在截獲并備份所述數(shù)據(jù)請求之后,所述方法還包括:
監(jiān)聽所述源數(shù)據(jù)庫是否接收到提交指令,所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令;
若接收到所述提交指令,則向所述采集設(shè)備發(fā)送提交通知,以使得所述采集設(shè)備根據(jù)所述提交通知啟動數(shù)據(jù)采集。
第二方面,本發(fā)明提供了一種數(shù)據(jù)采集方法,所述方法包括:
接收被采集設(shè)備發(fā)送的數(shù)據(jù)請求,所述被采集設(shè)備為源數(shù)據(jù)庫所屬設(shè)備,所述數(shù)據(jù)請求為所述被采集設(shè)備通過監(jiān)聽所述源數(shù)據(jù)庫的端口獲得的數(shù)據(jù);
通過分析所述數(shù)據(jù)請求中的特定數(shù)據(jù)位確定所述數(shù)據(jù)請求的數(shù)據(jù)操作類型;
若所述數(shù)據(jù)操作類型為用于更新所述源數(shù)據(jù)庫的操作類型,則從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)請求中的數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù),并根據(jù)所述數(shù)據(jù)操作類型將所述變化數(shù)據(jù)同步至目標數(shù)據(jù)庫中。
可選的,若所述數(shù)據(jù)操作類型為查詢操作,則所述方法還包括:
丟棄所述數(shù)據(jù)請求。
可選的,從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)請求中的數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù)包括:
從所述數(shù)據(jù)請求中解析出數(shù)據(jù)對象;
當(dāng)接收到所述被采集設(shè)備發(fā)送的、用于指示已接收到提交指令的提交通知后,從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù),所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令。
可選的,從所述數(shù)據(jù)請求中解析出數(shù)據(jù)對象包括:
從所述數(shù)據(jù)請求中解析出結(jié)構(gòu)化查詢語言SQL語句;
從所述SQL語句中提取所述數(shù)據(jù)對象。
可選的,所述用于更新所述源數(shù)據(jù)庫的操作類型包括:增加操作、刪除操作以及修改操作。
第三方面,本發(fā)明提供了一種數(shù)據(jù)采集裝置,所述裝置包括:
監(jiān)聽單元,用于監(jiān)聽源數(shù)據(jù)庫的端口;
處理單元,用于當(dāng)所述監(jiān)聽單元監(jiān)聽到有數(shù)據(jù)請求訪問所述端口時,截獲并備份所述數(shù)據(jù)請求,其中,截獲的數(shù)據(jù)請求中包括對所述源數(shù)據(jù)庫進行更新操作的數(shù)據(jù)請求;
發(fā)送單元,用于將所述處理單元備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便所述采集設(shè)備根據(jù)所述備份的數(shù)據(jù)請求,采集變化后的源數(shù)據(jù)庫中的變化數(shù)據(jù)并同步至目標數(shù)據(jù)庫。
可選的,所述監(jiān)聽單元還用于在所述處理單元截獲并備份所述數(shù)據(jù)請求之后,監(jiān)聽所述源數(shù)據(jù)庫是否接收到提交指令,所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令;
所述發(fā)送單元還用于當(dāng)所述監(jiān)聽單元的監(jiān)聽結(jié)果為接收到所述提交指令時,向所述采集設(shè)備發(fā)送提交通知,以使得所述采集設(shè)備根據(jù)所述提交通知啟動數(shù)據(jù)采集。
第四方面,本發(fā)明提供了一種數(shù)據(jù)采集裝置,所述裝置包括:
接收單元,用于接收被采集設(shè)備發(fā)送的數(shù)據(jù)請求,所述被采集設(shè)備為源數(shù)據(jù)庫所屬設(shè)備,所述數(shù)據(jù)請求為所述被采集設(shè)備通過監(jiān)聽所述源數(shù)據(jù)庫的端口獲得的數(shù)據(jù);
確定單元,用于通過分析所述接收單元接收到的所述數(shù)據(jù)請求中的特定數(shù)據(jù)位確定所述數(shù)據(jù)請求的數(shù)據(jù)操作類型;
采集單元,用于當(dāng)所述確定單元確定所述數(shù)據(jù)操作類型為用于更新所述源數(shù)據(jù)庫的操作類型時,從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)請求中的數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù);
同步單元,用于根據(jù)所述數(shù)據(jù)操作類型將所述采集單元采集的所述變化數(shù)據(jù)同步至目標數(shù)據(jù)庫中。
可選的,所述裝置還包括:
丟棄單元,用于當(dāng)所述確定單元確定所述數(shù)據(jù)操作類型為查詢操作時,丟棄所述數(shù)據(jù)請求。
可選的,所述采集單元包括:
解析模塊,用于從所述數(shù)據(jù)請求中解析出數(shù)據(jù)對象;
采集模塊,用于當(dāng)接收到所述被采集設(shè)備發(fā)送的、用于指示已接收到提交指令的提交通知后,從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù),所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令。
可選的,所述解析模塊包括:
解析子模塊,用于從所述數(shù)據(jù)請求中解析出結(jié)構(gòu)化查詢語言SQL語句;
提取子模塊,用于從所述解析子模塊解析出的所述SQL語句中提取所述數(shù)據(jù)對象。
可選的,所述用于更新所述源數(shù)據(jù)庫的操作類型包括:增加操作、刪除操作以及修改操作。
第五方面,本發(fā)明提供了一種數(shù)據(jù)采集系統(tǒng),所述系統(tǒng)包括被采集設(shè)備以及采集設(shè)備;其中,所述被采集設(shè)備包括如第三方面所述的裝置;所述采集設(shè)備包括如第四方面所述的裝置。
借由上述技術(shù)方案,本發(fā)明提供的數(shù)據(jù)采集方法、裝置及系統(tǒng),能夠在源數(shù)據(jù)庫所屬設(shè)備上安裝獨立于源數(shù)據(jù)庫的監(jiān)聽程序,然后由該監(jiān)聽程序僅監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求,若有數(shù)據(jù)請求,則進行備份,并將備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便采集設(shè)備根據(jù)該數(shù)據(jù)請求獲取用戶對源數(shù)據(jù)庫進行更新的操作信息,并根據(jù)更新的操作信息采集基于該操作信息更新后的源數(shù)據(jù)庫中的變化數(shù)據(jù)。由此可知,與現(xiàn)有技術(shù)相比,本發(fā)明在監(jiān)聽源數(shù)據(jù)庫的端口時并沒有數(shù)據(jù)庫管理員權(quán)限限制,并且由于監(jiān)聽程序獨立于源數(shù)據(jù)庫,且僅需監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求訪問,所以監(jiān)聽程序?qū)υ磾?shù)據(jù)庫的性能影響也相對較低。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了本發(fā)明實施例提供的一種數(shù)據(jù)采集方法的流程圖;
圖2示出了本發(fā)明實施例提供的另一種數(shù)據(jù)采集方法的流程圖;
圖3示出了本發(fā)明實施例提供的一種數(shù)據(jù)采集過程中兩設(shè)備的數(shù)據(jù)交互示意圖;
圖4示出了本發(fā)明實施例提供的一種數(shù)據(jù)采集裝置的組成框圖;
圖5示出了本發(fā)明實施例提供的另一種數(shù)據(jù)采集裝置的組成框圖;
圖6示出了本發(fā)明實施例提供的另一種數(shù)據(jù)采集裝置的組成框圖;
圖7示出了本發(fā)明實施例提供的一種數(shù)據(jù)采集系統(tǒng)示意圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
本發(fā)明實施例提供了一種數(shù)據(jù)采集方法,該方法主要應(yīng)用于被采集設(shè)備側(cè),如圖1所示,該方法主要包括:
101、監(jiān)聽源數(shù)據(jù)庫的端口。
在實際應(yīng)用中,源數(shù)據(jù)庫所屬設(shè)備(即被采集設(shè)備)上可以安裝一個獨立于源數(shù)據(jù)庫的監(jiān)聽程序,然后由該監(jiān)聽程序?qū)崟r監(jiān)聽源數(shù)據(jù)庫的端口,以便獲知用戶對源數(shù)據(jù)庫進行的所有操作。
需要說明的是,當(dāng)源數(shù)據(jù)庫包括多個端口時,被采集設(shè)備中的監(jiān)聽程序可以監(jiān)聽所有端口,也可以監(jiān)聽指定的端口,但是所要監(jiān)聽的端口需要傳輸用于對源數(shù)據(jù)庫進行更新的操作信息的數(shù)據(jù)請求。
102、當(dāng)有數(shù)據(jù)請求訪問所述端口時,截獲并備份所述數(shù)據(jù)請求。
其中,截獲的數(shù)據(jù)請求中包括對所述源數(shù)據(jù)庫進行更新操作的數(shù)據(jù)請求,還包括對所述源數(shù)據(jù)庫進行查詢操作的數(shù)據(jù)請求。其中,更新操作主要包括:增加操作、刪除操作以及修改操作。
在實際應(yīng)用中,對源數(shù)據(jù)庫進行增加操作、刪除操作、修改操作以及查詢操作的數(shù)據(jù)請求往往為TCP(Transmission Control Protocol,傳輸控制協(xié)議)類型的數(shù)據(jù),而對源數(shù)據(jù)庫進行其他操作的數(shù)據(jù)請求為其他協(xié)議的數(shù)據(jù),因此在截獲端口處訪問的數(shù)據(jù)請求時,可以僅截獲TCP類型的數(shù)據(jù)請求。
進一步的,由于TCP類型的數(shù)據(jù)請求中不僅包括增加、刪除或修改操作,還包括查詢操作,而查詢操作不會對源數(shù)據(jù)庫中的數(shù)據(jù)產(chǎn)生變化,所以為了進一步減小對源數(shù)據(jù)庫性能的影響,可以僅備份增加、刪除或者修改操作對應(yīng)的數(shù)據(jù)請求,而不備份查詢操作對應(yīng)的數(shù)據(jù)請求。具體的,被采集設(shè)備截獲TCP類型數(shù)據(jù)后,可以先通過分析數(shù)據(jù)請求中的特定數(shù)據(jù)位確定數(shù)據(jù)請求的數(shù)據(jù)操作類型;若數(shù)據(jù)操作類型是用于更新源數(shù)據(jù)庫的操作類型(包括增加、刪除或者修改操作),則備份對應(yīng)的數(shù)據(jù)請求;若數(shù)據(jù)操作類型不是用于更新源數(shù)據(jù)庫的操作類型(如查詢操作),則不對對應(yīng)的數(shù)據(jù)請求進行備份。
需要說明的是,當(dāng)被采集設(shè)備中的監(jiān)聽程序截獲并備份數(shù)據(jù)請求后,需要將截獲的數(shù)據(jù)請求進行釋放,以便繼續(xù)基于該數(shù)據(jù)請求對源數(shù)據(jù)庫進行對應(yīng)操作。
103、將備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便所述采集設(shè)備根據(jù)所述備份的數(shù)據(jù)請求,采集變化后的源數(shù)據(jù)庫中的變化數(shù)據(jù)并同步至目標數(shù)據(jù)庫。
在對截獲的數(shù)據(jù)請求進行備份后,可以將備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以使得采集設(shè)備在接收到數(shù)據(jù)請求后,先對該數(shù)據(jù)請求進行分析,然后從中獲取對源數(shù)據(jù)庫進行更新的操作信息,最后基于獲取的操作信息從根據(jù)數(shù)據(jù)請求變化后的源數(shù)據(jù)庫中采集對應(yīng)的變化數(shù)據(jù),并將采集的變化數(shù)據(jù)按照對應(yīng)的數(shù)據(jù)操作類型同步至目標數(shù)據(jù)庫中。
本發(fā)明實施例提供的數(shù)據(jù)采集方法,能夠在源數(shù)據(jù)庫所屬設(shè)備上安裝獨立于源數(shù)據(jù)庫的監(jiān)聽程序,然后由該監(jiān)聽程序僅監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求,若有數(shù)據(jù)請求,則進行備份,并將備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便采集設(shè)備根據(jù)該數(shù)據(jù)請求獲取用戶對源數(shù)據(jù)庫進行更新的操作信息,并根據(jù)更新的操作信息采集基于該操作信息更新后的源數(shù)據(jù)庫中的變化數(shù)據(jù)。由此可知,與現(xiàn)有技術(shù)相比,本發(fā)明在監(jiān)聽源數(shù)據(jù)庫的端口時并沒有數(shù)據(jù)庫管理員權(quán)限限制,并且由于監(jiān)聽程序獨立于源數(shù)據(jù)庫,且僅需監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求訪問,所以監(jiān)聽程序?qū)υ磾?shù)據(jù)庫的性能影響也相對較低。
進一步的,當(dāng)用戶通過輸入SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)語句實現(xiàn)對源數(shù)據(jù)庫的增加、刪除、修改或者查詢操作的過程中,只有當(dāng)用戶確認提交后,才能確定該操作有效,即當(dāng)源數(shù)據(jù)庫接收到提交指令后,才會基于該操作對源數(shù)據(jù)庫進行處理。因此,為了使得采集設(shè)備獲知何時數(shù)據(jù)請求真正有效,從而確定何時才能夠從源數(shù)據(jù)庫中采集到變化數(shù)據(jù),本發(fā)明實施例還提供了以下方案:
在截獲并備份所述數(shù)據(jù)請求之后,監(jiān)聽所述源數(shù)據(jù)庫是否接收到提交指令;若接收到所述提交指令,則向所述采集設(shè)備發(fā)送提交通知,以使得所述采集設(shè)備根據(jù)所述提交通知啟動數(shù)據(jù)采集。
其中,所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令。
進一步的,依據(jù)圖1所示的方法,本發(fā)明的另一個實施例還提供了一種數(shù)據(jù)采集方法,該方法主要應(yīng)用于采集設(shè)備側(cè),如圖2所示,該方法主要包括:
201、接收被采集設(shè)備發(fā)送的數(shù)據(jù)請求。
其中,所述被采集設(shè)備為源數(shù)據(jù)庫所屬設(shè)備,所述數(shù)據(jù)請求為所述被采集設(shè)備通過監(jiān)聽源數(shù)據(jù)庫的端口獲得的數(shù)據(jù)。當(dāng)被采集設(shè)備備份所有的數(shù)據(jù)請求時,接收到的數(shù)據(jù)請求可能包括對源數(shù)據(jù)庫進行更新的操作信息,也可能包括對源數(shù)據(jù)庫進行查詢的操作信息;當(dāng)被采集設(shè)備僅備份用于更新源數(shù)據(jù)庫的數(shù)據(jù)請求時,接收到的數(shù)據(jù)請求包括對源數(shù)據(jù)庫進行更新的操作信息,具體可能為增加操作的操作信息,也可能為刪除操作的操作信息,也可能為修改操作的操作新信息。
202、通過分析所述數(shù)據(jù)請求中的特定數(shù)據(jù)位確定所述數(shù)據(jù)請求的數(shù)據(jù)操作類型。
無論被采集設(shè)備在備份數(shù)據(jù)請求之前,是否通過對數(shù)據(jù)請求的數(shù)據(jù)操作類型進行識別而選擇性地備份數(shù)據(jù)請求,采集設(shè)備在接收到被采集設(shè)備發(fā)送的數(shù)據(jù)請求后,需要先確定該數(shù)據(jù)請求具體的數(shù)據(jù)操作類型,再根據(jù)該具體的數(shù)據(jù)操作類型以及數(shù)據(jù)請求中的數(shù)據(jù)對象對源數(shù)據(jù)庫中的變化數(shù)據(jù)進行采集。其中,數(shù)據(jù)對象為預(yù)設(shè)字段和對應(yīng)的字段內(nèi)容,主要包括列名和列值。
在實際應(yīng)用中,數(shù)據(jù)請求由存儲不同含義內(nèi)容的不同數(shù)據(jù)位構(gòu)成,例如有存儲源IP(Internet Protocol,網(wǎng)間協(xié)議)地址、目的IP地址的數(shù)據(jù)位,有存儲數(shù)據(jù)類型的數(shù)據(jù)位,有存儲SQL語句的數(shù)據(jù)位。因此,在接收到數(shù)據(jù)請后,可以先提取用于存儲數(shù)據(jù)操作類型的特定數(shù)據(jù)位,然后對該特定數(shù)據(jù)位中內(nèi)容進行分析,確定對應(yīng)的數(shù)據(jù)操作類型。
203、若所述數(shù)據(jù)操作類型為用于更新所述源數(shù)據(jù)庫的操作類型,則從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)請求中的數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù),并根據(jù)所述數(shù)據(jù)操作類型將所述變化數(shù)據(jù)同步至目標數(shù)據(jù)庫中。
其中,所述用于更新所述源數(shù)據(jù)庫的操作類型包括:增加操作、刪除操作以及修改操作。當(dāng)確定該數(shù)據(jù)操作類型為增加操作、刪除操作或者修改操作時,采集設(shè)備可以繼續(xù)獲取并分析數(shù)據(jù)請求中包含的具體的數(shù)據(jù)對象,然后根據(jù)具體的數(shù)據(jù)對象從源數(shù)據(jù)庫中采集對應(yīng)的變化數(shù)據(jù),最后將變化數(shù)據(jù)按照對應(yīng)的數(shù)據(jù)操作類型同步至目標數(shù)據(jù)庫中。
需要補充的是,當(dāng)數(shù)據(jù)操作類型為刪除操作時,由于源數(shù)據(jù)庫中數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù)已經(jīng)被刪除,所以無需從源數(shù)據(jù)庫中查詢該變化數(shù)據(jù),可以直接將目標數(shù)據(jù)庫中數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù)刪除,從而實現(xiàn)源數(shù)據(jù)庫與目標數(shù)據(jù)庫的同步。
需要說明的是,目標數(shù)據(jù)庫可以為安裝在采集設(shè)備中的數(shù)據(jù)庫,也可以為安裝在其他設(shè)備上的數(shù)據(jù)庫,其所屬設(shè)備在此不做限定。
此外,由于查詢操作不會更改源數(shù)據(jù)庫中的數(shù)據(jù),所以若接收到的數(shù)據(jù)請求的數(shù)據(jù)操作類型為查詢操作,則采集設(shè)備可以直接將所述數(shù)據(jù)請求進行丟棄,以便占用存儲空間。
本發(fā)明實施例提供的數(shù)據(jù)采集方法,能夠由采集設(shè)備接收被采集設(shè)備發(fā)送的、通過獨立于源數(shù)據(jù)庫的監(jiān)聽程序監(jiān)聽源數(shù)據(jù)庫的端口獲得的數(shù)據(jù)請求,然后對該數(shù)據(jù)請求的數(shù)據(jù)操作類型進行識別,當(dāng)其數(shù)據(jù)操作類型是用于更新源數(shù)據(jù)庫的操作類型時,通過分析該數(shù)據(jù)請求中的具體操作信息來采集源數(shù)據(jù)庫中的變化數(shù)據(jù)。由此可知,與現(xiàn)有技術(shù)相比,本發(fā)明在監(jiān)聽源數(shù)據(jù)庫的端口時并沒有數(shù)據(jù)庫管理員權(quán)限限制,并且由于監(jiān)聽程序獨立于源數(shù)據(jù)庫,且僅需監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求訪問,所以監(jiān)聽程序?qū)υ磾?shù)據(jù)庫的性能影響也相對較低。
進一步的,上述步驟203的具體實現(xiàn)方式可以為:
(1)從所述數(shù)據(jù)請求中解析出數(shù)據(jù)對象;
具體的,采集設(shè)備可以先從所述數(shù)據(jù)請求中解析出SQL語句,然后從所述SQL語句中提取所述數(shù)據(jù)對象,并將提取的數(shù)據(jù)對象以及對應(yīng)的數(shù)據(jù)操作類型存儲在預(yù)設(shè)的存儲空間中。
示例性的,若數(shù)據(jù)請求的數(shù)據(jù)操作類型為增加操作,解析出的SQL語句為“insert into Students(姓名,性別,出生年月)values(‘李雷’,‘男’,‘1990/6/15’)”,則從該SQL語句中解析出的對象為“姓名:李雷;性別:男;出生年月:1990/6/15”。
(2)當(dāng)接收到所述被采集設(shè)備發(fā)送的、用于指示已接收到提交指令的提交通知后,從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù),并根據(jù)所述數(shù)據(jù)操作類型將所述變化數(shù)據(jù)同步至目標數(shù)據(jù)庫中。
其中,所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令。在被采集設(shè)備側(cè)的實施例中提及只有當(dāng)源數(shù)據(jù)庫接收提交指令后,對應(yīng)的數(shù)據(jù)請求才為有效的數(shù)據(jù)請求,因此當(dāng)采集設(shè)備從所述數(shù)據(jù)請求中解析出數(shù)據(jù)對象后,需要先將該數(shù)據(jù)對象以及對應(yīng)的數(shù)據(jù)操作類型進行緩存;當(dāng)接收到被采集設(shè)備發(fā)送的提交通知后,才進行數(shù)據(jù)采集操作。
通過上述實施例可知,以被采集設(shè)備備份所有TCP類型數(shù)據(jù)為例,在實現(xiàn)兩個數(shù)據(jù)庫同步的過程中,被采集設(shè)備和采集設(shè)備所進行的數(shù)據(jù)交互過程可以如圖3所示:
301、被采集設(shè)備上的監(jiān)聽程序監(jiān)聽源數(shù)據(jù)庫的端口;
302、當(dāng)有TCP類型的數(shù)據(jù)請求訪問該端口時,截獲并備份該數(shù)據(jù)請求;
303、在備份完成后,將備份的數(shù)據(jù)請求發(fā)送采集設(shè)備,以便采集設(shè)備執(zhí)行步驟307;
304、在備份完成后,釋放截獲的數(shù)據(jù)請求;
其中,步驟303和步驟304不分先后順序;可以先執(zhí)行步驟303,再執(zhí)行步驟304;也可以先執(zhí)行步驟304,再執(zhí)行步驟303;也可以同時執(zhí)行步驟303和步驟304。
305、監(jiān)聽源數(shù)據(jù)庫是否接收到提交指令;若沒有接收到提交指令,則繼續(xù)監(jiān)聽;若接收到提交指令,則執(zhí)行步驟306;
306、向采集設(shè)備發(fā)送提交通知,以便采集設(shè)備執(zhí)行步驟310;
307、采集設(shè)備接收被采集設(shè)備發(fā)送的數(shù)據(jù)請求;
308、識別數(shù)據(jù)請求的數(shù)據(jù)操作類型;若數(shù)據(jù)操作類型為增加操作、刪除操作或者修改操作,則執(zhí)行步驟309;若數(shù)據(jù)操作類型為查詢操作,則執(zhí)行步驟313;
309、從數(shù)據(jù)請求中解析出SQL語句,從SQL語句中提取數(shù)據(jù)對象,并將數(shù)據(jù)對象以及數(shù)據(jù)操作類型進行緩存;
310、采集設(shè)備接收被采集設(shè)備發(fā)送的提交通知;
311、采集設(shè)備獲取緩存的數(shù)據(jù)對象,并從源數(shù)據(jù)庫中采集該數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù)。
312、根據(jù)數(shù)據(jù)操作類型將采集的變化數(shù)據(jù)同步至目標數(shù)據(jù)庫中。
313、丟棄該數(shù)據(jù)請求。
進一步的,依據(jù)圖1所示的方法,本發(fā)明的另一個實施例提供了一種數(shù)據(jù)采集裝置,該裝置主要應(yīng)用于被采集設(shè)備側(cè),如圖4所示,該裝置主要包括:
監(jiān)聽單元41,用于監(jiān)聽源數(shù)據(jù)庫的端口;
處理單元42,用于當(dāng)所述監(jiān)聽單元41監(jiān)聽到有數(shù)據(jù)請求訪問所述端口時,截獲并備份所述數(shù)據(jù)請求,其中,截獲的數(shù)據(jù)請求中包括對所述源數(shù)據(jù)庫進行更新操作的數(shù)據(jù)請求;
需要說明的是,在獲得備份的數(shù)據(jù)請求后,被采集設(shè)備還需要釋放截獲的數(shù)據(jù)請求,以便基于該數(shù)據(jù)請求對源數(shù)據(jù)庫進行對應(yīng)操作。
發(fā)送單元43,用于將所述處理單元42備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便所述采集設(shè)備根據(jù)所述備份的數(shù)據(jù)請求,采集變化后的源數(shù)據(jù)庫中的變化數(shù)據(jù)并同步至目標數(shù)據(jù)庫。
進一步的,所述監(jiān)聽單元41還用于在所述處理單元42截獲并備份所述數(shù)據(jù)請求之后,監(jiān)聽所述源數(shù)據(jù)庫是否接收到提交指令,所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令;
所述發(fā)送單元43還用于當(dāng)所述監(jiān)聽單元41的監(jiān)聽結(jié)果為接收到所述提交指令時,向所述采集設(shè)備發(fā)送提交通知,以使得所述采集設(shè)備根據(jù)所述提交通知啟動數(shù)據(jù)采集。
本發(fā)明實施例提供的數(shù)據(jù)采集裝置,能夠在源數(shù)據(jù)庫所屬設(shè)備上安裝獨立于源數(shù)據(jù)庫的監(jiān)聽程序,然后由該監(jiān)聽程序僅監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求,若有數(shù)據(jù)請求,則進行備份,并將備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便采集設(shè)備根據(jù)該數(shù)據(jù)請求獲取用戶對源數(shù)據(jù)庫進行更新的操作信息,并根據(jù)更新的操作信息采集基于該操作信息更新后的源數(shù)據(jù)庫中的變化數(shù)據(jù)。由此可知,與現(xiàn)有技術(shù)相比,本發(fā)明在監(jiān)聽源數(shù)據(jù)庫的端口時并沒有數(shù)據(jù)庫管理員權(quán)限限制,并且由于監(jiān)聽程序獨立于源數(shù)據(jù)庫,且僅需監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求訪問,所以監(jiān)聽程序?qū)υ磾?shù)據(jù)庫的性能影響也相對較低。
進一步的,依據(jù)圖2所示的方法,本發(fā)明的另一個實施例提供了一種數(shù)據(jù)采集裝置,該裝置主要應(yīng)用于采集設(shè)備側(cè),如圖5所示,該裝置主要包括:
接收單元51,用于接收被采集設(shè)備發(fā)送的數(shù)據(jù)請求,所述被采集設(shè)備為源數(shù)據(jù)庫所屬設(shè)備,所述數(shù)據(jù)請求為所述被采集設(shè)備通過監(jiān)聽所述源數(shù)據(jù)庫的端口獲得的數(shù)據(jù);
確定單元52,用于通過分析所述接收單元51接收到的所述數(shù)據(jù)請求中的特定數(shù)據(jù)位確定所述數(shù)據(jù)請求的數(shù)據(jù)操作類型;
采集單元53,用于當(dāng)所述確定單元52確定所述數(shù)據(jù)操作類型為用于更新所述源數(shù)據(jù)庫的操作類型時,從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)請求中的數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù);
同步單元54,用于根據(jù)所述數(shù)據(jù)操作類型將所述采集單元53采集的所述變化數(shù)據(jù)同步至目標數(shù)據(jù)庫中。
進一步的,如圖6所示,所述裝置還包括:
丟棄單元55,用于當(dāng)所述確定單元52確定所述數(shù)據(jù)操作類型為查詢操作時,丟棄所述數(shù)據(jù)請求。
進一步的,如圖6所示,所述采集單元53包括:
解析模塊531,用于從所述數(shù)據(jù)請求中解析出數(shù)據(jù)對象;
采集模塊532,用于當(dāng)接收到所述被采集設(shè)備發(fā)送的、用于指示已接收到提交指令的提交通知后,從所述源數(shù)據(jù)庫中采集所述數(shù)據(jù)對象對應(yīng)的變化數(shù)據(jù),所述提交指令為用于向所述源數(shù)據(jù)庫提交所述數(shù)據(jù)請求的操作指令。
進一步的,如圖6所示,所述解析模塊531包括:
解析子模塊5311,用于從所述數(shù)據(jù)請求中解析出結(jié)構(gòu)化查詢語言SQL語句;
提取子模塊5312,用于從所述解析子模塊5311解析出的所述SQL語句中提取所述數(shù)據(jù)對象。
進一步的,所述用于更新所述源數(shù)據(jù)庫的操作類型包括:增加操作、刪除操作以及修改操作。
本發(fā)明實施例提供的數(shù)據(jù)采集裝置,能夠由采集設(shè)備接收被采集設(shè)備發(fā)送的、通過獨立于源數(shù)據(jù)庫的監(jiān)聽程序監(jiān)聽源數(shù)據(jù)庫的端口獲得的數(shù)據(jù)請求,然后對該數(shù)據(jù)請求的數(shù)據(jù)操作類型進行識別,當(dāng)其數(shù)據(jù)操作類型是用于更新源數(shù)據(jù)庫的操作類型時,通過分析該數(shù)據(jù)請求中的具體操作信息來采集源數(shù)據(jù)庫中的變化數(shù)據(jù)。由此可知,與現(xiàn)有技術(shù)相比,本發(fā)明在監(jiān)聽源數(shù)據(jù)庫的端口時并沒有數(shù)據(jù)庫管理員權(quán)限限制,并且由于監(jiān)聽程序獨立于源數(shù)據(jù)庫,且僅需監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求訪問,所以監(jiān)聽程序?qū)υ磾?shù)據(jù)庫的性能影響也相對較低。
進一步的,依據(jù)上述裝置實施例,本發(fā)明的另一個實施例提供了一種數(shù)據(jù)采集系統(tǒng),如圖7所示,所述系統(tǒng)包括被采集設(shè)備61以及采集設(shè)備62;其中,所述被采集設(shè)備61包括如圖4所示的裝置;所述采集設(shè)備62包括如圖5或圖6所示的裝置。
本發(fā)明實施例提供的數(shù)據(jù)采集系統(tǒng),能夠在源數(shù)據(jù)庫所屬設(shè)備上安裝獨立于源數(shù)據(jù)庫的監(jiān)聽程序,然后由該監(jiān)聽程序僅監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求,若有數(shù)據(jù)請求,則進行備份,并將備份的數(shù)據(jù)請求發(fā)送給采集設(shè)備,以便采集設(shè)備根據(jù)該數(shù)據(jù)請求獲取用戶對源數(shù)據(jù)庫進行更新的操作信息,并根據(jù)更新的操作信息采集基于該操作信息更新后的源數(shù)據(jù)庫中的變化數(shù)據(jù)。由此可知,與現(xiàn)有技術(shù)相比,本發(fā)明在監(jiān)聽源數(shù)據(jù)庫的端口時并沒有數(shù)據(jù)庫管理員權(quán)限限制,并且由于監(jiān)聽程序獨立于源數(shù)據(jù)庫,且僅需監(jiān)聽源數(shù)據(jù)庫的端口是否有數(shù)據(jù)請求訪問,所以監(jiān)聽程序?qū)υ磾?shù)據(jù)庫的性能影響也相對較低。
在上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。
可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實施例中的“第一”、“第二”等是用于區(qū)分各實施例,而并不代表各實施例的優(yōu)劣。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的數(shù)據(jù)采集方法、裝置及系統(tǒng)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。