本發(fā)明涉及計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域,具體涉及一種日志同步方法及裝置。
背景技術(shù):
基于分布式文件存儲的數(shù)據(jù)庫,一般由特定語言編寫,旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。由于單一數(shù)據(jù)庫的處理能力有限,因此在分布式文件存儲數(shù)據(jù)庫的解決方案中,基于源數(shù)據(jù)庫,按照業(yè)務(wù)或功能建立多個目標(biāo)數(shù)據(jù)庫,從而降低對源數(shù)據(jù)庫的訪問壓力。當(dāng)源數(shù)據(jù)庫中的某個數(shù)據(jù)表發(fā)生變化時,需要保證關(guān)注該數(shù)據(jù)表的目標(biāo)數(shù)據(jù)庫中的該數(shù)據(jù)表與源數(shù)據(jù)庫中的該數(shù)據(jù)表發(fā)生一致的變化,與此同時,還需要同步源數(shù)據(jù)庫中的日志信息與目的數(shù)據(jù)庫中的日志信息。
現(xiàn)有的日志信息的同步方法是,當(dāng)需要同步日志信息時,首先建立目的數(shù)據(jù)庫與源數(shù)據(jù)庫的連接。但是,根據(jù)現(xiàn)有的分布式文件存儲數(shù)據(jù)庫處理機制,一旦有新的目的數(shù)據(jù)庫與源數(shù)據(jù)庫建立連接,則會觸發(fā)主數(shù)據(jù)庫的選舉機制,在選舉過程中,源數(shù)據(jù)庫的對外訪問能力將受到影響。如果經(jīng)過選取導(dǎo)致?lián)Q主,還需要進(jìn)行一系列的后續(xù)操作,如通知業(yè)務(wù)訪問端、修改元信息等,將會進(jìn)一步影響數(shù)據(jù)庫的性能。
技術(shù)實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的日志同步方法及裝置。
根據(jù)本發(fā)明的一個方面,提供了一種日志同步方法,其包括:
與源數(shù)據(jù)庫建立連接;
從源數(shù)據(jù)庫中讀取日志信息;
將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程;
由所述線程將所述日志信息寫入目的數(shù)據(jù)庫。
根據(jù)本發(fā)明的另一方面,提供了一種日志同步裝置,其包括:
日志讀取模塊,適于與源數(shù)據(jù)庫建立連接,從源數(shù)據(jù)庫中讀取日志信息,將日志信息分配給線程處理模塊;
線程處理模塊,適于與目的數(shù)據(jù)庫建立連接,將所述日志信息寫入目的數(shù)據(jù)庫。
根據(jù)本發(fā)明提供的日志同步方法及裝置,首先與源數(shù)據(jù)庫建立連接,從源數(shù)據(jù)庫中讀取日志信息;將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程,由線程將日志信息寫入目的數(shù)據(jù)庫。由于利用了中間件,源數(shù)據(jù)庫和目的數(shù)據(jù)庫之間并未直接建立連接,不會改變分布式系統(tǒng)中數(shù)據(jù)庫之間的連接關(guān)系,因而不會觸發(fā)因新建連接而導(dǎo)致的主數(shù)據(jù)庫選舉機制,也就不會引起因主數(shù)據(jù)塊選舉機制導(dǎo)致的數(shù)據(jù)庫性能受影響的問題。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個實施例的日志同步方法的流程示意圖;
圖2示出了根據(jù)本發(fā)明另一個實施例的日志同步方法的流程示意圖;
圖3示出了根據(jù)本發(fā)明一個實施例的日志同步裝置的功能框圖。
具體實施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
本發(fā)明實施例提供了一種日志同步方法,該方法為一種第三方解決方案,即通過開發(fā)的第三方工具實現(xiàn)將源數(shù)據(jù)庫的日志信息同步給目的數(shù)據(jù)庫。舉例來說,通過中間件實現(xiàn)本發(fā)明實施例的方法,中間件與源數(shù)據(jù)庫之間建立用于讀取日志的連接,中間件與目的數(shù)據(jù)庫之間建立用于寫入日志的連接。中間件執(zhí)行如下實施例提供的方法,能夠提升源數(shù)據(jù)庫和目的數(shù)據(jù)庫之間的日志同步效率。由于利用了中間件,源數(shù)據(jù)庫和目的數(shù)據(jù)庫之間并未直接建立連接,不會改變分布式系統(tǒng)中數(shù)據(jù)庫之間的連接關(guān)系,因而不會觸發(fā)因新建連接而導(dǎo)致的主數(shù)據(jù)庫選舉機制,也就不會引起因主數(shù)據(jù)塊選舉機制導(dǎo)致的數(shù)據(jù)庫性能受影響的問題。
圖1示出了根據(jù)本發(fā)明一個實施例的日志同步方法的流程示意圖。該方法由中間件執(zhí)行,如圖1所示,該方法包括如下步驟:
步驟S101,與源數(shù)據(jù)庫建立連接。
首先,中間件預(yù)先與源數(shù)據(jù)庫建立用于讀取日志的連接。具體地,源數(shù)據(jù)庫開設(shè)一日志讀取端口,中間件訪問該日志讀取端口讀取日志信息。中間件相當(dāng)于第三方的工具,它的接入不會影響分布式系統(tǒng)中數(shù)據(jù)庫之間的連接關(guān)系,因而不會觸發(fā)分布式文件存儲數(shù)據(jù)庫系統(tǒng)的主數(shù)據(jù)庫選舉機制。
步驟S102,從源數(shù)據(jù)庫中讀取日志信息。
利用所建立的連接,中間件從源數(shù)據(jù)庫中讀取日志信息,具體地中間件訪問源數(shù)據(jù)庫為其開設(shè)的日志讀取端口讀取日志信息。
步驟S103,將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程。
中間件內(nèi)部預(yù)先創(chuàng)建了用于處理日志信息的線程,該線程與目的數(shù)據(jù)庫之前建立有用于寫入日志信息的連接。具體地,目的數(shù)據(jù)庫開設(shè)一日志寫入端口,中間件的線程訪問該日志寫入端口向目的數(shù)據(jù)庫寫入日志信息。
步驟S104,由線程將日志信息寫入目的數(shù)據(jù)庫。
利用所建立的連接,中間件的線程將日志信息寫入目的數(shù)據(jù)庫,具體地線程訪問目的數(shù)據(jù)庫為其開設(shè)的日志寫入端口向目的數(shù)據(jù)庫寫入日志信息。
利用本實施例提供的日志同步方法,首先與源數(shù)據(jù)庫建立連接,從源數(shù)據(jù)庫中讀取日志信息;將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程,由線程將日志信息寫入目的數(shù)據(jù)庫。由于利用了中間件,源數(shù)據(jù)庫和目的數(shù)據(jù)庫之間并未直接建立連接,不會改變分布式系統(tǒng)中數(shù)據(jù)庫之間的連接關(guān)系,因而不會觸發(fā)因新建連接而導(dǎo)致的主數(shù)據(jù)庫選舉機制,也就不會引起因主數(shù)據(jù)塊選舉機制導(dǎo)致的數(shù)據(jù)庫性能受影響的問題。
圖2示出了根據(jù)本發(fā)明另一個實施例的日志同步方法的流程示意圖。該方法由中間件執(zhí)行,如圖2所示,該方法包括如下步驟:
步驟S201,與源數(shù)據(jù)庫建立一條用于讀取日志信息的連接,以及創(chuàng)建線程,且該線程與目的數(shù)據(jù)庫建立一條用于寫入日志信息的連接。
中間件預(yù)先與源數(shù)據(jù)庫建立用于讀取日志信息的連接。一般情況下,中間件與源數(shù)據(jù)庫之間建立一條用于讀取日志信息的連接,即可滿足中間件的處理需求。所謂建立連接具體為源數(shù)據(jù)庫開設(shè)一個日志讀取端口,中間件通過訪問該日志讀取端口的方式讀取日志信息。
中間件還預(yù)先創(chuàng)建有線程,該線程與目的數(shù)據(jù)庫建立一條用于寫入日志信息的連接。具體地,目的數(shù)據(jù)庫為線程開設(shè)一個日志寫入端口,線程訪問該日志寫入端口向目的數(shù)據(jù)庫寫入日志信息。
步驟S202,從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的日志信息和/或指定時間段內(nèi)的日志信息。
本方法實施例適用于MongoDB分布式數(shù)據(jù)庫系統(tǒng)。MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫,由C++語言編寫,旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。MongoDB是面向集合的數(shù)據(jù)庫系統(tǒng)。所謂面向集合,是指數(shù)據(jù)被分組存儲在數(shù)據(jù)集中,被稱為一個集合。每個集合在數(shù)據(jù)庫中都有一個唯一的標(biāo)識名,并且可以包含無限數(shù)目的文檔。存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標(biāo)識一個文檔,為字符串類型,而值則可以是各種復(fù)雜的文件類型。這種存儲形式被稱為BSON(Binary Serialized Document Format)。
日志信息用來存儲所執(zhí)行的數(shù)據(jù)操作,在MongoDB系統(tǒng)中,日志稱為oplog。MongoDB oplog是一個capped collection(有固定大小的集合),創(chuàng)建capped collection時,createCollection可以設(shè)置最大字節(jié)數(shù)和最大文檔數(shù)等參數(shù),當(dāng)這個集合的總大小超過最大字節(jié)數(shù)或者總文檔數(shù)超過最大文檔數(shù)時,在新插入文檔時就會自動刪除一些集合內(nèi)最先插入的文檔,相當(dāng)于一片環(huán)形的存儲空間。oplog(local.oplog.rs集合)默認(rèn)情況下配置為可用磁盤空間的5%,當(dāng)oplog寫滿時,就會開始刪除最先寫入的oplog,一次正常的insert操作包含如下步驟:將文檔寫入指定的集合;將寫入操作記錄到oplog;如果oplog滿了,刪除最先寫入的oplog。由此可見,在MongoDB系統(tǒng)中,源數(shù)據(jù)庫的日志記錄的是距離當(dāng)前時間最近的一段時間內(nèi)的日志信息。
本方法中,中間件可以指定數(shù)據(jù)集合,從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的oplog。中間件也可以指定時間段,從源數(shù)據(jù)庫中讀取指定時間段內(nèi)的oplog。也即,中間件可以有選擇地從源數(shù)據(jù)庫中讀取oplog。舉例來說,假如目的數(shù)據(jù)庫只需同步源數(shù)據(jù)庫中命名為beijing的數(shù)據(jù)集合對應(yīng)的日志,則中間件從源數(shù)據(jù)庫中讀取beijing.oplog.rs。假如目的數(shù)據(jù)庫只需同步源數(shù)據(jù)庫最近一天內(nèi)的日志,則中間件從源數(shù)據(jù)庫中讀取最近一天內(nèi)所產(chǎn)生的日志信息。
本步驟為本實施例的可選步驟。在沒有指定數(shù)據(jù)集合和指定時間段的情況下,中間件可以從源數(shù)據(jù)庫中讀取當(dāng)前所有日志信息。
步驟S203,判斷數(shù)據(jù)操作是否為敏感操作,若是,則執(zhí)行步驟S204;若否,執(zhí)行步驟S206。
在某些特定情況下,源數(shù)據(jù)庫會產(chǎn)生一些敏感操作,例如刪除整個數(shù)據(jù)庫、刪除某個數(shù)據(jù)集合、修改元信息等等,這些敏感操作有可能是誤操作。中間件在讀取到存儲數(shù)據(jù)操作的日志信息后,對數(shù)據(jù)操作進(jìn)行判斷,如果判斷為敏感操作,可先行等待一段時間,暫時不同步給目的數(shù)據(jù)庫。
步驟S204,等待預(yù)設(shè)延遲時間。
該預(yù)設(shè)延遲時間可根據(jù)實際經(jīng)驗來設(shè)定,本發(fā)明對此不作限制。
步驟S205,在等待過程中,若從源數(shù)據(jù)庫讀取到撤銷執(zhí)行數(shù)據(jù)操作的日志信息,則丟棄撤銷執(zhí)行數(shù)據(jù)操作的日志信息和對應(yīng)的所述執(zhí)行數(shù)據(jù)操作的日志信息。
在等待過程中,若從源數(shù)據(jù)庫讀取到撤銷執(zhí)行數(shù)據(jù)操作的日志信息,則表明之前讀取到的敏感操作為誤操作,該誤操作被撤銷,因而,中間件丟棄撤銷執(zhí)行數(shù)據(jù)操作的日志信息和對應(yīng)的之前執(zhí)行數(shù)據(jù)操作的日志信息,無需將其同步至目的數(shù)據(jù)庫。
通過執(zhí)行以上步驟S203至步驟S205,使得中間件可對一些特定情況執(zhí)行特定處理,避免了將誤操作的日志信息同步給目的數(shù)據(jù)庫,使目的數(shù)據(jù)庫的性能受到影響。
步驟S206,將讀取的日志信息保存到本地。
本實施例中,中間件可將從源數(shù)據(jù)庫中讀取的日志信息保存到本地,相當(dāng)于對源數(shù)據(jù)庫的日志信息進(jìn)行備份。從上面的描述可知,在MongoDB系統(tǒng)中,源數(shù)據(jù)庫的日志記錄的是距離當(dāng)前時間最近的一段時間內(nèi)的日志信息。如果源數(shù)據(jù)庫出現(xiàn)問題導(dǎo)致整個數(shù)據(jù)庫數(shù)據(jù)丟失時,僅僅通過源數(shù)據(jù)庫的日志無法恢復(fù)全部數(shù)據(jù)。在這種情況下,中間件保存到本地的日志信息可用來輔助源數(shù)據(jù)庫恢復(fù)數(shù)據(jù)。當(dāng)然,此種情況下,中間件應(yīng)該保證實時讀取源數(shù)據(jù)庫的所有日志信息,而非僅讀取指定數(shù)據(jù)集合的日志信息或指定時間段內(nèi)的日志信息。
步驟S207,對日志信息進(jìn)行解析,按照設(shè)定規(guī)則對日志信息的相關(guān)字段進(jìn)行修改。
本實施例中間件還具有修改日志信息的功能,相關(guān)修改的設(shè)定規(guī)則可根據(jù)目的數(shù)據(jù)庫的需求靈活設(shè)置。舉例來說,目的數(shù)據(jù)庫需要將源數(shù)據(jù)庫的beijing.oplog.rs拷貝成shanghai.oplog.rs,日志信息內(nèi)容一致,但命名不同。對應(yīng)的,中間件可設(shè)置修改命名的設(shè)定規(guī)則,中間件對beijing.oplog.rs的日志信息進(jìn)行解析,查找到命名字段,將命名字段統(tǒng)一替換為新的命名shanghai。經(jīng)過修改后,寫入到目的數(shù)據(jù)庫的日志信息的命名均為shanghai。
中間件還可對日志信息的其它相關(guān)字段進(jìn)行修改,以符合目的數(shù)據(jù)庫的需求,本發(fā)明對此相關(guān)字段不作限制。
步驟S208,判斷源數(shù)據(jù)庫和目的數(shù)據(jù)庫的版本信息是否一致,若是,執(zhí)行步驟S210;若否,執(zhí)行步驟S209。
在某些情況下,源數(shù)據(jù)庫和目的數(shù)據(jù)庫之間的版本不同,導(dǎo)致其日志之間存在差異。以MongoDB為例,對于一些管理命令,一些版本中將其置入admin數(shù)據(jù)庫中,而另一些版本將其置入各個數(shù)據(jù)庫中。
考慮到版本之間的兼容問題,中間件可預(yù)先獲知不同版本的差異信息,通過相關(guān)處理消除版本之間的差異問題。中間件判斷源數(shù)據(jù)庫和目的數(shù)據(jù)庫的版本信息是否一致,若不一致,則執(zhí)行步驟S209。
步驟S209,對日志信息進(jìn)行解析,按照目的數(shù)據(jù)庫的版本信息對日志信息進(jìn)行處理,得到符合目的數(shù)據(jù)庫的版本要求的日志信息。
中間件所讀取的日志信息是符合源數(shù)據(jù)庫的版本要求的日志信息,中間件對其進(jìn)行解析,利用預(yù)先獲知的不同版本的差異信息,按照目的數(shù)據(jù)庫的版本信息對日志信息進(jìn)行處理,得到符合目的數(shù)據(jù)庫的版本要求的日志信息。
步驟S210,將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程。
中間件內(nèi)部預(yù)先創(chuàng)建了用于處理日志信息的線程,該線程與目的數(shù)據(jù)庫之前建立有用于寫入日志信息的連接。具體地,目的數(shù)據(jù)庫開設(shè)一日志寫入端口,中間件的線程訪問該日志寫入端口向目的數(shù)據(jù)庫寫入日志信息。
步驟S211,由線程將日志信息寫入目的數(shù)據(jù)庫。
利用所建立的連接,中間件的線程將日志信息寫入目的數(shù)據(jù)庫,具體地線程訪問目的數(shù)據(jù)庫為其開設(shè)的日志寫入端口向目的數(shù)據(jù)庫寫入日志信息。
利用本實施例提供的日志同步方法,首先與源數(shù)據(jù)庫建立連接,從源數(shù)據(jù)庫中讀取日志信息;將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程,由線程將日志信息寫入目的數(shù)據(jù)庫。由于利用了中間件,源數(shù)據(jù)庫和目的數(shù)據(jù)庫之間并未直接建立連接,不會改變分布式系統(tǒng)中數(shù)據(jù)庫之間的連接關(guān)系,因而不會觸發(fā)因新建連接而導(dǎo)致的主數(shù)據(jù)庫選舉機制,也就不會引起因主數(shù)據(jù)塊選舉機制導(dǎo)致的數(shù)據(jù)庫性能受影響的問題。進(jìn)一步的,中間件可從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的日志信息和/或指定時間段內(nèi)的日志信息同步給目的數(shù)據(jù)庫,增加了空間/時間的靈活性;中間件可對一些特定情況執(zhí)行特定處理,避免了將誤操作的日志信息同步給目的數(shù)據(jù)庫,使目的數(shù)據(jù)庫的性能受到影響;另外,中間件還可根據(jù)目的數(shù)據(jù)庫的需求靈活設(shè)置一些設(shè)定規(guī)則,提供修改日志信息的功能,而且,中間件還可改善不同數(shù)據(jù)庫版本之間的兼容問題,進(jìn)一步提升了日志同步的可擴展性。
圖3示出了根據(jù)本發(fā)明一個實施例的日志同步裝置的功能框圖。如圖3所示,該裝置包括:日志讀取模塊301和線程處理模塊302。
日志讀取模塊301,適于與源數(shù)據(jù)庫建立連接,從源數(shù)據(jù)庫中讀取日志信息,將日志信息分配給線程處理模塊302。
日志讀取模塊301預(yù)先與源數(shù)據(jù)庫建立用于讀取日志信息的連接。一般情況下,日志讀取模塊301與源數(shù)據(jù)庫之間建立一條用于讀取日志信息的連接,即可滿足中間件的處理需求。所謂建立連接具體為源數(shù)據(jù)庫開設(shè)一個日志讀取端口,日志讀取模塊301通過訪問該日志讀取端口的方式讀取日志信息。
線程處理模塊302,適于與目的數(shù)據(jù)庫建立連接,將所述日志信息寫入目的數(shù)據(jù)庫。
日志讀取模塊301進(jìn)一步適于:從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的日志信息和/或指定時間段內(nèi)的日志信息。以MongoDB為例,日志讀取模塊301可以指定數(shù)據(jù)集合,從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的oplog。日志讀取模塊301也可以指定時間段,從源數(shù)據(jù)庫中讀取指定時間段內(nèi)的oplog。也即,日志讀取模塊301可以有選擇地從源數(shù)據(jù)庫中讀取oplog。舉例來說,假如目的數(shù)據(jù)庫只需同步源數(shù)據(jù)庫中命名為beijing的數(shù)據(jù)集合對應(yīng)的日志,則日志讀取模塊301從源數(shù)據(jù)庫中讀取beijing.oplog.rs。假如目的數(shù)據(jù)庫只需同步源數(shù)據(jù)庫最近一天內(nèi)的日志,則日志讀取模塊301從源數(shù)據(jù)庫中讀取最近一天內(nèi)所產(chǎn)生的日志信息。
進(jìn)一步的,該裝置還可包括:解析模塊303和處理模塊304。
解析模塊303,適于對日志信息進(jìn)行解析。處理模塊304,適于按照設(shè)定規(guī)則對日志信息的相關(guān)字段進(jìn)行修改。
本裝置還具有修改日志信息的功能,相關(guān)修改的設(shè)定規(guī)則可根據(jù)目的數(shù)據(jù)庫的需求靈活設(shè)置。舉例來說,目的數(shù)據(jù)庫需要將源數(shù)據(jù)庫的beijing.oplog.rs拷貝成shanghai.oplog.rs,日志信息內(nèi)容一致,但命名不同。對應(yīng)的,該裝置可設(shè)置修改命名的設(shè)定規(guī)則,解析模塊303對beijing.oplog.rs的日志信息進(jìn)行解析,查找到命名字段,處理模塊304將命名字段統(tǒng)一替換為新的命名shanghai。經(jīng)過修改后,寫入到目的數(shù)據(jù)庫的日志信息的命名均為shanghai。
進(jìn)一步的,該裝置還可包括:第一判斷模塊305,適于判斷源數(shù)據(jù)庫和目的數(shù)據(jù)庫的版本信息是否一致。
解析模塊303還適于若第一判斷模塊305判斷出源數(shù)據(jù)庫和目的數(shù)據(jù)庫的版本信息不一致,則對日志信息進(jìn)行解析。
處理模塊304還適于按照目的數(shù)據(jù)庫的版本信息對日志信息進(jìn)行處理,得到符合目的數(shù)據(jù)庫的版本要求的日志信息。
進(jìn)一步的,該裝置還可包括:保存模塊306,適于將讀取的日志信息保存到本地。
該裝置可將從源數(shù)據(jù)庫中讀取的日志信息保存到本地,相當(dāng)于對源數(shù)據(jù)庫的日志信息進(jìn)行備份。從上面的描述可知,在MongoDB系統(tǒng)中,源數(shù)據(jù)庫的日志記錄的是距離當(dāng)前時間最近的一段時間內(nèi)的日志信息。如果源數(shù)據(jù)庫出現(xiàn)問題導(dǎo)致整個數(shù)據(jù)庫數(shù)據(jù)丟失時,僅僅通過源數(shù)據(jù)庫的日志無法恢復(fù)全部數(shù)據(jù)。在這種情況下,裝置保存到本地的日志信息可用來輔助源數(shù)據(jù)庫恢復(fù)數(shù)據(jù)。當(dāng)然,此種情況下,該裝置應(yīng)該保證實時讀取源數(shù)據(jù)庫的所有日志信息,而非僅讀取指定數(shù)據(jù)集合的日志信息或指定時間段內(nèi)的日志信息。
日志讀取模塊301進(jìn)一步適于:從源數(shù)據(jù)庫中讀取執(zhí)行數(shù)據(jù)操作的日志信息。
進(jìn)一步的,該裝置還可包括:等待模塊307和丟棄模塊308。
等待模塊307,適于等待預(yù)設(shè)延遲時間。
丟棄模塊308,適于在等待過程中,若日志讀取模塊301從源數(shù)據(jù)庫讀取到撤銷執(zhí)行數(shù)據(jù)操作的日志信息,則丟棄執(zhí)行數(shù)據(jù)操作的日志信息和撤銷執(zhí)行數(shù)據(jù)操作的日志信息。
進(jìn)一步的,該裝置還可包括:第二判斷模塊309,適于判斷數(shù)據(jù)操作是否為敏感操作,其中敏感操作包含刪除整個數(shù)據(jù)庫、刪除某個數(shù)據(jù)集合、修改元信息等等;等待模塊307具體適于:若第二判斷模塊309判斷出數(shù)據(jù)操作為敏感操作,則等待預(yù)設(shè)延遲時間。
利用本實施例提供的日志同步裝置,首先與源數(shù)據(jù)庫建立連接,從源數(shù)據(jù)庫中讀取日志信息;將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程,由線程將日志信息寫入目的數(shù)據(jù)庫。由于利用了日志同步裝置(相當(dāng)于中間件),源數(shù)據(jù)庫和目的數(shù)據(jù)庫之間并未直接建立連接,不會改變分布式系統(tǒng)中數(shù)據(jù)庫之間的連接關(guān)系,因而不會觸發(fā)因新建連接而導(dǎo)致的主數(shù)據(jù)庫選舉機制,也就不會引起因主數(shù)據(jù)塊選舉機制導(dǎo)致的數(shù)據(jù)庫性能受影響的問題。進(jìn)一步的,本裝置可從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的日志信息和/或指定時間段內(nèi)的日志信息同步給目的數(shù)據(jù)庫,增加了空間/時間的靈活性;本裝置可對一些特定情況執(zhí)行特定處理,避免了將誤操作的日志信息同步給目的數(shù)據(jù)庫,使目的數(shù)據(jù)庫的性能受到影響;另外,本裝置還可根據(jù)目的數(shù)據(jù)庫的需求靈活設(shè)置一些設(shè)定規(guī)則,提供修改日志信息的功能,而且,本裝置還可改善不同數(shù)據(jù)庫版本之間的兼容問題,進(jìn)一步提升了日志同步的可擴展性。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(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ā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細(xì)節(jié)的情況下實踐。在一些實例中,并未詳細(xì)示出公知的方法、結(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è)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(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ā)明實施例的日志同步裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(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)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
A1、一種日志同步方法,其包括:
與源數(shù)據(jù)庫建立連接;
從源數(shù)據(jù)庫中讀取日志信息;
將日志信息分配給與目的數(shù)據(jù)庫建立連接的線程;
由所述線程將所述日志信息寫入目的數(shù)據(jù)庫。
A2、根據(jù)A1所述的方法,其中,所述從源數(shù)據(jù)庫中讀取日志信息進(jìn)一步包括:
從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的日志信息和/或指定時間段內(nèi)的日志信息。
A3、根據(jù)A1或A2所述的方法,其中,在所述從源數(shù)據(jù)庫中讀取日志信息之后,所述方法還包括:對所述日志信息進(jìn)行解析,按照設(shè)定規(guī)則對日志信息的相關(guān)字段進(jìn)行修改。
A4、根據(jù)A1所述的方法,其中,在所述從源數(shù)據(jù)庫中讀取日志信息之后,所述方法還包括:
判斷源數(shù)據(jù)庫和目的數(shù)據(jù)庫的版本信息是否一致;
若不一致,則對日志信息進(jìn)行解析,按照目的數(shù)據(jù)庫的版本信息對日志信息進(jìn)行處理,得到符合目的數(shù)據(jù)庫的版本要求的日志信息。
A5、根據(jù)A1所述的方法,其中,在所述從源數(shù)據(jù)庫中讀取日志信息之后,所述方法還包括:
將讀取的日志信息保存到本地。
A6、根據(jù)A1所述的方法,其中,所述從源數(shù)據(jù)庫中讀取日志信息具體為:從源數(shù)據(jù)庫中讀取執(zhí)行數(shù)據(jù)操作的日志信息;
在所述從源數(shù)據(jù)庫中讀取執(zhí)行數(shù)據(jù)操作的日志信息之后,所述方法還包括:
等待預(yù)設(shè)延遲時間;
在等待過程中,若從源數(shù)據(jù)庫讀取到撤銷執(zhí)行數(shù)據(jù)操作的日志信息,則丟棄撤銷執(zhí)行數(shù)據(jù)操作的日志信息和對應(yīng)的所述執(zhí)行數(shù)據(jù)操作的日志信息。
A7、根據(jù)A6所述的方法,其中,在所述等待預(yù)設(shè)延遲時間之前,所述方法還包括:判斷數(shù)據(jù)操作是否為敏感操作;
所述等待預(yù)設(shè)延遲時間具體為:若判斷出所述數(shù)據(jù)操作為敏感操作,則等待預(yù)設(shè)延遲時間。
本發(fā)明還公開了:B8、一種日志同步裝置,其包括:
日志讀取模塊,適于與源數(shù)據(jù)庫建立連接,從源數(shù)據(jù)庫中讀取日志信息,將日志信息分配給線程處理模塊;
線程處理模塊,適于與目的數(shù)據(jù)庫建立連接,將所述日志信息寫入目的數(shù)據(jù)庫。
B9、根據(jù)B8所述的裝置,其中,所述日志讀取模塊進(jìn)一步適于:從源數(shù)據(jù)庫中讀取指定數(shù)據(jù)集合對應(yīng)的日志信息和/或指定時間段內(nèi)的日志信息。
B10、根據(jù)B8或B9所述的裝置,其中,所述裝置還包括:
解析模塊,適于對所述日志信息進(jìn)行解析;
處理模塊,適于按照設(shè)定規(guī)則對日志信息的相關(guān)字段進(jìn)行修改。
B11、根據(jù)B8所述的裝置,其中,所述裝置還包括:
第一判斷模塊,適于判斷源數(shù)據(jù)庫和目的數(shù)據(jù)庫的版本信息是否一致;
解析模塊,適于若所述第一判斷模塊判斷出源數(shù)據(jù)庫和目的數(shù)據(jù)庫的版本信息不一致,則對日志信息進(jìn)行解析;
處理模塊,適于按照目的數(shù)據(jù)庫的版本信息對日志信息進(jìn)行處理,得到符合目的數(shù)據(jù)庫的版本要求的日志信息。
B12、根據(jù)B8所述的裝置,其中,所述裝置還包括:保存模塊,適于將讀取的日志信息保存到本地。
B13、根據(jù)B8所述的裝置,其中,所述日志讀取模塊進(jìn)一步適于:從源數(shù)據(jù)庫中讀取執(zhí)行數(shù)據(jù)操作的日志信息;
所述裝置還包括:
等待模塊,適于等待預(yù)設(shè)延遲時間;
丟棄模塊,適于在等待過程中,若所述日志讀取模塊從源數(shù)據(jù)庫讀取到撤銷執(zhí)行數(shù)據(jù)操作的日志信息,則丟棄所述執(zhí)行數(shù)據(jù)操作的日志信息和撤銷執(zhí)行數(shù)據(jù)操作的日志信息。
B14、根據(jù)B13所述的裝置,所述裝置還包括:第二判斷模塊,適于判斷數(shù)據(jù)操作是否為敏感操作;
所述等待模塊具體適于:若所述第二判斷模塊判斷出所述數(shù)據(jù)操作為敏感操作,則等待預(yù)設(shè)延遲時間。