一種從非關系型數據庫到關系型數據庫的數據遷移方法
【專利摘要】本發明涉及一種從非關系型數據庫到關系型數據庫的數據遷移方法,包括如下步驟:連接需要進行數據遷移的非關系型數據庫,獲取數據庫中的表格信息;選擇需要進行數據遷移的表和數據庫模式定義方法,其中可選擇的數據庫模式定義方法包括用戶自定義、并集兼容、交集兼容、首條數據;將信息從非關系型數據庫中導出到定義的xml文件中;將非關系型數據庫的數據庫設計模式轉變成對應的關系型數據庫的設計模式;連接對應的關系型數據庫,根據xml文件中的數據庫設計模式,建立對應的數據表;按照index元素中的索引信息,建立對應的索引。本發明解決了非關系數據庫(如MonogDB)到關系型數據庫進行數據遷移時所具有的反范式設計、無模式化和特殊數據類型的問題。
【專利說明】一種從非關系型數據庫到關系型數據庫的數據遷移方法【技術領域】
[0001]本發明涉及一種從非關系型數據庫到關系型數據庫的數據遷移方法。
【背景技術】
[0002]目前的應用中普遍存在需要處理來自于多個數據庫的異構數據問題,現有技術主要解決在幾種常用的關系型數據庫,如Oracle, MySQL, Microsoft SQL Server之間進行數據的遷移。隨著非關系型數據庫的出現和發展,越來越多的應用中同時使用了關系型數據庫和非關系型數據庫,需要解決非關系型數據庫和關系型數據庫之間數據遷移的難題。
[0003]MongoDB與關系型數據庫之間數據遷移相比于關系型數據庫之間數據遷移,需要解決的難題主要有以下幾點:
[0004]1.MongoDB數據庫設計常采用反范式設計,不同于關系型數據庫的范式化設計,允許字段的冗余,犧牲空間來換取時間。
[0005]2.MonogDB數據庫中的表格具有無模式的特點,表格并沒有統一的模式,例如兩條記錄可以包含不同的屬性列等。
[0006]3.MongoDB中有特殊的數組和嵌入文檔兩種數據類型,在關系型數據庫中并沒有數據類型與此對應。
[0007]現有技術一般都是在主流的幾種關系型數據庫之間遷移數據。解決數據遷移時數據庫設計模式的提取、數據庫設計模式的轉換和數據異構的沖突的問題。因為關系型數據庫都是按照范式化準則設計,在數據庫設計模式上具有很高的相似性,而非關系型數據庫的設計理念不同于關系型數據庫,常采用反范式的方法設計,且每種非關系型數據庫都具有自身的特點,已有的方法并不能解決非關系型數據庫與關系型數據庫之間數據遷移的問題。
[0008]例如,河海大學碩士賈長云在其碩士論文《基于XML的異構數據庫數據交換的研究與實現——校園網信息管理平臺中的數據交換》中提出來的方法,是以XML文件作為中間載體,解決了 Oracle數據庫與SQL Server2000數據庫之間的數據交換。其算法流程包括以下幾個部分:提取源數據庫設計模式,進行源數據庫與目標數據庫之間的數據模式映射,導出數據,按照目標數據庫數據模式導入數據,對數據異構沖突進行處理幾個步驟。
[0009]上述現有技術不能解決從非關系型數據庫到關系型數據庫的數據遷移問題。
【發明內容】
[0010]本發明的目的就是為了解決從非關系型數據庫到關系型數據庫的數據遷移問題,提出一種從非關系型數據庫到關系型數據庫的數據遷移方法。
[0011]為此,本發明的方法包括如下步驟:A、連接需要進行數據遷移的非關系型數據庫,獲取數據庫中的表格信息;B、根據用戶的輸入,選擇需要進行數據遷移的表和數據庫模式定義方法,其中可選擇的數據庫模式定義方法包括用戶自定義、并集兼容、交集兼容、首條數據四種方法;C、將信息從非關系型數據庫中導出到定義的xml文件中;D、將非關系型數據庫的數據庫設計模式轉變成對應的關系型數據庫的設計模式;E、連接對應的關系型數據庫,根據xml文件中的數據庫設計模式,建立對應的數據表;F、按照index元素中的索引信息,建立對應的索引;G、返回數據遷移結果。
[0012]優選地,本發明還包括如下特征:
[0013]其中步驟B中,用戶自定義是指:用戶自己定義數據庫的每一個字段,包括字段名稱、數據類型、字段別名、非空約束、主鍵約束;程序將用戶定義的數據庫模式存儲到xml文件的meta元素中,供下一步處理;并集兼容是指:程序分析數據庫中的所有數據,提取字段信息,對行記錄中存在不同字段的情況,取并集處理,包含所有的數據列;程序將提取的數據庫設計模式存儲到xml文件的meta元素中,供下一步處理;交集兼容是指:程序分析數據庫中的所有數據,提取字段信息,對行記錄中存在不同字段的情況,取交集處理,包含所有記錄共有數據列;程序將提取的數據庫設計模式存儲到xml文件的meta元素中,供下一步處理;首條數據是指:程序分析數據庫中的第一條數據,提取字段信息;程序將提取的數據庫設計模式存儲到xml文件的meta元素中,供下一步處理。
[0014]其中步驟C中,表名信息存儲在xml文件的根元素的name屬性中,數據庫的設計模式信息存儲在meta元素中,數據信息存儲在data元素中,索引信息存儲在index元素中。
[0015]其中步驟D中,對嵌入文檔的處理方法如下:對表格進行拆分,字段信息存儲到以字段名作為表名新建的表格中,原表的對應字段類型變成string型,存儲新建的表格的表名;新建表格中增加主鍵字段,保證記錄的唯一性,以原表格的主鍵作為外鍵與原表格建立連接,嵌入文檔的子文檔作為新建表格的數據列;如果存在多重嵌入文檔,則遞歸進行此操作;當需要獲取原表的嵌入文檔信息時,通過原表相應字段存儲的新建表的表名和原表的主鍵從新建表中獲取對應信息。
[0016]其中步驟D中,對數組的處理方法如下:對表格進行拆分,字段信息存儲到以字段名作為表名新建的表格中,原表的對應字段類型變成string型,存儲新建的表格的表名;新建表格中使用復合主鍵,主鍵包括原表的主鍵和數值在原數組中的序號;新建表格中的數據列字段名為數組字段字段名;如果存在多重嵌入數組,則遞歸進行此操作;當需要獲取原表的數組字段信息時,通過原表相應字段存儲的新建表的表名和原表的主鍵和數據在原數組中的序號,從新建表中獲取對應數值。
[0017]其中步驟E中,對于嵌入文檔和數組兩種數據類型所拆分出來的新表與原表建立外鍵約束,并在導入過程中需要對可能遇到的數據異構沖突進行處理。
[0018]本發明利用數據中間載體的XML文件具有可定義的特點,配合從無模式的非關系型數據庫表格中自動提取數據庫設計模式的自定義、并集兼容、交集兼容和首條數據四種方法,從而可以設計特殊的定義結構適用于解決非關系數據庫(如MonogDB)到關系型數據庫進行數據遷移時所具有的反范式設計、無模式化和特殊數據類型的問題。
[0019]本發明還對非關系型數據庫中的數組和嵌入文檔兩種特殊數據類型進行了表格拆分方法處理。
【專利附圖】
【附圖說明】
[0020]圖1是本發明實施例算法程序流程圖。[0021]圖2a、圖2b是本發明實施例對嵌入文檔和數組兩種特殊數據類型的處理前后示例圖。
[0022]圖3是將MongoDB中的device表導入到MySQL時MongoDB中的device表。【具體實施方式】
[0023]本實施例針對于非關系型數據庫MongoDB相比于關系型數據庫的不同點,對從MongoDB到關系型數據庫的數據遷移難題進行了解決。解決了從MongoDB到關系型數據庫不同于關系型數據庫之間數據遷移的數據庫設計模型提取時的MongoDB的無模式問題、數據庫設計模型轉換時的MongoDB反范式設計問題、數據類型映射時MongoDB特有的數組和嵌入文檔數據類型問題的處理。
[0024]本實施例相比于傳統的方法,可以有效地解決MongoDB到關系型數據庫的數據遷移問題。使用并集兼容、交集兼容、首條數據三種方法解決MongoDB的無模式特點在遷移中的問題。使用特殊設計的表格拆分方法解決MongoDB特有的數組和嵌入文檔數據類型的處理問題和MongoDB的反范式設計問題。但本發明并不限于適用于MongoDB數據庫。
[0025]該實施例提供了一種從MongoDB到主流關系型數據庫的數據遷移方法,如圖1所示,其步驟如下所述:
[0026]1.連接需要進行數據遷移的MongoDB數據庫(SlOl ),獲取數據庫中的表格信息(S102)。
[0027]2.用戶選擇需要進行數據遷移的表(MongoDB中稱為集合)(S103)和數據庫模式定義方法(S104-S107),其中數據庫模式定義方法包括用戶自定義、并集兼容、交集兼容、首條數據四種方法,方法說明參見數據庫模式定義方法說明表。
[0028]表1數據庫模式定義方法說明表
[0029]...............Si
【權利要求】
1.一種從非關系型數據庫到關系型數據庫的數據遷移方法,其特征是,包括如下步驟: A、連接需要進行數據遷移的非關系型數據庫,獲取數據庫中的表格信息; B、根據用戶的輸入,選擇需要進行數據遷移的表和數據庫模式定義方法,其中可選擇的數據庫模式定義方法包括用戶自定義、并集兼容、交集兼容、首條數據四種方法; C、將信息從非關系型數據庫中導出到定義的xml文件中; D、將非關系型數據庫的數據庫設計模式轉變成對應的關系型數據庫的設計模式; E、連接對應的關系型數據庫,根據xml文件中的數據庫設計模式,建立對應的數據表; F、按照index元素中的索引信息,建立對應的索引; G、返回數據遷移結果。
2.如權利要求1所述的數據遷移方法,其特征是:其中步驟B中, 用戶自定義是指:用戶自己定義數據庫的每一個字段,包括字段名稱、數據類型、字段別名、非空約束、主鍵約束;程序將用戶定義的數據庫模式存儲到xml文件的meta元素中,供下一步處理; 并集兼容是指:程序分析數據庫中的所有數據,提取字段信息,對行記錄中存在不同字段的情況,取并集處理,包含所有的數據列;程序將提取的數據庫設計模式存儲到xml文件的meta元素中,供下一步處 理; 交集兼容是指:程序分析數據庫中的所有數據,提取字段信息,對行記錄中存在不同字段的情況,取交集處理,包含所有記錄共有數據列;程序將提取的數據庫設計模式存儲到xml文件的meta元素中,供下一步處理; 首條數據是指:程序分析數據庫中的第一條數據,提取字段信息;程序將提取的數據庫設計模式存儲到xml文件的meta元素中,供下一步處理。
3.如權利要求1所述的數據遷移方法,其特征是:其中步驟C中,表名信息存儲在xml文件的根元素的name屬性中,數據庫的設計模式信息存儲在meta元素中,數據信息存儲在data元素中,索引信息存儲在index元素中。
4.如權利要求1所述的數據遷移方法,其特征是:其中步驟D中,對嵌入文檔的處理方法如下:對表格進行拆分,字段信息存儲到以字段名作為表名新建的表格中,原表的對應字段類型變成string型,存儲新建的表格的表名;新建表格中增加主鍵字段,保證記錄的唯一性,以原表格的主鍵作為外鍵與原表格建立連接,嵌入文檔的子文檔作為新建表格的數據列;如果存在多重嵌入文檔,則遞歸進行此操作;當需要獲取原表的嵌入文檔信息時,通過原表相應字段存儲的新建表的表名和原表的主鍵從新建表中獲取對應信息。
5.如權利要求1所述的數據遷移方法,其特征是:其中步驟D中,對數組的處理方法如下:對表格進行拆分,字段信息存儲到以字段名作為表名新建的表格中,原表的對應字段類型變成string型,存儲新建的表格的表名;新建表格中使用復合主鍵,主鍵包括原表的主鍵和數值在原數組中的序號;新建表格中的數據列字段名為數組字段字段名;如果存在多重嵌入數組,則遞歸進行此操作;當需要獲取原表的數組字段信息時,通過原表相應字段存儲的新建表的表名和原表的主鍵和數據在原數組中的序號,從新建表中獲取對應數值。
6.如權利要求1所述的數據遷移方法,其特征是:其中步驟E中,對于嵌入文檔和數組兩種數據類型所拆分出來的新表與原表建立外鍵約束,并在導入過程中需要對可能遇到的數據異構沖突進行處理 。
【文檔編號】G06F17/30GK103530327SQ201310443352
【公開日】2014年1月22日 申請日期:2013年9月25日 優先權日:2013年9月25日
【發明者】李秀, 閆天翔, 高福信, 余謹 申請人:清華大學深圳研究生院