一種基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的方法和裝置的制造方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及模型驅(qū)動(dòng)領(lǐng)域的基于圖的模型轉(zhuǎn)換問(wèn)題,以及云計(jì)算非關(guān)系型數(shù)據(jù)庫(kù)領(lǐng)域的MongoDB使用問(wèn)題?!?br>背景技術(shù):
】[0002]模型驅(qū)動(dòng)工程(MDE)是以模型作為軟件開(kāi)發(fā)的核心制品,并提升模型在開(kāi)發(fā)過(guò)程中的作用,利用模型指導(dǎo)開(kāi)發(fā)人員對(duì)于軟件系統(tǒng)的理解、設(shè)計(jì)、構(gòu)造、維護(hù)和演化,從而提高軟件的開(kāi)發(fā)和維護(hù)的效率,降低成本。[0003]在模型驅(qū)動(dòng)工程中兩項(xiàng)關(guān)鍵的技術(shù)就是軟件建模技術(shù)和模型轉(zhuǎn)換技術(shù),模型轉(zhuǎn)換技術(shù)可以用于將開(kāi)發(fā)過(guò)程中的一個(gè)模型自動(dòng)或者半自動(dòng)的轉(zhuǎn)換成另一個(gè)模型,從而推動(dòng)整個(gè)開(kāi)發(fā)過(guò)程。隨著近來(lái)不斷增加的軟件規(guī)模,這種模型轉(zhuǎn)換工作量顯得非常龐大,傳統(tǒng)通過(guò)手工或者在計(jì)算機(jī)內(nèi)存實(shí)現(xiàn)模型轉(zhuǎn)換已經(jīng)漸漸地不可行。[0004]圖轉(zhuǎn)換是使用“圖”作為基本概念,圖G=(V,E)由節(jié)點(diǎn)和邊組成。兩個(gè)圖匕和G2之間存在存在映射fA1OG2,用來(lái)表示G1中節(jié)點(diǎn)和邊與G2中節(jié)點(diǎn)和邊的對(duì)應(yīng)關(guān)系。當(dāng)把模型看做圖時(shí),圖中每個(gè)元素與關(guān)系都有一個(gè)類(lèi)型,因此圖轉(zhuǎn)換中使用類(lèi)型圖的概念,用來(lái)對(duì)元素的類(lèi)型和結(jié)構(gòu)進(jìn)行約束。[0005]NoSQL泛指非關(guān)系型數(shù)據(jù)庫(kù),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),NoSQL的擁護(hù)者們提倡使用非關(guān)系型的數(shù)據(jù)存儲(chǔ)。它主要有四大分類(lèi):鍵值(Key-Value)存儲(chǔ)數(shù)據(jù)庫(kù)、列存儲(chǔ)數(shù)據(jù)庫(kù)、文檔型數(shù)據(jù)庫(kù)以及圖形(Graph)數(shù)據(jù)庫(kù)。在本發(fā)明中主要涉及的是文檔型數(shù)據(jù)庫(kù)MongoDB。[0006]MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類(lèi)似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類(lèi)型。MongoDB中數(shù)據(jù)被分組存儲(chǔ)在數(shù)據(jù)集中,稱(chēng)該數(shù)據(jù)集為集合(Collect1n)。每個(gè)集合在數(shù)據(jù)庫(kù)中都有一個(gè)唯一的標(biāo)識(shí)名,并且可以包含無(wú)限數(shù)目的文檔。集合的概念類(lèi)似關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。存儲(chǔ)在集合中的文檔,被存儲(chǔ)為鍵_值對(duì)的形式。鍵用于唯一標(biāo)識(shí)一個(gè)文檔,為字符串類(lèi)型,而值則可以是各種復(fù)雜的文件類(lèi)型。我們稱(chēng)這種存儲(chǔ)形式為BS0N?!?br/>發(fā)明內(nèi)容】[0007]本發(fā)明所要解決的問(wèn)題是不斷增加的軟件規(guī)模下,模型轉(zhuǎn)換工作量巨大,采用手工顯而變得不可行,而采用普通方法下,計(jì)算機(jī)的內(nèi)存也不足以支持如此龐大的工程。[0008]為解決上述問(wèn)題,本發(fā)明采用的方案如下:根據(jù)本發(fā)明的一種基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的方法,該方法包含以下步驟:51:獲取元模型、模型實(shí)例以及轉(zhuǎn)換規(guī)則;52:依據(jù)所述元模型的定義,在MongoDB中創(chuàng)建相應(yīng)的文檔存儲(chǔ)集合;53:根據(jù)所述文檔存儲(chǔ)集合的定義,利用MongoDB的插入和更新操作,將模型實(shí)例映射存儲(chǔ)至MongoDB;54:利用MongoDB的查詢(xún)操作,在MongoDB中查找模型實(shí)例中符合所述轉(zhuǎn)換規(guī)則的前置條件的模型實(shí)例片段;55:依據(jù)所述轉(zhuǎn)換規(guī)則的定義,對(duì)步驟S4得到的模型實(shí)例片段執(zhí)行相應(yīng)的MongoDB插入、更新和刪除操作實(shí)現(xiàn)模型轉(zhuǎn)換,得到轉(zhuǎn)換后的模型實(shí)例輸出;所述元模型為由類(lèi)型節(jié)點(diǎn)和類(lèi)型關(guān)聯(lián)關(guān)系組成有向圖;所述模型實(shí)例為由類(lèi)型實(shí)例和關(guān)聯(lián)實(shí)例組成的有向圖;所述轉(zhuǎn)換規(guī)則包括前置條件、后置條件、前后映射關(guān)系;所述前置條件和所述后置條件為符合所述元模型定義的有向圖;所述前后映射關(guān)系用以表示所述前置條件至所述后置條件的映射關(guān)系。[0009]進(jìn)一步,根據(jù)本發(fā)明的基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的方法,所述轉(zhuǎn)換規(guī)則還包括否定性條件;所述否定性條件是轉(zhuǎn)換規(guī)則不能被應(yīng)用的條件;所述步驟S4還包括:S4X:剔除滿(mǎn)足所述否定性條件的模型實(shí)例片段。[0010]進(jìn)一步,根據(jù)本發(fā)明的基于MongoDB的圖轉(zhuǎn)換實(shí)現(xiàn)方法,所述步驟S4包括:541:將所述前置條件劃分成多個(gè)連通子圖;542:對(duì)各個(gè)連通子圖中的各個(gè)類(lèi)型節(jié)點(diǎn),在MongoDB中查找符合類(lèi)型節(jié)點(diǎn)的約束條件的類(lèi)型實(shí)例;543:對(duì)步驟S42得到類(lèi)型實(shí)例做笛卡爾乘積運(yùn)算后組成模型實(shí)例片段。[0011]進(jìn)一步,根據(jù)本發(fā)明的基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的方法,所述步驟S5包括:551:根據(jù)所述前后映射關(guān)系,找出所述前置條件中存在而所述后置條件中不存在的類(lèi)型節(jié)點(diǎn)集合Del;552:根據(jù)所述前后映射關(guān)系,找出所述前置條件中不存在而所述后置條件中存在的類(lèi)型節(jié)點(diǎn)集合Ins;553:通過(guò)MongoDB的刪除操作,在步驟S4得到的模型實(shí)例片段中刪除類(lèi)型節(jié)點(diǎn)集合Del中類(lèi)型節(jié)點(diǎn)所對(duì)應(yīng)的類(lèi)型實(shí)例;554:創(chuàng)建類(lèi)型節(jié)點(diǎn)集合Ins中類(lèi)型節(jié)點(diǎn)所對(duì)應(yīng)的類(lèi)型實(shí)例,并通過(guò)MongoDB的插入和更新操作,將創(chuàng)建的類(lèi)型實(shí)例加入至模型實(shí)例片段中。[0012]根據(jù)本發(fā)明的一種基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的裝置,包括:輸入裝置,用于獲取元模型、模型實(shí)例以及轉(zhuǎn)換規(guī)則;存儲(chǔ)模型構(gòu)建裝置,用于依據(jù)所述元模型的定義,在MongoDB中創(chuàng)建相應(yīng)的文檔存儲(chǔ)集合;模型實(shí)例存儲(chǔ)裝置,用于根據(jù)所述文檔存儲(chǔ)集合的定義,利用MongoDB的插入和更新操作,將模型實(shí)例映射存儲(chǔ)至MongoDB;前置匹配裝置,用于利用MongoDB的查詢(xún)操作,在MongoDB中查找模型實(shí)例中符合所述轉(zhuǎn)換規(guī)則的前置條件的模型實(shí)例片段;規(guī)則轉(zhuǎn)換裝置,用于依據(jù)所述轉(zhuǎn)換規(guī)則的定義,對(duì)前置匹配裝置得到的模型實(shí)例片段執(zhí)行相應(yīng)的MongoDB插入、更新和刪除操作實(shí)現(xiàn)模型轉(zhuǎn)換,得到轉(zhuǎn)換后的模型實(shí)例輸出;所述元模型為由類(lèi)型節(jié)點(diǎn)和類(lèi)型關(guān)聯(lián)關(guān)系組成有向圖;所述模型實(shí)例為由類(lèi)型實(shí)例和關(guān)聯(lián)實(shí)例組成的有向圖;所述轉(zhuǎn)換規(guī)則包括前置條件、后置條件、前后映射關(guān)系;所述前置條件和所述后置條件為符合所述元模型定義的有向圖;所述前后映射關(guān)系用以表示所述前置條件至所述后置條件的映射關(guān)系。[0013]進(jìn)一步,根據(jù)本發(fā)明的基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的裝置,述轉(zhuǎn)換規(guī)則還包括否定性條件;所述否定性條件是轉(zhuǎn)換規(guī)則不能被應(yīng)用的條件;所述前置匹配裝置還包括:否定性條件檢查裝置,用于剔除滿(mǎn)足所述否定性條件的模型實(shí)例片段。[0014]進(jìn)一步,根據(jù)本發(fā)明的基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的裝置,所述前置匹配裝置包括:連通拆分裝置,用于將所述前置條件劃分成k個(gè)連通子圖;節(jié)點(diǎn)匹配裝置,用于對(duì)各個(gè)連通子圖中的各個(gè)類(lèi)型節(jié)點(diǎn),在MongoDB中查找符合類(lèi)型節(jié)點(diǎn)的約束條件的類(lèi)型實(shí)例;實(shí)例合并裝置,用于對(duì)節(jié)點(diǎn)匹配裝置得到類(lèi)型實(shí)例做笛卡爾乘積運(yùn)算后組成模型實(shí)例片段。[0015]進(jìn)一步,根據(jù)本發(fā)明的基于MongoDB實(shí)現(xiàn)圖轉(zhuǎn)換的裝置,所述規(guī)則轉(zhuǎn)換裝置包括:裝置,用于根據(jù)所述前后映射關(guān)系,找出所述前置條件中存在而所述后置條件中不存在的類(lèi)型節(jié)點(diǎn)集合Del;裝置,用于根據(jù)所述前后映射關(guān)系,找出所述前置條件中不存在而所述后置條件中存在的類(lèi)型節(jié)點(diǎn)集合Ins;裝置,用于通過(guò)MongoDB的刪除操作,在步驟S4得到的模型實(shí)例片段中刪除類(lèi)型節(jié)點(diǎn)集合Del中類(lèi)型節(jié)點(diǎn)所對(duì)應(yīng)的類(lèi)型實(shí)例;<當(dāng)前第1頁(yè)1 2 3 4