一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)遷移方法
【專利摘要】本發(fā)明公開了一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)遷移方法,包括如下步驟:S1:提取Neo4j的概念模型;S2:用戶篩選需要進行轉(zhuǎn)換的標(biāo)簽實體和關(guān)系實體;S3:查找所有包含屬性的關(guān)系實體,并將所述包含屬性的關(guān)系實體全部轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表;S4:將需要進行轉(zhuǎn)換的所有標(biāo)簽實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表;S5:建立表達關(guān)系型數(shù)據(jù)庫概念模型中各個表之間的關(guān)系屬性;S6:建成完整的關(guān)系型數(shù)據(jù)庫的概念模型;S7:進行數(shù)據(jù)遷移。本發(fā)明利用模型轉(zhuǎn)換的方法解決了Neo4j向關(guān)系型數(shù)據(jù)庫數(shù)據(jù)遷移的問題,同時使數(shù)據(jù)遷移更加準(zhǔn)確,并且更加容易操作。
【專利說明】
一種Neo4_j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)遷移方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計算機數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法。
【背景技術(shù)】
[0002]在數(shù)據(jù)建模領(lǐng)域早期一共有兩大主要的流派,一個是關(guān)系模型,逐漸演化成了關(guān)系型數(shù)據(jù)庫;另一個是語義網(wǎng)絡(luò)采用的網(wǎng)絡(luò)結(jié)構(gòu),現(xiàn)在演化成了非關(guān)系數(shù)據(jù)中的圖形數(shù)據(jù)庫。在圖形數(shù)據(jù)庫最為流行、最具代表的數(shù)據(jù)庫是Neo4j。
[0003]Neo4j是一款高性能的、世界領(lǐng)先的圖形數(shù)據(jù)庫,具有靈活的結(jié)構(gòu)和完備的事務(wù)特性。Neo4j與關(guān)系型數(shù)據(jù)庫相比各有優(yōu)劣。Neo4j的優(yōu)點在于其把所有的數(shù)據(jù)保存在了網(wǎng)絡(luò)中而不是關(guān)系型數(shù)據(jù)庫中的表的形式,因此具有良好的查詢速度,特別適合運用于社交網(wǎng)絡(luò)、買賣網(wǎng)絡(luò)等關(guān)系的表達。目前包括Facebook、阿里巴巴、百度等許多大公司都在使用Neo4j0
[0004]從目前來看,隨著大數(shù)據(jù)時代的到來,很多應(yīng)用面臨著檢索速度、數(shù)據(jù)存儲等問題。很多用戶選擇使用Neo4j,利用網(wǎng)絡(luò)存儲的優(yōu)勢提高查詢的性能,同時提供更加靈活的存儲。同時,也存在一些應(yīng)用為了保證數(shù)據(jù)的ACID特性需要將Neo4j中的數(shù)據(jù)導(dǎo)入到關(guān)系型數(shù)據(jù)庫中,關(guān)系型數(shù)據(jù)庫具有數(shù)據(jù)結(jié)構(gòu)化,模型易于理解,數(shù)據(jù)容易維護,數(shù)據(jù)完整,操作相對方便。目前比較常見的做法是直接利用ETL工具進行數(shù)據(jù)迀移,這種情況下缺少可視化的展現(xiàn),無法實現(xiàn)優(yōu)的性能,數(shù)據(jù)迀移容易發(fā)生誤差,并且不易操作。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的之一在于提供一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,以解決現(xiàn)有數(shù)據(jù)迀移方法無法實現(xiàn)優(yōu)的性能,缺少可視化的展現(xiàn),數(shù)據(jù)迀移容易發(fā)生誤差,并且不易操作的問題。
[0006]本發(fā)明的發(fā)明目的是通過下述技術(shù)方案來實現(xiàn)的:
[0007]本發(fā)明所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,包括如下步驟:
[0008]步驟SI:提取Neo4 j的概念模型;
[0009]步驟S2:從步驟SI中得到的Neo4j的概念模型中篩選需要進行轉(zhuǎn)換的標(biāo)簽實體和關(guān)系實體;
[0010]步驟S3:從步驟S2中篩選得到的需要進行轉(zhuǎn)換的關(guān)系實體中查找包含屬性的關(guān)系實體,并將所述包含屬性的關(guān)系實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表;
[0011]步驟S4:將步驟S2中篩選得到的需要進行轉(zhuǎn)換的標(biāo)簽實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表;
[0012]步驟S5:建立表達步驟S3和步驟S4得到的關(guān)系型數(shù)據(jù)庫概念模型中各個表之間的關(guān)系屬性;
[0013]步驟S6:根據(jù)步驟S3和步驟S4得到的表和步驟S5建立的各個表之間的關(guān)系屬性組建成完整的關(guān)系型數(shù)據(jù)庫的概念模型;
[0014]步驟S7:根據(jù)步驟S6組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型進行數(shù)據(jù)迀移。
[0015]進一步的,所述步驟S1:提取Neo4j的概念模型的步驟,包括如下步驟:
[0016]步驟S1.1:調(diào)用Neo4j的API(應(yīng)用程序編程接口)得到Neo4j中所有的標(biāo)簽;
[0017]步驟S1.2:將步驟S1.1中得到的標(biāo)簽中相同的標(biāo)簽歸為同種類型的標(biāo)簽,針對每一種類型的標(biāo)簽遍歷其節(jié)點,同時遍歷節(jié)點的屬性,最終得到關(guān)于每種類型標(biāo)簽的屬性全集;
[0018]步驟S1.3:根據(jù)步驟S1.1中得到的標(biāo)簽,調(diào)用Neo4j的API得到Neo4j中的關(guān)系;
[0019]步驟S1.4:將步驟S1.3中得到的關(guān)系中相同的關(guān)系歸為同種類型的關(guān)系,遍歷每一種類型關(guān)系的所有屬性,得到關(guān)于每種類型的關(guān)系的屬性全集;
[0020]步驟S1.5:將步驟S1.2中得到的每種類型的標(biāo)簽轉(zhuǎn)換為概念模型中的標(biāo)簽實體,再將步驟S1.2中得到的每種類型標(biāo)簽的屬性全集轉(zhuǎn)換為概念模型中標(biāo)簽實體的屬性;
[0021]步驟S1.6:將步驟S1.4中得到的每種類型的關(guān)系轉(zhuǎn)換為概念模型中的關(guān)系實體,將步驟S1.4中得到的每種類型的關(guān)系的屬性全集轉(zhuǎn)換為關(guān)系實體的屬性。
[0022]進一步的,所述步驟S1.5中還包括:在概念模型中標(biāo)簽實體的屬性中添加Neo4j自帶的ID(身份標(biāo)識號碼)屬性。
[0023]進一步的,所述步驟S1.6中還包括:在概念模型中的關(guān)系實體的屬性中添加用于表示Neo4j中關(guān)系方向的起始ID屬性和目的ID屬性。
[0024]進一步的,所述步驟S3中:將所述包含屬性的關(guān)系實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表,具體包括如下步驟:
[0025]步驟S3.1:將所述包含屬性的關(guān)系實體名轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的標(biāo)題名;
[0026]步驟S3.2:將所述包含屬性的關(guān)系實體的屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的屬性;
[0027]步驟S3.2:將所述包含屬性的關(guān)系實體的起始ID屬性和目的ID屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中表中的起始ID屬性和目的ID屬性。
[0028]進一步的,所述步驟S4:將步驟S2中篩選得到的需要進行轉(zhuǎn)換的標(biāo)簽實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表,具體包括如下步驟:
[0029]步驟S4.1:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體名轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的標(biāo)題名;
[0030]步驟S4.2:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體的屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的屬性;
[0031 ]步驟S4.3:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體的ID屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表中的ID屬性。
[0032]進一步的,所述步驟S5:建立表達步驟S3和步驟S4得到的關(guān)系型數(shù)據(jù)庫概念模型中各個表之間的關(guān)系屬性的步驟,具體包括如下步驟:
[0033]步驟S5.1:從步驟S2中篩選得到的需要進行轉(zhuǎn)換的關(guān)系實體中查找所有不帶屬性的關(guān)系實體,將不帶屬性的關(guān)系實體中箭頭指向的標(biāo)簽實體轉(zhuǎn)換后對應(yīng)的表上添加一個表達外鍵的屬性;
[0034]步驟S5.2:建立關(guān)系型數(shù)據(jù)庫概念模型中所有表的主外鍵關(guān)系。
[0035]進一步的,所述步驟S5.1中所述的表達外鍵的屬性包括所述不帶屬性的關(guān)系實體中箭頭起始端的標(biāo)簽實體名和所述不帶屬性的關(guān)系實體名。
[0036]進一步的,所述步驟S7:根據(jù)步驟S6組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型進行數(shù)據(jù)迀移的步驟,具體包括:
[0037]將步驟SI中得到的Neo4j的概念模型指定為原數(shù)據(jù)的位置,將步驟S6中組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型指定為目標(biāo)數(shù)據(jù)的位置,通過ETL工具進行數(shù)據(jù)迀移。
[0038]本發(fā)明的有益效果:本發(fā)明利用模型轉(zhuǎn)換的方法解決了Neo4j向關(guān)系型數(shù)據(jù)庫數(shù)據(jù)迀移的問題,同時使數(shù)據(jù)迀移更加準(zhǔn)確,并且更加容易操作。
【附圖說明】
[0039]圖1為本發(fā)明所述的Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法的流程圖。
[0040]圖2為本發(fā)明所述的提取Neo4j的概念模型的流程圖。
[0041]圖3為本發(fā)明所述的Neo4j中包含的四個基本元素之間的關(guān)聯(lián)示意圖。
[0042]圖4為本發(fā)明實施例1中提出的Neo4j中節(jié)點和關(guān)系的關(guān)聯(lián)圖。
[0043]圖5為本發(fā)明實施例1中提取得到的Neo4j的ER圖型概念模型。
[0044]圖6為本發(fā)明實施例2中提出的Neo4j的ER圖型概念模型。
[0045]圖7為本發(fā)明實施例2中轉(zhuǎn)換后的關(guān)系型數(shù)據(jù)庫ER圖型概念模型。
【具體實施方式】
[0046]下文將結(jié)合【具體實施方式】詳細描述本發(fā)明。應(yīng)當(dāng)注意的是,下述實施例中描述的技術(shù)特征或者技術(shù)特征的組合不應(yīng)當(dāng)被認為是孤立的,它們可以被相互組合從而達到更好的技術(shù)效果。
[0047]如圖1所示,本發(fā)明所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,包括如下步驟:
[0048]步驟S1:提取Neo4j的概念模型。該概念模型通過ER圖中的實體和屬性進行表示。
[0049]Neo4j包含的四個基本元素為:
[0050]1.節(jié)點(Nodes):Neo4j把數(shù)據(jù)存儲在節(jié)點和關(guān)系上,這兩者都可以包含屬性;
[0051 ] 2.關(guān)系(ReIat1nships):在Neo4j中通過關(guān)系連接的方式把所有的節(jié)點組織起來,一個關(guān)系有一個開始節(jié)點和一個結(jié)束節(jié)點(即有向圖),關(guān)系也可以包含屬性;
[0052]3.屬性(Properties):節(jié)點和關(guān)系都可以包含屬性,這里的屬性和ER圖中的屬性可以理解為相同的概念;
[0053]4.標(biāo)簽(Labels):標(biāo)簽為節(jié)點分配了類型或者角色。類似于關(guān)系型數(shù)據(jù)庫的表(Tables)的概念,比如關(guān)系型數(shù)據(jù)庫中的學(xué)生表、老師表分別對應(yīng)了 Neo4j中的學(xué)生標(biāo)簽和老師標(biāo)簽。
[0054]為使更好地理解Neo4j包含的四個基本元素之間的關(guān)系,現(xiàn)舉例說明:
[0055]如圖3所示,其中A?D代表四個節(jié)點,Rl?R4代表關(guān)系,Pl?PlO代表屬性,其中Pl?P6是節(jié)點上的屬性,P7?PlO是關(guān)系上的屬性??梢钥闯龉?jié)點和屬性,關(guān)系和屬性都是通過一個Key-Value的雙向列表來保存的。對于一個節(jié)點而言,節(jié)點和關(guān)系也是通過一個Key-Value的雙向列表來保存的,比如A節(jié)點相關(guān)的Rl、R2、R3之間是雙向列表保存的,C節(jié)點相關(guān)的Rl和R3之間是雙向列表保存的。這樣的底層存儲使得Neo4j具有很快的遍歷和查詢速度。
[0056]通過Neo4j的四個基本元素和對整個網(wǎng)絡(luò)的遍歷操作,本發(fā)明提出了一種提取Neo4j的概念模型方法。如圖2所示,具體的提取方法如下:
[0057]步驟S1.1:調(diào)用Neo4j的API得到Neo4j中所有的標(biāo)簽;
[0058]步驟S1.2:將步驟S1.1中得到的標(biāo)簽中相同的標(biāo)簽歸為同種類型的標(biāo)簽,針對每一種類型的標(biāo)簽遍歷其所有節(jié)點,同時遍歷所有節(jié)點的所有屬性,最終得到關(guān)于所有類型標(biāo)簽的屬性全集;
[0059]步驟S1.3:根據(jù)步驟S1.1中得到的標(biāo)簽,調(diào)用Neo4j的API得到Neo4 j中所有的關(guān)系;
[0060]步驟S1.4:將步驟S1.3中得到的關(guān)系中相同的關(guān)系歸為同種類型的關(guān)系,遍歷每一種類型關(guān)系的所有屬性,得到關(guān)于所有類型的關(guān)系的屬性全集;
[0061 ]步驟S1.5:將步驟S1.2中得到的所有的標(biāo)簽轉(zhuǎn)換為概念模型中的標(biāo)簽實體,再將步驟S1.2中得到的所有類型標(biāo)簽的屬性全集轉(zhuǎn)換為概念模型中標(biāo)簽實體的屬性,同時在標(biāo)簽實體的屬性中添加一個Neo4j自帶的ID屬性;
[0062]步驟S1.6:將步驟S1.4中得到的所有類型的關(guān)系轉(zhuǎn)換為概念模型中的關(guān)系實體,將步驟S1.4中得到的所有類型的關(guān)系的屬性全集轉(zhuǎn)換為關(guān)系實體的屬性;同時在關(guān)系實體屬性中添加用于表示Neo4j中關(guān)系方向的起始ID和目的ID這個兩個屬性。起始ID和目的ID的這兩個屬性值就是Neo4j自帶的用于唯一區(qū)分的ID。
[0063]步驟S2:用戶從步驟SI中得到的Neo4j的概念模型中篩選需要進行轉(zhuǎn)換的標(biāo)簽實體和關(guān)系實體,及其對應(yīng)的屬性。該步驟相當(dāng)于一個數(shù)據(jù)庫的設(shè)計過程。
[0064]步驟S3:從步驟S2中篩選得到的需要進行轉(zhuǎn)換的關(guān)系實體中查找所有包含屬性的關(guān)系實體,并將所述包含屬性的關(guān)系實體全部轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表。步驟S3中:將所述包含屬性的關(guān)系實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表,具體包括如下步驟:
[0065]步驟S3.1:將所述包含屬性的關(guān)系實體名轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的標(biāo)題名;
[0066]步驟S3.2:將所述包含屬性的關(guān)系實體的屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的屬性;
[0067]步驟S3.2:將所述包含屬性的關(guān)系實體的起始ID屬性和目的ID屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表中的起始ID屬性和目的ID屬性。
[0068]步驟S4:將步驟S2中篩選得到的需要進行轉(zhuǎn)換的所有標(biāo)簽實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表。該步驟中具體包括如下步驟:
[0069]步驟S4.1:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體名轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的標(biāo)題名;
[0070]步驟S4.2:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體的屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的屬性;
[0071 ]步驟S4.3:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體的ID屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表中的ID屬性。
[0072]步驟S5:建立表達步驟S3和步驟S4得到的關(guān)系型數(shù)據(jù)庫概念模型中各個表之間的關(guān)系屬性的步驟,該步驟具體包括如下步驟:
[0073]步驟S5.1:從步驟S2中篩選得到的需要進行轉(zhuǎn)換的關(guān)系實體中查找所有不帶屬性的關(guān)系實體,將不帶屬性的關(guān)系實體中箭頭指向的標(biāo)簽實體轉(zhuǎn)換后對應(yīng)的表上添加一個表達外鍵的屬性。表達外鍵的屬性包括所述不帶屬性的關(guān)系實體中箭頭起始端的標(biāo)簽實體名和所述不帶屬性的關(guān)系實體名。
[0074]步驟S5.2:建立關(guān)系型數(shù)據(jù)庫概念模型中所有表的主外鍵關(guān)系。
[0075]步驟S6:根據(jù)步驟S3和步驟S4得到的表和步驟S5建立的各個表的關(guān)系屬性組建成完整的關(guān)系型數(shù)據(jù)庫的概念模型。
[0076]步驟S7:根據(jù)步驟S6組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型進行數(shù)據(jù)迀移。具體步驟為:將步驟SI中得到的Neo4j的概念模型指定為原數(shù)據(jù)的位置,將步驟S6中組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型指定為目標(biāo)數(shù)據(jù)的位置,通過ETL工具進行數(shù)據(jù)迀移。
[0077]Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換其本質(zhì)上是數(shù)據(jù)庫中表的設(shè)計和建立的過程,具體的數(shù)據(jù)還保存在Neo4j中。本發(fā)明利用MetaModel進行數(shù)據(jù)迀移操作,MetaModel是一個Apache基金會的正式項目。其目的是開發(fā)一套對關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫通用的,面向Java的CRUD接口。參照各種關(guān)系型數(shù)據(jù)庫的java接口,MoetaModel設(shè)計了一套基于SQL語言的Java接口。通過使用該接口,用戶可以通過同樣的Java API對包括Oracle、SQLserver、MySQL在內(nèi)的關(guān)系型數(shù)據(jù)庫和包括MongoDB、HBase、Cassandra在內(nèi)的非關(guān)系型數(shù)據(jù)庫進行CRUD操作。
[0078]實施例1
[0079]現(xiàn)舉例說明上述步驟SI中Neo4j的概念模型提取方法:
[0080]如圖4所示,圖中有3個節(jié)點,分別為Sally、John、NW,其中Sally、John的標(biāo)簽為Person,NW的標(biāo)簽為Book。例子中有3個關(guān)系,其中Per son之間有Fri end_0f關(guān)系,Person和Book之間有Has_Read關(guān)系。節(jié)點和關(guān)系都包含一些屬性??梢钥闯雒恳粋€節(jié)點相當(dāng)于關(guān)系型數(shù)據(jù)庫的一條記錄,每一個標(biāo)簽相當(dāng)于關(guān)系型數(shù)據(jù)庫的一個表,雖然每個節(jié)點可能有很多種關(guān)聯(lián)的關(guān)系,但是可以按照節(jié)點的標(biāo)簽來分類。
[0081 ] 步驟a:首先調(diào)用NeohI^API,得到Neo4j中所有的標(biāo)簽,分別為Person和Book。
[0082]步驟b:對于Person標(biāo)簽,遍歷SalIy和John這兩個節(jié)點,然后遍歷Sally、John的所有屬性得到一個屬性全集。例如Sal Iy節(jié)點包含了Name、Sex的屬性,John節(jié)點包含了Name、Age的屬性,那么最終得到的屬性全集為{Name、Sex、Age};同理,可得到Book標(biāo)簽對應(yīng)的屬性全集為{Title、Authors}。
[0083]步驟c:調(diào)用Neo4j的API得到Neo4j中所有類型的關(guān)系,分別為Friend_0f關(guān)系和Has_Read關(guān)系。
[0084]步驟d:遍歷Friend_0f關(guān)系和Has_Read關(guān)系的所有屬性,對于Friend_0f關(guān)系得到的屬性全集是{Since},對于Has_Read關(guān)系得到的屬性全集是{Rateing、0n}。
[0085]步驟e:將Person和Book標(biāo)簽轉(zhuǎn)變?yōu)镋R圖型概念模型中的標(biāo)簽實體,即圖5中帶有小標(biāo)Label的Person實體和Book實體;并將步驟b中得到的Person和Book標(biāo)簽的屬性全集轉(zhuǎn)換為概念模型中Person和Book實體的屬性;同時在所有實體的屬性上添加一個Neo4j自帶的ID屬性。
[0086]步驟f:將Friend_0f關(guān)系和Has_Read關(guān)系轉(zhuǎn)變?yōu)镋R圖型概念模型中的關(guān)系實體,即圖5中帶有小標(biāo)1^1&1:;[0118111口的?1^611(1_0;1^實體和]^8_1?6&(1實體;并將步驟d中得到的Friend_0f關(guān)系和Has_Read關(guān)系的屬性全集分別轉(zhuǎn)換為Friend_0f實體和Has_Read實體的屬性;同時分別在Friend_0f實體和Has_Read實體的屬性中添加用于表示Neo4 j中關(guān)系方向的起始ID(FormID)和目的ID(ToID)這個兩個屬性。
[0087]ER圖型概念模型中實體之間的連線是根據(jù)Neo4j中關(guān)系的方向來得到的,例如在圖5中Has_Read關(guān)系都是從Person節(jié)點指向Book節(jié)點,F(xiàn)riend_0f關(guān)系都是從Person節(jié)點指向Person節(jié)點,所以變成概念模型之后還是保留這樣的方向。
[0088]實施例2
[0089]現(xiàn)舉例說明Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換方法,具體方法如下:
[0090]步驟1:利用上述方法提取Neo4j的概念模型,得到如圖6所示的ER圖型概念模型。其中包括帶有小標(biāo)Label的Person實體和Book實體的標(biāo)簽實體,帶有小標(biāo)Relat1nship的Friend_0f實體、Has_Read實體和Has_Write實體的關(guān)系實體;其中Friend_0f實體和Has_Read實體為包含有屬性的關(guān)系實體,Has_Write實體為不包含屬性的關(guān)系實體。
[0091 ]步驟Π:選擇對提取的Neo4j的ER圖型概念模型中的全部實體和屬性進行轉(zhuǎn)換。
[0092]步驟ΙΠ:將Neo4j的ER圖型概念模型中包含屬性的Friend_0f實體和Has_Read實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫ER圖型概念模型中的表(Tables),即如圖7所示的帶有小標(biāo)Tables的Friend_0f 表和Has_Read表。其中Friend_0f 和 Has_Read 分別為Friend_0f 表和 Has_Read 表的標(biāo)題名。實體中的屬性也對應(yīng)著轉(zhuǎn)換為表的屬性。
[0093]步驟IV:將Neo4j的ER圖型概念模型中的Person實體和Book實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表,即如圖7所示的帶有小標(biāo)Tables的Person表和Book表;Person和Book分別為Person表和Book表的標(biāo)題名。實體中的屬性也對應(yīng)著轉(zhuǎn)換為表的屬性。
[0094]步驟V:如圖7所示,將Neo4j的ER圖型概念模型中不包含屬性的Has_Write實體箭頭指向的Book實體轉(zhuǎn)換后對應(yīng)的Book表上添加一個表達外鍵的Person_Has_Write屬性。
[0095]步驟V1:如圖7所示,根據(jù)Neo4j的ER圖型概念模型的關(guān)系實體屬性中的起始ID(FormID)和目的ID(ToID)建立關(guān)系型數(shù)據(jù)庫概念模型中Person表、Book表、Friend_0f表和Has_Read表的主外鍵關(guān)系表。如圖5中的左上角表示主外鍵關(guān)系的PK_FK表中,ID(Person)是指用Person表中的ID為主鍵,F(xiàn)ormID(Friend_of)表示Friend_of表中的FormID為外鍵。
[0096]本發(fā)明具有的優(yōu)勢如下:
[0097](I)本發(fā)明提出了一種Neo4j向關(guān)系型數(shù)據(jù)庫模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,通過模型轉(zhuǎn)換的方法實現(xiàn)了更加簡便、科學(xué)、直觀的數(shù)據(jù)迀移;
[0098](2)本發(fā)明提出了一種關(guān)于Neo4j的概念模型的表示形式和提取方法;
[0099](3)本發(fā)明在模型轉(zhuǎn)換的基礎(chǔ)上自動實現(xiàn)了MetaModel的相關(guān)接口,能夠使數(shù)據(jù)從Neo4 j向關(guān)系型數(shù)據(jù)庫進行自動迀移,不需要人工參與。
[0100]當(dāng)然應(yīng)意識到,雖然通過本發(fā)明的示例已經(jīng)進行了前面的描述,但是對本發(fā)明做出的將對本領(lǐng)域的技術(shù)人員顯而易見的這樣和其他的改進及改變應(yīng)認為落入如本文提出的本發(fā)明寬廣范圍內(nèi)。因此,盡管本發(fā)明已經(jīng)參照了優(yōu)選的實施方式進行描述,但是,其意并不是使具新穎性的設(shè)備由此而受到限制,相反,其旨在包括符合上述公開部分、權(quán)利要求的廣闊范圍之內(nèi)的各種改進和等同修改。
【主權(quán)項】
1.一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,包括如下步驟: 步驟SI:提取Neo4 j的概念模型; 步驟S2:從步驟SI中得到的Neo4j的概念模型中篩選需要進行轉(zhuǎn)換的標(biāo)簽實體和關(guān)系實體; 步驟S3:從步驟S2中篩選得到的需要進行轉(zhuǎn)換的關(guān)系實體中查找包含屬性的關(guān)系實體,并將所述包含屬性的關(guān)系實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表; 步驟S4:將步驟S2中篩選得到的需要進行轉(zhuǎn)換的標(biāo)簽實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表; 步驟S5:建立表達步驟S3和步驟S4得到的關(guān)系型數(shù)據(jù)庫概念模型中各個表之間的關(guān)系屬性; 步驟S6:根據(jù)步驟S3和步驟S4得到的表和步驟S5建立的各個表之間的關(guān)系屬性組建成完整的關(guān)系型數(shù)據(jù)庫的概念模型; 步驟S7:根據(jù)步驟S6組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型進行數(shù)據(jù)迀移。2.如權(quán)利要求1所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S1:提取Neo4j的概念模型的步驟,包括如下步驟: 步驟S1.1:調(diào)用Neo4j的API得到Neo4j中所有的標(biāo)簽; 步驟S1.2:將步驟S1.1中得到的標(biāo)簽中相同的標(biāo)簽歸為同種類型的標(biāo)簽,針對每一種類型的標(biāo)簽遍歷其節(jié)點,同時遍歷節(jié)點的屬性,最終得到關(guān)于每種類型標(biāo)簽的屬性全集;步驟S1.3:根據(jù)步驟S1.1中得到的標(biāo)簽,調(diào)用Neo4j的API得到Neo4j中的關(guān)系; 步驟S1.4:將步驟S1.3中得到的關(guān)系中相同的關(guān)系歸為同種類型的關(guān)系,遍歷每一種類型關(guān)系的所有屬性,得到關(guān)于每種類型的關(guān)系的屬性全集; 步驟S1.5:將步驟S1.2中得到的每種類型的標(biāo)簽轉(zhuǎn)換為概念模型中的標(biāo)簽實體,再將步驟S1.2中得到的每種類型標(biāo)簽的屬性全集轉(zhuǎn)換為概念模型中標(biāo)簽實體的屬性; 步驟S1.6:將步驟S1.4中得到的每種類型的關(guān)系轉(zhuǎn)換為概念模型中的關(guān)系實體,將步驟S1.4中得到的每種類型的關(guān)系的屬性全集轉(zhuǎn)換為關(guān)系實體的屬性。3.如權(quán)利要求2所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S1.5中還包括:在概念模型中標(biāo)簽實體的屬性中添加Neo4 j自帶的ID屬性。4.如權(quán)利要求3所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S1.6中還包括:在概念模型中的關(guān)系實體的屬性中添加用于表示Neo4j中關(guān)系方向的起始ID屬性和目的ID屬性。5.如權(quán)利要求4所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S3中:將所述包含屬性的關(guān)系實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表,具體包括如下步驟: 步驟S3.1:將所述包含屬性的關(guān)系實體名轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的標(biāo)題名; 步驟S3.2:將所述包含屬性的關(guān)系實體的屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的屬性; 步驟S3.2:將所述包含屬性的關(guān)系實體的起始ID屬性和目的ID屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中表中的起始ID屬性和目的ID屬性。6.如權(quán)利要求4所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S4:將步驟S2中篩選得到的需要進行轉(zhuǎn)換的標(biāo)簽實體轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫概念模型中的表,具體包括如下步驟: 步驟S4.1:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體名轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的標(biāo)題名; 步驟S4.2:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體的屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表的屬性; 步驟S4.3:將所述需要進行轉(zhuǎn)換的標(biāo)簽實體的ID屬性轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫概念模型中的表中的ID屬性。7.如權(quán)利要求1所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S5:建立表達步驟S3和步驟S4得到的關(guān)系型數(shù)據(jù)庫概念模型中各個表之間的關(guān)系屬性的步驟,具體包括如下步驟: 步驟S5.1:從步驟S2中篩選得到的需要進行轉(zhuǎn)換的關(guān)系實體中查找所有不帶屬性的關(guān)系實體,將不帶屬性的關(guān)系實體中箭頭指向的標(biāo)簽實體轉(zhuǎn)換后對應(yīng)的表上添加一個表達外鍵的屬性; 步驟S5.2:建立關(guān)系型數(shù)據(jù)庫概念模型中所有表的主外鍵關(guān)系。8.如權(quán)利要求7所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S5.1中所述的表達外鍵的屬性包括所述不帶屬性的關(guān)系實體中箭頭起始端的標(biāo)簽實體名和所述不帶屬性的關(guān)系實體名。9.如權(quán)利要求1所述的一種Neo4j向關(guān)系型數(shù)據(jù)庫的模型轉(zhuǎn)換和數(shù)據(jù)迀移方法,其特征在于,所述步驟S7:根據(jù)步驟S6組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型進行數(shù)據(jù)迀移的步驟,具體包括: 將步驟SI中得到的Neo4j的概念模型指定為原數(shù)據(jù)的位置,將步驟S6中組建成的完整的關(guān)系型數(shù)據(jù)庫的概念模型指定為目標(biāo)數(shù)據(jù)的位置,通過ETL工具進行數(shù)據(jù)迀移。
【文檔編號】G06F17/30GK105912665SQ201610224210
【公開日】2016年8月31日
【申請日】2016年4月12日
【發(fā)明人】丁貴廣, 賈天宇, 李長青
【申請人】清華大學(xué), 北京恒冠網(wǎng)絡(luò)數(shù)據(jù)處理有限公司