CN104794244B - 一种基于MongoDB实现图转换的方法和装置 - Google Patents
一种基于MongoDB实现图转换的方法和装置 Download PDFInfo
- Publication number
- CN104794244B CN104794244B CN201510241080.4A CN201510241080A CN104794244B CN 104794244 B CN104794244 B CN 104794244B CN 201510241080 A CN201510241080 A CN 201510241080A CN 104794244 B CN104794244 B CN 104794244B
- Authority
- CN
- China
- Prior art keywords
- model
- type
- instance
- mongodb
- transformation rule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种基于MongoDB实现图转换的方法和装置。本发明输入元模型、模型实例和转换规则。通过在MongoDB中构建元模型存储的数据结构,然后将模型实例存入MongoDB中,再通过MongoDB查询、更新、插入等数据库操作将模型实例中符合转换规则前置条件的模型实例片段转换成转换规则后置条件形式下的模型实例片段。本发明模型转换以MongoDB为中介,可以实现大规模的模型转换,并且可以支持分布式的模型转换,转换后的模型也存储在MongoDB中,便于对输出模型的查询以及修改。
Description
技术领域
本发明涉及模型驱动领域的基于图的模型转换问题,以及云计算非关系型数据库领域的MongoDB使用问题。
背景技术
模型驱动工程(MDE)是以模型作为软件开发的核心制品,并提升模型在开发过程中的作用,利用模型指导开发人员对于软件系统的理解、设计、构造、维护和演化,从而提高软件的开发和维护的效率,降低成本。
在模型驱动工程中两项关键的技术就是软件建模技术和模型转换技术,模型转换技术可以用于将开发过程中的一个模型自动或者半自动的转换成另一个模型,从而推动整个开发过程。随着近来不断增加的软件规模,这种模型转换工作量显得非常庞大,传统通过手工或者在计算机内存实现模型转换已经渐渐地不可行。
图转换是使用“图”作为基本概念,图G = (V, E)由节点和边组成。两个图G1和G2之间存在存在映射f:G1->G2,用来表示G1中节点和边与G2中节点和边的对应关系。当把模型看做图时,图中每个元素与关系都有一个类型,因此图转换中使用类型图的概念,用来对元素的类型和结构进行约束。
NoSQL泛指非关系型数据库,意即“不仅仅是SQL”,是一项全新的数据库革命性运动,NoSQL的拥护者们提倡使用非关系型的数据存储。它主要有四大分类:键值(Key-Value)存储数据库、列存储数据库、文档型数据库以及图形(Graph)数据库。在本发明中主要涉及的是文档型数据库MongoDB。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB中数据被分组存储在数据集中,称该数据集为集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON。
发明内容
本发明所要解决的问题是不断增加的软件规模下,模型转换工作量巨大,采用手工显而变得不可行,而采用普通方法下,计算机的内存也不足以支持如此庞大的工程。
为解决上述问题,本发明采用的方案如下:
根据本发明的一种基于MongoDB实现图转换的方法,该方法包含以下步骤:
S1:获取元模型、模型实例以及转换规则;
S2:依据所述元模型的定义,在MongoDB中创建相应的文档存储集合;
S3:根据所述文档存储集合的定义,利用MongoDB的插入和更新操作,将模型实例映射存储至MongoDB;
S4:利用MongoDB的查询操作,在MongoDB中查找模型实例中符合所述转换规则的前置条件的模型实例片段;
S5:依据所述转换规则的定义,对步骤S4得到的模型实例片段执行相应的MongoDB插入、更新和删除操作实现模型转换,得到转换后的模型实例输出;
所述元模型为由类型节点和类型关联关系组成有向图;所述模型实例为由类型实例和关联实例组成的有向图;所述转换规则包括前置条件、后置条件、前后映射关系;所述前置条件和所述后置条件为符合所述元模型定义的有向图;所述前后映射关系用以表示所述前置条件至所述后置条件的映射关系。
进一步,根据本发明的基于MongoDB实现图转换的方法,所述转换规则还包括否定性条件;所述否定性条件是转换规则不能被应用的条件;所述步骤S4还包括:
S4X:剔除满足所述否定性条件的模型实例片段。
进一步,根据本发明的基于MongoDB的图转换实现方法,所述步骤S4包括:
S41:将所述前置条件划分成多个连通子图;
S42:对各个连通子图中的各个类型节点,在MongoDB中查找符合类型节点的约束条件的类型实例;
S43:对步骤S42得到类型实例做笛卡尔乘积运算后组成模型实例片段。
进一步,根据本发明的基于MongoDB实现图转换的方法,所述步骤S5包括:
S51:根据所述前后映射关系,找出所述前置条件中存在而所述后置条件中不存在的类型节点集合Del;
S52:根据所述前后映射关系,找出所述前置条件中不存在而所述后置条件中存在的类型节点集合Ins;
S53:通过MongoDB的删除操作,在步骤S4得到的模型实例片段中删除类型节点集合Del中类型节点所对应的类型实例;
S54:创建类型节点集合Ins中类型节点所对应的类型实例,并通过MongoDB的插入和更新操作,将创建的类型实例加入至模型实例片段中。
根据本发明的一种基于MongoDB实现图转换的装置,包括:
输入装置,用于获取元模型、模型实例以及转换规则;
存储模型构建装置,用于依据所述元模型的定义,在MongoDB中创建相应的文档存储集合;
模型实例存储装置,用于根据所述文档存储集合的定义,利用MongoDB的插入和更新操作,将模型实例映射存储至MongoDB;
前置匹配装置,用于利用MongoDB的查询操作,在MongoDB中查找模型实例中符合所述转换规则的前置条件的模型实例片段;
规则转换装置,用于依据所述转换规则的定义,对前置匹配装置得到的模型实例片段执行相应的MongoDB插入、更新和删除操作实现模型转换,得到转换后的模型实例输出;
所述元模型为由类型节点和类型关联关系组成有向图;所述模型实例为由类型实例和关联实例组成的有向图;所述转换规则包括前置条件、后置条件、前后映射关系;所述前置条件和所述后置条件为符合所述元模型定义的有向图;所述前后映射关系用以表示所述前置条件至所述后置条件的映射关系。
进一步,根据本发明的基于MongoDB实现图转换的装置,述转换规则还包括否定性条件;所述否定性条件是转换规则不能被应用的条件;所述前置匹配装置还包括:
否定性条件检查装置,用于剔除满足所述否定性条件的模型实例片段。
进一步,根据本发明的基于MongoDB实现图转换的装置,所述前置匹配装置包括:
连通拆分装置,用于将所述前置条件划分成k个连通子图;
节点匹配装置,用于对各个连通子图中的各个类型节点,在MongoDB中查找符合类型节点的约束条件的类型实例;
实例合并装置,用于对节点匹配装置得到类型实例做笛卡尔乘积运算后组成模型实例片段。
进一步,根据本发明的基于MongoDB实现图转换的装置,所述规则转换装置包括:
装置,用于根据所述前后映射关系,找出所述前置条件中存在而所述后置条件中不存在的类型节点集合Del;
装置,用于根据所述前后映射关系,找出所述前置条件中不存在而所述后置条件中存在的类型节点集合Ins;
装置,用于通过MongoDB的删除操作,在步骤S4得到的模型实例片段中删除类型节点集合Del中类型节点所对应的类型实例;
装置,用于创建类型节点集合Ins中类型节点所对应的类型实例,并通过MongoDB的插入和更新操作,将创建的类型实例加入至模型实例片段中。
本发明的技术效果如下:
1、本发明将模型数据存入至MongoDB中,模型转换过程通过MongoDB数据库操作进行,因此,本发明对计算机内存要求很少,可以忽略,而且本发明对存储模型的规模大小没有限制,对处理模型的规模大小也没有限制。
2、由于本发明依赖于MongoDB实现,根据MongoDB本身的数据库特性可以实现分布式处理。
3、本发明转换后的模型也存储在MongoDB中,可以方便对模型进行查询与使用。
附图说明
图1为本发明模块关系结构示意图。
图2为本发明实施例中示例元模型的结构示意图。
图3为本发明实施例中示例模型实例的结构示意图。
图4为本发明实施例中示例转换规则的结构示意图。
图5为根据图4转换规则中前置条件查询得到图3中的模型实例片段结构示意图。
图6为图3中的模型实例根据图4转换规则进行转换后得到的模型实例。
具体实施方式
下面结合说明书附图对本发明做进一步详细说明。
如图1所示,本发明的基于MongoDB实现图转换的装置,包括输入装置1、存储模型构建装置2、模型实例存储装置3、前置匹配装置4、规则转换装置5以及MongoDB6。其中,MongoDB6是一种以文件导向数据库管理系统,为本领域技术人员所熟悉,不再赘述。输入装置1、存储模型构建装置2、模型实例存储装置3、前置匹配装置4、规则转换装置5分别与本发明方法中的步骤S1、S2、S3、S4、S5相对应。下面结合图2、图3、图4示例中的元模型、模型实例、转换规则,对输入装置1、存储模型构建装置2、模型实例存储装置3、前置匹配装置4、规则转换装置5的具体详细说明。
输入装置1用于获取元模型、模型实例以及转换规则。本装置对应于前述方法中的步骤S1。这里,元模型为由类型节点和类型关联关系组成有向图。图2是元模型结构的示例,其中包括ModelElement、Generalization、NameSpace、Package、Class、Association、Table、Schema、Atribute、PKey、Column等类型节点。这些类型节点用以表示软件程序设计中的类类型(Class)。本领域技术人员理解,这里的类型节点也可以是程序语言中的基本数据类型,比如整型数(int)、字符串(String)、浮点数(float)、字符(char)等。类型节点之间的连线表示类型关联关系。类型关联关系可以是继承关系、属性包含关系以及其他关联关系。类型关联关系可以是一对一的、一对多的或者多对多的关系。模型实例是由类型实例和关联实例组成的有向图。类型实例可以是对象(Object)或者变量(Variable)。关联实例用以表示类型实例之间的关联关系。图3是模型实例的示例,其中包含有animal、cat、color、s、t_cat、cat_pk、cat_id等对象。这些对象分别是类类型Package、Class、Atribute、Schema、Table、PKey、Column的类型实例。类型实例之间的连线表示关联实例,可以表示对象之间的包含关系、引用关系等等。需要说明的是这里的模型实例中类型实例所对应的类型限定在元模型结构的框架内。图3中类型实例所对应的类类型Package、Class、Atribute、Schema、Table、PKey、Column均在图2的元模型中定义。也就是说,这里所输入的模型实例是符合元模型定义的模型实例。元模型、模型实例可以采用统一建模语言(UML)定义,并可以使用Rational Rose等工具进行编辑获得。元模型和模型实例的构建并不是本发明所讨论的范畴,不再赘述。转换规则由前置条件、后置条件、前后映射关系以及否定性条件组成。前置条件和后置条件均为符合元模型定义的有向图。否定性条件是转换规则不能被应用的条件。图4是转换规则的示例,其中左侧的图为前置条件,右侧的图为后置条件。因此,前置条件简称为左图,后置条件简称为右图。在图4的左图中,包括有三个类型实例,分别为:c、a、t,对应的类型为:Class、Attribute、Table。它们之间的关系为:c以一对多包含a,c引用t。在右图中,包括有四个类型实例,分别为:c、t和col,对应的类型为:Class、Table以及Column。它们之间的关系为: c引用t, t以一对多包含col。此外,图4的左图中还定义了否定性条件。图4中打“×”的表示否定性条件。图4中定义三个否定性条件,分别为:1、类型Attribute 的实例a不能引用类型Column的实例;2、类型Attribute 的实例a不能包含类型Class的实例;3、类型Table的实例t不能包含String类型的实例。由此,图4左图的前置条件表示为当模型实例中满足类型Class的实例包含有Attribute类型的实例,且该类型Class的实例引用了Table类型的实例时,但其中,Attribute类型的实例不引用类型Column的实例不包含类型Class的实例,被引用的Table类型的实例不包含有String类型的实例的情形下满足转换规则的转换条件。无论左图中的类型实例对应的类型还是右图中的类型实例对应的类型均在前述元模型中有定义。因此,转换规则的前置条件和后置条件是符合元模型定义的。此外需要说明的是前置条件或后置条件中,类型实例的名称只是起到标识的作用。前置条件和后置条件表示的类型所对应的类型实例之间的关联关系。因此,前置条件和后置条件中实际起作用的是类型实例对应的类型。也因此,在本说明书后文中表述的前置条件的节点是类型节点,而不是类型实例节点。此外,还需要说明的是,输入装置1 “用于获取元模型、模型实例以及转换规则”以及步骤S1中“获取元模型、模型实例以及转换规则”中的“获取”表示为“元模型、模型实例和转换规则”是本发明的输入,本领域技术人员理解,如何“获取”并不是本发明讨论的范畴,无需赘述。
存储模型构建装置2用于:依据所述元模型的定义,在MongoDB中创建相应的文档存储集合。本装置对应于前述方法中的步骤S2,在本实施例中,具体通过以下处理过程实现:首先在MongDB中创建一个名为domainDB的空数据库,用作模型数据的存储。然后遍历元模型中的类型节点,假如该类型节点为类类型(Class),则在domainDB中创建一个相应名称的存储文档。各个类类型的类型节点所对应的存储文档组成文档存储集合。上述步骤可以看出,对于元模型中的类型节点为int、String、float等基本数据类型时,无需创建相应的存储文档。具体到图2的示例中,每个类型节点,比如ModelElement、Generalization、NameSpace、Package、Class、Association、Table、Schema、Atribute、PKey、Column等类型节点各自创建一个独立的存储文档。而与Class关联的String则无需创建相应的存储文档。类型节点所对应的存储文档为类型文档。
模型实例存储装置3用于:根据所述文档存储集合的定义,利用MongoDB的插入和更新操作,将模型实例映射存储至MongoDB。本装置对应于前述方法中的步骤S3,在本实施例中,具体通过以下步骤实现:
S31:为模型实例中的类型实例创建唯一标识符ID,然后将模型实例中的类型实例的名称、该类型实例所对应的唯一标识符ID以及与该类型实例具有属性关联的变量(Variable)转换为BSON格式的文档插入至该类型实例所对应的类型文档中;
S32:重复S31直至模型实例中所有的类型实例遍历完成;
S33:将模型实例中除了属性关联的关联实例利用更新语句存入对应的类型文档中。
其中,步骤S31通过对所输入的模型实例的类型实例逐个遍历实现。对于每个类型实例,执行以下步骤实现:
S311:判断类型实例所对应的类型,假如该类型实例所对应的类型为类类型,则执行以下步骤S312至S318;假如该类型实例所对应的类型为基本数据类型,则转模型实例中下一个类型实例的处理;
S312:为该类型实例创建属性集合AttributeSet;
S313:为该类型实例创建唯一标识符ID,并将唯一标识符ID加入至属性集合AttributeSet
S314:遍历该类型实例的关联实例,假如该关联实例为属性关联,则将该属性关联所对应的Variable类型实例加入至至属性集合AttributeSet;
S315:将属性集合AttributeSet中的内容转换成BSON格式的文档InstDoc;
S316:通过MongoDB插入操作,将文档InstDoc存入至该实例的所对应的类型的类型文档,并取得该文档InstDoc在类型文档中的索引号;
S317:遍历元模型,获得该类型实例的所对应的类型的所有父类类型;
S318:将步骤S316取得多索引号加入至文档InstDoc中,然后将修改后的文档InstDoc插入至步骤S317得到的父类类型对应的类型文档中。
由上述过程可以看出,模型实例中的类型实例除了要存入至其对应类型的类型文档中,还要存入至其对应类型的父类类型的类型文档中,存入父类类型时,增加一个索引号使其指向该类型实例实际对应类型的类型文档中。以图3中的类型实例animal为例,类型实例animal对应的类型为Package。而在图2的元模型中可以看出,类型Package具有两个父类,分别为:Namespace和ModelElement。也就是说,类型实例animal除了需要存入Package类型文档中之外,还要存入父类的Namespace和ModelElement的类型文档中。不过,在Package父类的Namespace和ModelElement的类型文档中存储的类型实例animal中包含有索引号指向Package类型文档中存储的类型实例animal。
前置匹配装置4用于:利用MongoDB的查询操作,在MongoDB中查找模型实例中符合所述转换规则的前置条件的模型实例片段。本装置对应于前述方法中的步骤S4。由于本实施中的转换规则还包括否定性条件,因此,前置匹配装置4还包含了否定性条件检查装置。否定性条件检查装置,用于剔除满足所述否定性条件的模型实例片段,对应于前述方法中的步骤S4X。本实施例中,“在MongoDB中查找模型实例中符合所述转换规则的前置条件的模型实例片段”采用以下步骤实现:
S41:将所述前置条件划分成多个连通子图;
S42:对各个连通子图中的各个类型节点,在MongoDB中查找符合类型节点的约束条件的类型实例;
S43:对步骤S42得到类型实例做笛卡尔乘积运算后组成模型实例片段。
如前所述,前置条件是由节点和表示节点关系的边组成的有向图。因此前置条件可能包含有多个连通子图。在连通子图内,所有节点均通过边相连。而在连通子图间,一个连通子图的任何节点与另一个连通子图的任何节点都不相连。以图4中前置条件为例。该前置条件中存在三个类型节点分别为:Class、Attribute和Table。这三个类型节点相连:Class类型通过引用关系Ref的边与Table类型相连,Class类型通过包含关系CF的边与Attribute类型相连。因此,图4中的前置条件只包含了一个连通子图。步骤S42是对连通子图遍历过程,对每个连通子图的各个类型节点执行“在MongoDB中查找符合类型节点的约束条件的类型实例”。本实施例中,步骤S42对连通子图中各个类型节点采用堆栈递归的方式进行遍历,具体采用以下步骤进行处理:
S421:在连通子图中任意选取一个类型节点n;
S422:在MongoDB中查找符合类型节点n的约束条件的类型实例;
S423:将连通子图中与类型节点n直接相连的且未经过步骤S422处理的类型节点加入至堆栈Stack中;
S424:假如堆栈Stack为空,则结束;否则从堆栈Stack中取一个类型节点赋值给类型节点n后转步骤S422。
类型节点的约束条件分为属性约束条件和关联约束条件。与类型节点通过属性关联相连的类型节点组成该类型节点的属性约束条件。与类型节点通过其他关联相连的类型节点组成关联约束条件。需要说明的是,类型节点的约束条件为出度约束。以图4中左图的前置条件为例,类型节点Class包含两个出度约束:一个是与Table的引用关系的约束,另外一个是与Attribute的包含关系约束。而类型节点Table是由于被类型节点Class引用属于入度约束,不在考虑范围内。同理,类型节点Attribute被类型节点Class包含,也属于入度约束,不在考虑的范围内。也因此,在步骤S421中选取初始的类型节点n时,最好选取入度为0的类型节点。
前置匹配装置4的输出或步骤S4的输出为模型实例片段。以图3中的模型实例为例,对前置条件中Class类型节点的约束条件查找可以找到类型实例cat:Class,对前置条件中Table类型节点的约束条件查找可以找到类型实例:t_cat:Table,对前置条件中Attribute类型节点的约束条件查找可以找到类型实例:color:Attribute。然后将cat:Class、t_cat:Table、color:Attribute三个类型实例执行笛卡尔乘积运算后得到如图5所示的模型实例片段。
经过上述处理后,执行步骤S4X否定性条件检查。图4转换规则定义的三个否定性条件为:
1、类型Attribute的实例不能引用类型Column的实例;
2、类型Attribute的实例不能包含类型Class的实例;
3、类型Table的实例不能包含String类型的实例。
显而易见地,图5中得到的模型实例片段不能满足上述任何一个否定性条件,因此步骤S4或前置匹配装置4的最终输出为图5所示的模型实例片段。
规则转换装置5用于:依据所述转换规则的定义,对前置匹配装置得到的模型实例片段执行相应的MongoDB插入、更新和删除操作实现模型转换,得到转换后的模型实例输出。本装置对应于前述方法中的步骤S5,本实施例中,具体的步骤如下:
S51:根据所述前后映射关系,找出所述前置条件中存在而所述后置条件中不存在的类型节点集合Del;
S52:根据所述前后映射关系,找出所述前置条件中不存在而所述后置条件中存在的类型节点集合Ins;
S53:通过MongoDB的删除操作,在步骤S4得到的模型实例片段中删除类型节点集合Del中类型节点所对应的类型实例;
S54:创建类型节点集合Ins中类型节点所对应的类型实例,并通过MongoDB的插入和更新操作,将创建的类型实例加入至模型实例片段中。
规则转换装置5的输入是转换规则和前置匹配装置4输出的模型实例片段。以图5的模型实例片段以及图4的转换规则为例。首先在步骤S51中可以找出前置条件中存在,而后置条件中不存在的类型节点集合Del={Attribute}。然后在步骤S52中可以找出前置条件中不存在,而后置条件存在的类型节点集合Ins={Column}。然后在步骤S53中,根据类型节点集合Del={Attribute},在模型实例片段中删除类型为Attribute的类型实例color,并删除该类型实例与类型实例cat之间的包含关系。最后在步骤S54中,根据类型节点集合Ins={Column}创建类型为Column的类型实例tc,并根据转换规则中类型实例t与类型实例col之间的包含关系创建相应的关联实例。创建类型实例过程中类型实例的命名可以根据上下文取得。比如,在本例中,类型实例名称为tc根据类型Table与类型Column之间的关联关系命名。由此最终根据图4的转换规则对图3中的模型实例进行转换后得到如图6所示的模型实例。显而意见地,步骤S53和步骤S54均通过MongoDB数据库操作实现,因此最终输出的模型实例或模型实例片段均保持在MongoDB中。
最后需要说明的是,本说明书上述实施例仅仅是本发明实现的实施方式之一。凡是根据本发明采用等同替换或者等效变换而形成的所有技术方案均落在本发明权利要求保护的范围之内。
Claims (6)
1.一种基于MongoDB实现图转换的方法,其特征在于,该方法包含以下步骤:
S1:获取元模型、模型实例以及转换规则;
S2:依据所述元模型的定义,在MongoDB中创建相应的文档存储集合;
S3:根据所述文档存储集合的定义,利用MongoDB的插入和更新操作,将模型实例映射存储至MongoDB;
S4:利用MongoDB的查询操作,在MongoDB中查找模型实例中符合所述转换规则的前置条件的模型实例片段;
S5:依据所述转换规则的定义,对步骤S4得到的模型实例片段执行相应的MongoDB插入、更新和删除操作实现模型转换,得到转换后的模型实例输出;
所述元模型为由类型节点和类型关联关系组成有向图;所述模型实例为由类型实例和关联实例组成的有向图;所述转换规则包括前置条件、后置条件、前后映射关系;所述前置条件和所述后置条件为符合所述元模型定义的有向图;所述前后映射关系用以表示所述前置条件至所述后置条件的映射关系;
所述步骤S5包括:
S51:根据所述前后映射关系,找出所述前置条件中存在而所述后置条件中不存在的类型节点集合Del;
S52:根据所述前后映射关系,找出所述前置条件中不存在而所述后置条件中存在的类型节点集合Ins;
S53:通过MongoDB的删除操作,在步骤S4得到的模型实例片段中删除类型节点集合Del中类型节点所对应的类型实例;
S54:创建类型节点集合Ins中类型节点所对应的类型实例,并通过MongoDB的插入和更新操作,将创建的类型实例加入至模型实例片段中。
2.如权利要求1所述的基于MongoDB实现图转换的方法,其特征在于,所述转换规则还包括否定性条件;所述否定性条件是转换规则不能被应用的条件;所述步骤S4还包括:
S4X:剔除满足所述否定性条件的模型实例片段。
3.如权利要求1所述的基于MongoDB实现图转换的方法,其特征在于,所述步骤S4包括:
S41:将所述前置条件划分成多个连通子图;
S42:对各个连通子图中的各个类型节点,在MongoDB中查找符合类型节点的约束条件的类型实例;
S43:对步骤S42得到类型实例做笛卡尔乘积运算后组成模型实例片段。
4.一种基于MongoDB实现图转换的装置,其特征在于,包括:
输入装置,用于获取元模型、模型实例以及转换规则;
存储模型构建装置,用于依据所述元模型的定义,在MongoDB中创建相应的文档存储集合;
模型实例存储装置,用于根据所述文档存储集合的定义,利用MongoDB的插入和更新操作,将模型实例映射存储至MongoDB;
前置匹配装置,用于利用MongoDB的查询操作,在MongoDB中查找模型实例中符合所述转换规则的前置条件的模型实例片段;
规则转换装置,用于依据所述转换规则的定义,对前置匹配装置得到的模型实例片段执行相应的MongoDB插入、更新和删除操作实现模型转换,得到转换后的模型实例输出;
所述元模型为由类型节点和类型关联关系组成有向图;所述模型实例为由类型实例和关联实例组成的有向图;所述转换规则包括前置条件、后置条件、前后映射关系;所述前置条件和所述后置条件为符合所述元模型定义的有向图;所述前后映射关系用以表示所述前置条件至所述后置条件的映射关系;
所述规则转换装置包括:
装置M51,用于根据所述前后映射关系,找出所述前置条件中存在而所述后置条件中不存在的类型节点集合Del;
装置M52,用于根据所述前后映射关系,找出所述前置条件中不存在而所述后置条件中存在的类型节点集合Ins;
装置M53,用于通过MongoDB的删除操作,在步骤S4得到的模型实例片段中删除类型节点集合Del中类型节点所对应的类型实例;
装置M54,用于创建类型节点集合Ins中类型节点所对应的类型实例,并通过MongoDB的插入和更新操作,将创建的类型实例加入至模型实例片段中。
5.如权利要求4所述的基于MongoDB实现图转换的装置,其特征在于,述转换规则还包括否定性条件;所述否定性条件是转换规则不能被应用的条件;所述前置匹配装置还包括:
否定性条件检查装置,用于剔除满足所述否定性条件的模型实例片段。
6.如权利要求4所述的基于MongoDB实现图转换的装置,其特征在于,所述前置匹配装置包括:
连通拆分装置,用于将所述前置条件划分成k个连通子图;
节点匹配装置,用于对各个连通子图中的各个类型节点,在MongoDB中查找符合类型节点的约束条件的类型实例;
实例合并装置,用于对节点匹配装置得到类型实例做笛卡尔乘积运算后组成模型实例片段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510241080.4A CN104794244B (zh) | 2015-05-13 | 2015-05-13 | 一种基于MongoDB实现图转换的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510241080.4A CN104794244B (zh) | 2015-05-13 | 2015-05-13 | 一种基于MongoDB实现图转换的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104794244A CN104794244A (zh) | 2015-07-22 |
CN104794244B true CN104794244B (zh) | 2018-02-16 |
Family
ID=53559036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510241080.4A Active CN104794244B (zh) | 2015-05-13 | 2015-05-13 | 一种基于MongoDB实现图转换的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104794244B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183817A (zh) * | 2015-08-27 | 2015-12-23 | 北京时代焦点国际教育咨询有限责任公司 | 一种基于领域驱动设计的题库建模方法及系统 |
CN106126543B (zh) * | 2016-06-15 | 2019-09-03 | 清华大学 | 一种关系型数据库到MongoDB的模型转换和数据迁移方法 |
CN108073590A (zh) * | 2016-11-10 | 2018-05-25 | 北京国双科技有限公司 | 文档数据库的管理方法和装置 |
CN109408601B (zh) * | 2018-09-19 | 2020-09-22 | 智器云南京信息科技有限公司 | 基于图数据的数据模型转换方法及图数据结构转换器 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609464A (zh) * | 2012-01-16 | 2012-07-25 | 北京亿赞普网络技术有限公司 | Mongodb分片联表查询方法及装置 |
GB2496173A (en) * | 2011-11-04 | 2013-05-08 | Performance Horizon Group | Database system for manipulating data |
CN103530327A (zh) * | 2013-09-25 | 2014-01-22 | 清华大学深圳研究生院 | 一种从非关系型数据库到关系型数据库的数据迁移方法 |
-
2015
- 2015-05-13 CN CN201510241080.4A patent/CN104794244B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2496173A (en) * | 2011-11-04 | 2013-05-08 | Performance Horizon Group | Database system for manipulating data |
CN102609464A (zh) * | 2012-01-16 | 2012-07-25 | 北京亿赞普网络技术有限公司 | Mongodb分片联表查询方法及装置 |
CN103530327A (zh) * | 2013-09-25 | 2014-01-22 | 清华大学深圳研究生院 | 一种从非关系型数据库到关系型数据库的数据迁移方法 |
Non-Patent Citations (1)
Title |
---|
"基于MongoDB的矢量空间数据云存储与处理系统";雷德龙等;《地球信息科学学报》;20140731;第507-516页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104794244A (zh) | 2015-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108052321B (zh) | 一种基于配置信息自动生成区块链智能合约的方法 | |
CN100468396C (zh) | 用于任意数据模型的映射体系结构 | |
CN104504001B (zh) | 面向海量分布式关系数据库的游标构造方法 | |
US8762934B2 (en) | Method of extensible business object modeling and generation of system artifacts from the models | |
CN104794244B (zh) | 一种基于MongoDB实现图转换的方法和装置 | |
CN102254029B (zh) | 一种基于视图的数据访问系统及其方法 | |
US8510341B2 (en) | System, method and structures for a reusable custom-defined nestable compound data type for construction of database objects | |
US8341191B2 (en) | Methods and structures for utilizing reusable custom-defined nestable compound data types to permit product variations within an existing taxonomy | |
US20140304214A1 (en) | Navigable semantic network definition, modeling, and use | |
US9495475B2 (en) | Method of representing an XML schema definition and data within a relational database management system using a reusable custom-defined nestable compound data type | |
CN105912595A (zh) | 一种关系数据库的数据起源收集方法 | |
CN103559189B (zh) | 基于元数据集成模型的电力仿真培训资源管理系统及方法 | |
CN105446966A (zh) | 生成关系数据转换为rdf格式数据的映射规则的方法和装置 | |
CN103927360A (zh) | 基于图模型的软件项目语义信息表示及检索方法 | |
Bumans | Mapping between Relational Databases and OWL Ontologies: an example | |
CN107515887A (zh) | 一种适用于多种大数据管理系统的交互式查询方法 | |
CN104778236A (zh) | 一种基于元数据的etl实现方法及系统 | |
US20140280026A1 (en) | Method and Structure for Managing Multiple Electronic Forms and Their Records Using a Static Database | |
CN104077121A (zh) | 一种实现和管理状态机信息的装置 | |
CN109376153A (zh) | 一种基于NiFi的数据写入图数据库的系统及方法 | |
US8495055B2 (en) | Method and computer program for evaluating database queries involving relational and hierarchical data | |
Le et al. | Domain-driven design using meta-attributes: A DSL-based approach | |
CN105760418A (zh) | 用于对关系数据库表进行交叉列搜索的方法和系统 | |
CN103902651B (zh) | 一种基于MongoDB的云端代码查询方法与装置 | |
CN107273425A (zh) | 一种基于orm框架的数据库开发方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |