本發(fā)明涉及計算機數(shù)據(jù)交換技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)交換方法、裝置及系統(tǒng)。
背景技術(shù):
目前,跨系統(tǒng)的數(shù)據(jù)交換方案是首先通過對源數(shù)據(jù)庫直接查詢得到全量數(shù)據(jù)或增量數(shù)據(jù),再將查詢得到的全量數(shù)據(jù)或增量數(shù)據(jù)傳輸至目標系統(tǒng);目標系統(tǒng)將獲取的數(shù)據(jù)與自身擁有的數(shù)據(jù)作比對,提取出變更的數(shù)據(jù),然后將變更的數(shù)據(jù)和自身擁有的數(shù)據(jù)合并。
該種數(shù)據(jù)交換方案存在如下缺陷:第一、對源數(shù)據(jù)庫系統(tǒng)直接查詢得到全量數(shù)據(jù)或增量數(shù)據(jù),對源數(shù)據(jù)庫和目標系統(tǒng)的壓力大,甚至直接影響源數(shù)據(jù)庫或目標系統(tǒng)正常運行,且數(shù)據(jù)交換的開發(fā)量隨著系統(tǒng)規(guī)模線性增大,對于大型項目的開發(fā)周期和風險驟增;第二、與源數(shù)據(jù)庫的耦合性低,需要花費大量精力對源數(shù)據(jù)庫設計進行調(diào)研;第三、僅限于針對現(xiàn)有項目需求做臨時開發(fā),整體架構(gòu)缺乏足夠的靈活性和擴展性,當后續(xù)其他項目有相關(guān)需求時,仍需重新實現(xiàn);第四、對于數(shù)據(jù)交換的相關(guān)變更,不能自動處理,需由開發(fā)人員或維護人員手動處理,大大增加人力成本。
綜上分析,現(xiàn)有技術(shù)中缺乏在一種可耦合多種類型的源數(shù)據(jù)庫,同時對源數(shù)據(jù)庫和目標系統(tǒng)的資源占用少且可自動交換數(shù)據(jù)的數(shù)據(jù)交換技術(shù)方案。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種數(shù)據(jù)交換方法、裝置及系統(tǒng),以解決現(xiàn)有技術(shù)中不存在可耦合多種類型的源數(shù)據(jù)庫、且對源數(shù)據(jù)庫和目標系統(tǒng)的資源占用少且可自動交換數(shù)據(jù)的數(shù)據(jù)交換技術(shù)方案。
根據(jù)本發(fā)明實施例提供的一種數(shù)據(jù)交換方法,包括:
獲取一源數(shù)據(jù)庫的日志文件;
通過所述日志文件提取所述源數(shù)據(jù)庫的操作記錄,并將所述操作記錄轉(zhuǎn)換為預設格式的操作記錄;
根據(jù)所述預設格式的操作記錄的字段將所述預設格式的操作記錄寫入對應的內(nèi)存隊列中,供目標系統(tǒng)從所述內(nèi)存隊列中提取預設格式的操作記錄并執(zhí)行,其中所述目標系統(tǒng)為分布式數(shù)據(jù)庫。
在一個實施例中,所述操作記錄中包括源數(shù)據(jù)庫的表的結(jié)構(gòu)信息,所述方法還包括:
從所述預設格式的操作記錄中獲取所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息,并發(fā)送至所述目標系統(tǒng),以使所述目標系統(tǒng)根據(jù)所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息生成對應的表。
在一個實施例中,所述預設格式的操作記錄包括以下字段:源數(shù)據(jù)庫的庫名、源數(shù)據(jù)庫中包含的表的表名、以及源數(shù)據(jù)庫中運行的實例的實例名。
根據(jù)本發(fā)明實施例提供的一種數(shù)據(jù)交換裝置,包括:
獲取單元,用于獲取一源數(shù)據(jù)庫的日志文件;
轉(zhuǎn)換單元,用于通過所述日志文件提取所述源數(shù)據(jù)庫的操作記錄,并將所述操作記錄轉(zhuǎn)換為預設格式的操作記錄;
寫入單元,用于根據(jù)所述預設格式的操作記錄的字段將所述預設格式的操作記錄寫入對應的內(nèi)存隊列中,供目標系統(tǒng)從所述內(nèi)存隊列中提取預設格式的操作記錄并執(zhí)行,其中,所述目標系統(tǒng)為分布式數(shù)據(jù)庫。
在一個實施例中,所述操作記錄中包括源數(shù)據(jù)庫的表的結(jié)構(gòu)信息;所述獲取單元還用于,從所述操作記錄中獲取所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息;所述寫入單元還用于,將所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息寫入所述內(nèi)存隊列中,以使所述目標系統(tǒng)根據(jù)所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息生成對應的表。
在一個實施例中,所述轉(zhuǎn)換單元轉(zhuǎn)換的預設格式的操作記錄包括以下字段:源數(shù)據(jù)庫的庫名、源數(shù)據(jù)庫中包含的表的表名、以及源數(shù)據(jù)庫中運行的實例的實例名。
根據(jù)本發(fā)明實施例提供的一種數(shù)據(jù)交換系統(tǒng),包括:
源數(shù)據(jù)庫,其日志文件中記錄有操作所述源數(shù)據(jù)庫所生成的操作記錄;
數(shù)據(jù)交換裝置,用于獲取所述源數(shù)據(jù)庫的日志文件,通過所述日志文件提取所述操作記錄并將預設格式的操作記錄寫入內(nèi)存隊列;
目標系統(tǒng),用于從所述內(nèi)存隊列中提取所述預設格式的操作記錄,執(zhí)行所述預設格式的操作記錄中包含的操作,其中所述目標系統(tǒng)為分布式數(shù)據(jù)庫。
在一個實施例中,所述數(shù)據(jù)交換裝置還用于,從所述操作記錄中獲取所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息,將所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息寫入所述內(nèi)存隊列中,以使所述目標系統(tǒng)根據(jù)所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息生成對應的表。
在一個實施例中,所述操作記錄中還包括源數(shù)據(jù)庫的表的結(jié)構(gòu)信息;所述數(shù)據(jù)交換裝置還用于,將所述操作記錄轉(zhuǎn)換為預設格式的操作記錄,所述預設格式的操作記錄包括以下字段:源數(shù)據(jù)庫的庫名、源數(shù)據(jù)庫中包含的表的表名、以及源數(shù)據(jù)庫中運行的實例的實例名。
在一個實施例中,所述目標系統(tǒng)采用多線程的方式從所述內(nèi)存隊列中提取操作記錄,和/或所述目標系統(tǒng)采用多線程的方式執(zhí)行所述操作記錄中包含的操作。
本發(fā)明實施例采用的上述至少一個技術(shù)方案能夠達到以下有益效果:
本發(fā)明提供的數(shù)據(jù)交換方法、裝置及系統(tǒng),從獲取的源數(shù)據(jù)庫的日志文件中提取操記錄并轉(zhuǎn)換預設格式的操作記錄,根據(jù)轉(zhuǎn)換的預設格式的操作記錄更新目標系統(tǒng),在本技術(shù)方案中,將提取的操作記錄轉(zhuǎn)換為預設格式的操作記錄,使本方案能匹配多種類型的源數(shù)據(jù)庫及目標系統(tǒng),本技術(shù)方案可適用于多種類型的源數(shù)據(jù)庫,無需開發(fā)人員或維護人員手動處理便可完成跨系統(tǒng)數(shù)據(jù)交換,具有擴展性好、對源數(shù)據(jù)庫系統(tǒng)和目標數(shù)據(jù)庫系統(tǒng)的資源占用少的優(yōu)點。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當限定。在附圖中:
圖1為根據(jù)本發(fā)明實施例的線性通信流程的示意圖;
圖2為本發(fā)明實施例中一種數(shù)據(jù)交換方法的流程圖;
圖3為本發(fā)明實施例中源數(shù)據(jù)庫與目標系統(tǒng)的數(shù)據(jù)交換過程的示意圖;
圖4為本發(fā)明實施例中一種數(shù)據(jù)交換裝置的結(jié)構(gòu)示意圖;
圖5為本發(fā)明實施例中數(shù)據(jù)交換裝置兼容多種類型的源數(shù)據(jù)庫和目標系統(tǒng)的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實施例中一種數(shù)據(jù)交換系統(tǒng)的結(jié)構(gòu)示意圖;
圖7為本發(fā)明實施例中另外一種數(shù)據(jù)交換系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明具體實施例及相應的附圖對本發(fā)明技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
以下結(jié)合附圖,詳細說明本發(fā)明各實施例提供的技術(shù)方案。
圖1示出了根據(jù)本發(fā)明實施例的完整的線性通信的過程。如圖1所示,包括有:源數(shù)據(jù)庫11、獲取單元121、轉(zhuǎn)換單元122、寫入單元123、內(nèi)存隊列13、獲取單元141、轉(zhuǎn)換單元142、寫入單元143和目標系統(tǒng)15。其中,獲取單元121獲取源數(shù)據(jù)庫11的日志文件,轉(zhuǎn)換單元122提取該日志文件中包含的操作記錄,并將提取的操作記錄轉(zhuǎn)換為預設格式的操作記錄,寫入單元123將該預設格式的操作記錄寫入內(nèi)存隊列13(In-memory Queue)中。其中,所述預設格式為一種統(tǒng)一的寫入數(shù)據(jù)庫事件的一種形式,其數(shù)據(jù)序列化和反序列化采用Google Protobf協(xié)議;該預設格式的操作記錄登記數(shù)據(jù)庫時間發(fā)生的時間、源數(shù)據(jù)庫的庫名、表名、源數(shù)據(jù)庫中的數(shù)據(jù)更改及DDL(Data Ddfination Language,數(shù)據(jù)定義語言)變更等。
獲取單元141從內(nèi)存隊列13中提取預設格式的操作記錄,寫入單元143執(zhí)行預設格式的操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng)15。其中,當需要對從內(nèi)存隊列13中提取的操作記錄進行格式轉(zhuǎn)換等操作時,還可以包括轉(zhuǎn)換單元142,轉(zhuǎn)換單元142將獲取單元141從內(nèi)存隊列中提取的預設格式的操作記錄轉(zhuǎn)換為目標格式的操作記錄,以供寫入單元143執(zhí)行該目標格式的操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng),其中,該目標格式依據(jù)需求而進行設定。
其中,獲取單元121與獲取單元141、轉(zhuǎn)換單元122與轉(zhuǎn)換單元142、以及寫入單元123與寫入單元143的結(jié)構(gòu)、功能及工作原理類似。
實施例1
根據(jù)本發(fā)明實施例提供一種數(shù)據(jù)交換方法,如圖2所述,該方法包括以下步驟:
步驟S201、獲取一源數(shù)據(jù)庫的日志文件;
源數(shù)據(jù)庫的日志文件中保存有對源數(shù)據(jù)庫的操作記錄,如對源數(shù)據(jù)庫中的數(shù)據(jù)進行的類似插入、刪除等類型的操作及對源數(shù)據(jù)庫進行操作的時間等,或者對源數(shù)據(jù)庫執(zhí)行的其他操作信息,如回滾(rollback操作)等。
在獲取源數(shù)據(jù)庫的日志文件時,記錄該次獲取位點,在下次因與同一目標系統(tǒng)執(zhí)行數(shù)據(jù)交換而獲取該源數(shù)據(jù)庫的日志文件時,從最后一個獲取位點開始獲取源數(shù)據(jù)庫的日志文件。如此,使獲取時間縮短,同時,提高數(shù)據(jù)交換效率。
步驟S203、通過所述日志文件提取所述源數(shù)據(jù)庫的操作記錄,并將所述操作記錄轉(zhuǎn)換為預設格式的操作記錄;
可以設置時間段,在日志文件中提取該時間段內(nèi)操作源數(shù)據(jù)庫生成的操作記錄,以將該時間段內(nèi)對源數(shù)據(jù)庫進行的操作更新至目標系統(tǒng)中,如:在2016.1.1上午10:00-2016.1.1上午10:05之間對源數(shù)據(jù)庫的操作包括:插入十條數(shù)據(jù),刪除了另外五條數(shù)據(jù)。若設置的時間段為2016.1.1上午10:00-2016.1.1上午10:05,則從日志文件中提取的操作記錄包括插入十條數(shù)據(jù),及刪除了另外五條數(shù)據(jù)。同時也可以不設置時間段,通過日志文件提取操作源數(shù)據(jù)庫生成的操作記錄,將對源數(shù)據(jù)庫的操作更新至目標系統(tǒng)。
在提取操作記錄時,可記錄每次提取的時間點,在下次提取時,從最后一個時間點開始提取,如此,便可提高提取日志文件的效率,同時擴大了數(shù)據(jù)交換效率。
將提取的操作記錄轉(zhuǎn)換為預設格式的操作記錄,以使本數(shù)據(jù)交換方法可以耦合不同類型的源數(shù)據(jù)庫,如SQL Server、Oracle等。其中,該預設格式的操作記錄對多種類型的數(shù)據(jù)庫透明,即,多種類型的數(shù)據(jù)庫均能識別該預設格式是操作記錄,因此,該預設格式的操作記錄可以被多種類型的目標系統(tǒng)識別,提高了數(shù)據(jù)交換方法與源數(shù)據(jù)庫、目標系統(tǒng)的耦合率。
步驟S205、根據(jù)所述預設格式的操作記錄的字段將所述預設格式的操作記錄寫入對應的內(nèi)存隊列中,以使目標系統(tǒng)提取所述內(nèi)存隊列中的預設格式的操作記錄并執(zhí)行,其中所述目標系統(tǒng)為分布式數(shù)據(jù)庫。
在此涉及到根據(jù)預設格式的操作記錄的字段將提取的預設格式的操作記錄寫入對應的內(nèi)存隊列中;首先,根據(jù)預設格式的操作記錄的字段對預設格式的操作記錄進行分類,然后根據(jù)分類結(jié)果將其寫入對應的內(nèi)存隊列,以供目標系統(tǒng)從相應的內(nèi)存隊列中提取預設格式的操作記錄并執(zhí)行。如庫名為Basic的數(shù)據(jù)庫中,包括一個表名為student的表,還包括一個名稱為grade的表,兩個表相同的列為學生的學號?,F(xiàn)在以Basic為源數(shù)據(jù)庫,可首先根據(jù)表名將預設格式的操作記錄分類,然后將預設格式的操作記錄中的表名為student的操作記錄寫入一個子內(nèi)存隊列中,將預設格式的操作記錄中表名為grade的操作記錄寫入另外一個子內(nèi)存隊列;同時可記錄表名為student的操作記錄所在的子內(nèi)存隊列中最后一個操作記錄所在的位點,若在下次寫入內(nèi)存前不涉及目標系統(tǒng)從內(nèi)存隊列中提取預設格式的操作記錄,則在下次繼續(xù)寫入預設格式的操作記錄中的表名為student的操作記錄時,從最后一個操作記錄所在的子內(nèi)存隊列的位點的下一個位點開始寫入,若在兩次寫入之間涉及目標系統(tǒng)從子內(nèi)存隊列中提取操作記錄,則下次寫入從提取后的最后一個位點的下一個位點開始寫入。
本發(fā)明實施例提供的數(shù)據(jù)交換方法,能夠匹配多種類型的源數(shù)據(jù)庫;與此同時,本技術(shù)方案擴展性好、對源數(shù)據(jù)庫系統(tǒng)和目標數(shù)據(jù)庫系統(tǒng)的資源占用少且無需開發(fā)人員或維護人員手動處理便可自動完成跨系統(tǒng)數(shù)據(jù)交換。
在一個實施例中,所述獲取一源數(shù)據(jù)庫的日志文件包括:通過所述源數(shù)據(jù)庫內(nèi)部的應用程序接口(Application Program Interface,應用程序接口,簡稱API)獲取所述日志文件。
目標系統(tǒng)可優(yōu)先采取直接讀取日志文件的方式獲取源數(shù)據(jù)庫的日志文件,若無法通過直接讀取日志文件的方式獲取日志文件,則通過數(shù)據(jù)庫內(nèi)部的API接口獲取所述日志文件。
在一個實施例中,所述操作記錄中包括源數(shù)據(jù)庫的表的結(jié)構(gòu)信息,所述方法還包括:從所述操作記錄中獲取源數(shù)據(jù)庫的表的結(jié)構(gòu)信息。一般情況下,源數(shù)據(jù)庫定義其包含的表的同時定義其包含的表的結(jié)構(gòu)信息,該表的結(jié)構(gòu)信息中可包含該源數(shù)據(jù)庫包含的表的列名及各列之間存在的依賴關(guān)系等;在獲取源數(shù)據(jù)庫的表的結(jié)構(gòu)信息之后,將其發(fā)送至目標系統(tǒng),以供目標系統(tǒng)根據(jù)源數(shù)據(jù)庫的表的結(jié)構(gòu)信息生成對應的表,如此,便可使目標系統(tǒng)在不更改操作記錄中包含的數(shù)據(jù)之間關(guān)系的前提下將操作記錄中的數(shù)據(jù)完整地更新至目標系統(tǒng)。
在一個實施例中,預設格式的操作記錄可包括以下字段:源數(shù)據(jù)庫的庫名、源數(shù)據(jù)庫中包含的表的表名及源數(shù)據(jù)庫中運行的實例的實例名。
下面列舉一個具體實施例進行闡述。參見圖3,為一源數(shù)據(jù)庫31與目標系統(tǒng)35的數(shù)據(jù)交換過程,下面以源數(shù)據(jù)庫為SQL Server、目標系統(tǒng)為HDFS(Hadoop Distributed File System,分布式系統(tǒng))為例進行描述。
欲將SQL Server中的表名為dbo.a和dbo.b的表中的數(shù)據(jù)分別變更復制到HDFS的/user/hive/warehouse/cdc.db/a/和/user/hive/warehouse/cdc.db/b/中。數(shù)據(jù)交換方法具體為:首先,獲取SQL Server的日志文件,圖中的獲取單元321完成該日志文件獲取功能,獲取單元321優(yōu)先從SQL Server中直接讀取日志文件;若無法直接從SQL Server中直接讀取到日志文件,則獲取單元321從源數(shù)據(jù)庫SQL Serve內(nèi)部的應用程序接口中獲取日志文件。然后,轉(zhuǎn)換單元322提取獲取單元321從日志文件中獲取的表名為dho.a和dbo.b的操作記錄,并將提取的操作記錄轉(zhuǎn)換為預設格式的操作記錄。該預設格式的操作記錄對大多數(shù)數(shù)據(jù)庫透明,因此,大多數(shù)目標系統(tǒng)均能識別該預設格式的操作記錄。寫入單元323按照預設格式的操作記錄的字段分別將其寫入0號內(nèi)存隊列和1號內(nèi)存隊列中。
最后,由于需要分別從0號內(nèi)存隊列和1號內(nèi)存隊列中提取預設格式的操作記錄并執(zhí)行,目標系統(tǒng)可通過兩個獲取單元(獲取單元341和獲取單元361)以多線程的方式分別從內(nèi)存隊列33的0號內(nèi)存隊列中提取預設格式的操作記錄和從內(nèi)存隊列33的1號內(nèi)存隊列中提取預設格式的操作記錄;再通過寫入單元343執(zhí)行獲取單元341提取的預設格式的操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng)HDFS的user/hive/warehouse/cdd.db/a/;同理,通過獲取單元361從1號內(nèi)存隊列中提取操作記錄,寫入單元363執(zhí)行獲取單元361提取的預設格式的操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng)HDFS的user/hive/warehouse/cdd.db/b/中。
其中,獲取單元341與獲取單元361可采用多線程的方式從內(nèi)存隊列33中提取相應的預設格式的操作記錄,而寫入單元343和寫入單元363也可以采用多線程的方式執(zhí)行提取的預設格式的操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng)HDFS。如此,便可提高源數(shù)據(jù)庫與目標系統(tǒng)的數(shù)據(jù)交換的效率。
需要說明的是,當需要對從內(nèi)存隊列中提取的預設格式的操作記錄進行轉(zhuǎn)換等操作,可設置轉(zhuǎn)換單元(未示出),其可耦接在獲取單元341和寫入單元343之間。轉(zhuǎn)換單元轉(zhuǎn)換將獲取單元提取的預設格式的操作記錄轉(zhuǎn)換為目標格式的操作記錄,以供寫入單元執(zhí)行該目標格式的操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng)35,其中,該目標格式依據(jù)用戶的需求而進行設定。
在從獲取單元321獲取的日志文件中提取的操作記錄中還可包含表名為dbo.a的表的結(jié)構(gòu)信息和表名為dbo.b的表的結(jié)構(gòu)信息,以供目標系統(tǒng)根據(jù)表名為dbo.a的表的結(jié)構(gòu)信息生成user/hive/warehouse/cdd.db/a/的表的結(jié)構(gòu);及,供目標系統(tǒng)根據(jù)表名為dbo.b的表的結(jié)構(gòu)信息生成user/hive/warehouse/cdd.db/b/的表的結(jié)構(gòu)。
實施例2
參見圖4所示,本實施例提供一種數(shù)據(jù)交換裝置,包括獲取單元421、轉(zhuǎn)換單元422和寫入單元423。其中,獲取單元421用于獲取一源數(shù)據(jù)庫的日志文件;轉(zhuǎn)換單元422用于通過所述日志文件提取所述源數(shù)據(jù)庫的操作記錄,并將所述操作記錄轉(zhuǎn)換為預設格式的操作記錄;寫入單元423用于根據(jù)所述預設格式的操作記錄的字段將所述預設格式的操作記錄寫入對應的內(nèi)存隊列中,以供目標系統(tǒng)提取所述內(nèi)存隊列中的預設格式的操作記錄并執(zhí)行,其中,所述目標系統(tǒng)為分布式數(shù)據(jù)庫。
在本技術(shù)方案中,獲取單元421獲取一源數(shù)據(jù)庫的日志文件,繼而轉(zhuǎn)換單元422在日志文件提取操作源數(shù)據(jù)庫生成的操作記錄,并將操作記錄轉(zhuǎn)換為預設格式的操作記錄,該預設格式的操作記錄對大多數(shù)數(shù)據(jù)庫系統(tǒng)均透明,即大多數(shù)數(shù)據(jù)庫系統(tǒng)均能識別該預設格式的操作記錄,如此,便能兼容大多數(shù)的源數(shù)據(jù)庫和目標系統(tǒng),使數(shù)據(jù)交換裝置有較高的適用性。
在一個實施例中,獲取單元421可直接從源數(shù)據(jù)庫中直接讀取其日志文件,若獲取單元421無法直接讀取源數(shù)據(jù)庫的日志文件,則獲取單元421從源數(shù)據(jù)庫內(nèi)部的應用程序接口獲取日志文件。
在一個實施例中,所述獲取單元421還用于從所述操作記錄中獲取所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息;所述寫入單元423還用于將所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息寫入內(nèi)存隊列中,以供所述目標系統(tǒng)根據(jù)所述源數(shù)據(jù)庫的表的結(jié)構(gòu)信息生成對應的表。
在一個實施例中,轉(zhuǎn)換單元422轉(zhuǎn)換的預設格式的操作記錄中包括以下字段:源數(shù)據(jù)庫的庫名、源數(shù)據(jù)庫中包含的表的表名及源數(shù)據(jù)庫中運行的實例的實例名。
參見圖5所示,源數(shù)據(jù)庫51可以為MySQL、Oracle、SQL Server或DB2等類型的數(shù)據(jù)庫,但是無論采用哪一種類型的源數(shù)據(jù)庫,數(shù)據(jù)交換裝置均可獲取其日志文件,使數(shù)據(jù)交換裝置52可以兼容多種類型的源數(shù)據(jù)庫。而作為目標系統(tǒng)55的分布式數(shù)據(jù)庫,可以為數(shù)據(jù)庫系統(tǒng)、大數(shù)據(jù)系統(tǒng)、消息系統(tǒng)、緩存系統(tǒng)或?qū)崟r計算系統(tǒng),預設格式的操作記錄對上述任何一種目標系統(tǒng)均透明,使數(shù)據(jù)交換裝置有很高的適用性。
實施例3
參見圖6所示,本實施例還提供一種數(shù)據(jù)交換系統(tǒng),包括源數(shù)據(jù)庫61、數(shù)據(jù)交換裝置62和目標系統(tǒng)65。其中,源數(shù)據(jù)庫61的日志文件中記錄有所述源數(shù)據(jù)庫的操作記錄;數(shù)據(jù)交換裝置62用于獲取所述源數(shù)據(jù)庫的日志文件,通過所述日志文件提取所述操作記錄并將預設格式的操作記錄寫入內(nèi)存隊列;目標系統(tǒng)65用于從所述內(nèi)存隊列中提取所述預設格式的操作記錄,執(zhí)行所述預設格式的操作記錄中包含的操作,其中所述目標系統(tǒng)為分布式數(shù)據(jù)庫。
在一個實施例中,數(shù)據(jù)交換裝置62還用于從所述內(nèi)存隊列中提取所述預設格式的操作記錄,執(zhí)行所述預設格式的操作記錄中包含的操作,并將執(zhí)行結(jié)果寫入目標系統(tǒng),其中所述目標系統(tǒng)為分布式數(shù)據(jù)庫。
在一個實施例中,所述數(shù)據(jù)交換裝置62還用于,將所述操作記錄轉(zhuǎn)換為預設格式的操作記錄,以提高數(shù)據(jù)交換裝置與源數(shù)據(jù)庫及目標系統(tǒng)的耦合率;所述預設格式的操作記錄包括以下字段:源數(shù)據(jù)庫的庫名、源數(shù)據(jù)庫中包含的表的表名、以及源數(shù)據(jù)庫中運行的實例的實例名。
在一個實施例中,目標系統(tǒng)65采用多線程的方式從所述內(nèi)存隊列中提取操作記錄,和/或所述目標系統(tǒng)采用多線程的方式執(zhí)行所述操作記錄中包含的操作。
在一個實施例中,為了提高數(shù)據(jù)交換效率,設置多個內(nèi)存隊列,同時在數(shù)據(jù)交換裝置中設置多個獲取單元、寫入單元。下面結(jié)合圖7詳細描述根據(jù)本發(fā)明實施例的目標系統(tǒng)采用多線程的方式從內(nèi)存隊列中提取預設格式的操作記錄,和/采用多線程的方式執(zhí)行提取的所述預設格式的操作記錄中包含的操作的具體工作過程。
參見圖7所示,數(shù)據(jù)轉(zhuǎn)換裝置72將從源數(shù)據(jù)庫71的日志文件中提取的操作記錄轉(zhuǎn)換為預設格式的操作記錄并分別將其存儲于五個內(nèi)存隊列中,分別為第一內(nèi)存隊列731、第二內(nèi)存隊列732……第五內(nèi)存隊列735;而目標系統(tǒng)75采用多線程的方式從內(nèi)存隊列73中提取的預設格式的操作記錄并執(zhí)行。
在一個實施例中,還可以包括數(shù)據(jù)轉(zhuǎn)換裝置74,目標系統(tǒng)75可通過數(shù)據(jù)轉(zhuǎn)換裝置74從內(nèi)存隊列73中提取預設格式的操作記錄,并通過數(shù)據(jù)轉(zhuǎn)換裝置74執(zhí)行操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng)75。
在此提出,數(shù)據(jù)轉(zhuǎn)換裝置74中可以包括多個獲取單元(獲取單元741、獲取單元761、獲取單元771、獲取單元781、獲取單元791)和多個寫入單元(寫入單元743、寫入單元763、寫入單元773、寫入單元783、寫入單元793)。其中,獲取單元741、獲取單元761、獲取單元771、獲取單元781、獲取單元791可以采用多線程的方式分別從不同的內(nèi)存隊列中提取預設格式的操作記錄;和/或?qū)懭雴卧?43、寫入單元763、寫入單元773、寫入單元783、寫入單元793可采用多線程的方式執(zhí)行預設格式的操作記錄中包含的操作并將執(zhí)行結(jié)果寫入目標系統(tǒng)75,作為一種可選的方案,一個寫入單元與一個獲取單元對應。
可以看出,上述未涉及到數(shù)據(jù)轉(zhuǎn)換裝置74的轉(zhuǎn)換單元,若需要對獲取單元提取的預設格式的操作記錄做轉(zhuǎn)換等操作,可以設置轉(zhuǎn)換單元,可耦合在獲取單元741與寫入單元743之間;其中,轉(zhuǎn)換單元可以與數(shù)據(jù)轉(zhuǎn)換裝置74的獲取單元一一對應,也可以轉(zhuǎn)換單元的數(shù)量少于數(shù)據(jù)轉(zhuǎn)換裝置的獲取單元的數(shù)量,依據(jù)需求而設定,在此對其數(shù)量不做限制。
本發(fā)明的方法的操作步驟與裝置及系統(tǒng)的結(jié)構(gòu)特征對應,可以相互參照,不再一一贅述。
綜上所述,根據(jù)本發(fā)明提供的上述技術(shù)方案,從獲取的源數(shù)據(jù)庫的日志文件中提取操記錄并將操作記錄轉(zhuǎn)換為預設格式的操作記錄,根據(jù)提取的預設格式的操作記錄更新目標系統(tǒng),本方案將提取的操作記錄轉(zhuǎn)換為預設格式的操作記錄,能匹配多種類型的源數(shù)據(jù)庫及目標系統(tǒng),本技術(shù)方案擴展性好、對源數(shù)據(jù)庫系統(tǒng)和目標數(shù)據(jù)庫系統(tǒng)的資源占用少、可適用于多種類型的源數(shù)據(jù)庫且無需開發(fā)人員或維護人員手動處理便可完成跨系統(tǒng)數(shù)據(jù)交換。
本領(lǐng)域內(nèi)的技術(shù)人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上所述僅為本發(fā)明的實施例而已,并不用于限制本發(fā)明。對于本領(lǐng)域技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的權(quán)利要求范圍之內(nèi)。