一种CIMXML文档的高效内存模型组织的访问方法转让专利

申请号 : CN201510031550.4

文献号 : CN104636265B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 谢善益杨强高雅王红斌周刚杜双育翟瑞聪范颖梁成辉徐庆平

申请人 : 广东电网有限责任公司电力科学研究院威海欣智信息科技有限公司

摘要 :

本发明提供一种CIMXML文档的高效内存模型组织的访问方法,包括如下步骤:(1)构造CIMXML文档的内存模型,包括:对每个电力对象以一个统一的内存结构描述;以及,对每一种电力对象类型建立一个内存结构描述;(2)对所述内存模型进行访问。本发明由属性名定位属性值的过程的执行效率将不再与所访问的对象数量以及属性数量有关,而是一个可以忽略的固定时间,从而极大提高了批量对象数据的访问效率。解决当前CIMXML文档内存模型组织方法内存占用过大,按类型批量访问效率过低的问题。

权利要求 :

1.一种CIMXML文档的高效内存模型组织的访问方法,其特征在于包括如下步骤:

(1)构造CIMXML文档的内存模型,包括:对每个电力对象以一个统一的内存结构描述;

以及,对每一种电力对象类型建立一个内存结构描述;

其中,设计电力对象的这个内存结构组织形式为CIMObjData{电力对象URI标识,属性取值数组},即包含一个电力对象的URI标识,与电力对象所属类型在CIMXML文档中拥有的属性集一样大小的,一个用于存储电力对象的对应属性取值的数组;

其中,设计电力对象类型这个内存结构组织为CIMObjType{类型名字,Map<电力对象URI标识,CIMObjData>,Map<属性名,属性取值数组序号>},即包含类型名字、一个本类型对象的URI标识到其内存描述的索引、以及一个本类型属性的名字AttriName到每个CIMObjData结构中属性取值数组中对应属性取值位置的序号AttriValArrayIndex之间的映射,设定同一类型的每个电力对象的属性取值数组与属性的对应顺序是一致的;

(2)对所述内存模型进行访问:进行对电力对象数据的批量访问时,在遍历一类型的所有对象的某个或几个属性时,在遍历CIMObjType中Map<电力对象URI标识,CIMObjData>中的每个CIMObjData实例之前,针对每个属性执行一次针对CIMObjType结构中的Map<属性名,属性取值数组序号>的查询,得到对应属性在CIMObjData中的属性取值数组的序号,在遍历过程中从每个CIMObjData结构中用此序号从属性取值数组中获取到对应属性的取值。

说明书 :

一种CIMXML文档的高效内存模型组织的访问方法

技术领域

[0001] 本发明涉及CIMXML文档解析结果的内存表示,具体来说涉及提供一种能够实现对大规模CIMXML文档的低空间占用的内存模型的高效访问方法。

背景技术

[0002] CIM是公共信息模型(Common Information Model),一个综合的电力系统管理过程信息模型,可以满足电力系统管理与信息交换的大部分应用的需要。
[0003] XML是可扩展标记语言(eXtensible Markup Language)。是标准通用标记语言SGML(Standard Generalized Markup Language)的一个子集,是针对Web应用的元标记语言,可以用来定义各种应用领域的标记词汇,可以用来表达各种类型的数据/信息。
[0004] CIM XML是一种使用标准的XML对CIM模型进行描述的格式。
[0005] 在电力企业应用集成领域,IEC 61970和IEC 61968标准提供了良好的应用集成框架和基础信息模型——IEC TC57公共信息模型(Common Information Model,CIM)。CIM是一个综合的电力系统管理过程信息模型,可以满足电力系统管理与信息交换的大部分应用的需要。
[0006] CIM是电力系统的一个逻辑模型,描绘电力系统运行管理中涉及的各种对象的类型、这些类型所具有的性质以及它们之间的关系。所以,CIM描绘的是模式(Schema)信息,或元数据(metadata)模型,具体的电力系统数据模型是它的实例。IEC 61970-452CIM Model Exchange Spec(CIM模型交换规范)规定了定义特殊的电力系统模型交换所要求的CIM子集的指南。IEC 61970-503CIM XML Model Exchange Format定义的CIM XML格式可以用来传输特定CIM子集的电力系统模型。
[0007] CIM XML是一种使用标准的XML(可扩展标记语言,eXtensible Markup Language)对CIM模型进行描述的格式,XML是标准通用标记语言SGML(Standard Generalized Markup Language)的一个子集,是针对Web应用的元标记语言,可以用来定义各种应用领域的标记词汇,可以用来表达各种类型的数据/信息。但是,XML本身并不解决如何描绘应用领域知识本体(Ontology)的问题,也就是web上信息(数据、知识)模型的定义问题。W3C RDF(Resource Description Framework)就是用来描绘Web资源及其性质的信息的一种数据定义语言。如果把Web资源的概念扩展为任何可以用URI标识的东西,那么,它们的信息都可以用RDF来描绘。RDF通常采用XML语法表达,可以作为各种应用程序和系统的互操作的基础。
[0008] 在电力企业应用集成领域进行电力信息系统交换时,如何高效的对CIM XML文档进行处理是其中一个关键的技术课题,国内外许多电力厂商及电力科研机构都对此问题进行了研究,提出了各自的解决方案。
[0009] 现有技术之一使用标准的XML DOM处理器,使用XML的DOM解析器进行解析,解析结果直接使用DOM内存模型。XML DOM是XML Document Object Model的缩写,即XML文档对象模型。DOM将XML文档作为一个树形结构,而树叶被定义为节点。
[0010] XML DOM把XML文档视为一种树结构。这种树结构被称为节点树。XML DOM内存模型严格按照XML节点树模型进行映射,可通过这棵树访问所有节点。可以修改或删除它们的内容,也可以创建新的元素。这颗节点树展示了节点的集合,以及它们之间的联系。这棵树从根节点开始,然后在树的最低层级向文本节点长出枝条。节点树中的节点彼此之间都有等级关系。父、子和同级节点用于描述这种关系。父节点拥有子节点,位于相同层级上的子节点称为同级节点(兄弟或姐妹)。
[0011] XML DOM内存模型组织方式的缺点之一在于其树形组织结构,由于大部分情形下,XML元素本身的上下层级结构与XML文档描述的业务模型并不一致,而XML DOM模型却为了维持XML节点间的层次关系不仅付出了巨大的内存占用开销,而且在构建过程中需要为这种上下层级关系建立索引,还增加了运行时开销。经实际测试,一个CIM XML模型的DOM内存描述有可能高达其文本描述大小的10倍以上。
[0012] XML DOM内存模型组织方式的缺点之二在于其内存中对与XML节点本身的属性-取值映射表采用数组构建方式构建,而导致提供对特定属性的访问时,只能采用逐个比较属性名的方式获取对应取值,这种方式,固然降低解析构建过程建立属性名到属性取值的映射的运行开销,但是在对XML节点遍历并获取节点属性时,导致效率低下。
[0013] XML DOM内存模型组织方式的最大缺点在于它仅仅是一个通用的XML内存模型,其组织并未考虑CIM XML所描述的电力数据本身的特点,这样就导致在最终使用时,对电力对象属性取值按类型批量访问的效率低下。例如在遍历某种类型的所有电力对象的某个或几个属性时,需要遍历整个DOM节点树,首先找到目标类型的所有电力对象的XML节点,然后解析这些XML节点得到一个电力对象的完整描述,然后再从中抽取目标属性的取值,显然,这一方式的执行效率是很低的。
[0014] 另外一种常见的方式是根据XML DOM方式的弱点,进行进一步的优化而得到解决方案。其做法是在解析阶段采用更高效的XML SAX解析方式,而内存模型采用对应于CIM XML特点的{电力对象标识,Map<属性名,取值>}的内存组织方式。
[0015] XML SAX(Simple API for XML)解析方式是一种XML DOM解析的替代方法。XML SAX逐行扫描文档,一边扫描一边解析,但是它本身并不提供XML解析结果的内存描述。
[0016] 在这种解决方案中,CIM XML文档解析的结果被以如下形式在内存中组织:
[0017] 每个电力对象以一个统一的内存结构描述,这个内存结构组织形式为CIMXmlObj{电力对象URI标识,Map<属性名,取值>},即包含一个电力对象的URI标识,一个电力对象的属性名到其属性取值的映射。
[0018] 每一种电力对象类型以一个统一的内存结构描述,这个内存结构组织为CIMXmlObjType{类型名字,Map<电力对象URI标识,CIMXmlObj>},即包含类型名字和一个本类型对象的URI标识到其内存描述的索引。
[0019] 这种组织方式的缺点在于CIMXmlObj内存结构中的Map<属性名,取值>映射结构,这种将Map映射结构直接放置到对象级别的方式,引发两个问题,一个是内存效率问题,一个是属性取值按类型批量访问时效率低下问题。
[0020] 首先,Map数据结构的特点是具有较高的搜索效率,而这是通过空间换时间的方式,为了加速查询效率,其内部Entry存储数组空闲较多,也即是占用更大的内存的方式来完成,而一个电网模型通常包含大量对象,例如,一个地区级输电网的对象数量都是百万级别,包含配电网描述对象时数量更大,这就会导致大量的内存浪费,换句话说,其内存占用过大。经实际测试,此种描述方式内存占用随着电力对象数量的增加(即CIMXmlObj数量增大)非线性增长,一个CIM XML模型的此种描述占用内存大小是其文本描述大小的5倍以上。
[0021] 其次,此种内存模型组织方式下,电力对象属性取值按类型批量访问时效率仍然不高,在遍历某一类型的所有电力对象的某个或几个属性时,需要对CIMXmlObjType中Map<电力对象URI标识,CIMXmlObj>映射中的每个CIMXmlObj都应用从Map<属性名,取值>中使用属性名查询对应取值的过程,这一过程与对象数量和获取属性的个数的乘积成正比,即O(对象数量x属性数量),访问效率较低。

发明内容

[0022] 本发明的目的在于主要解决当前CIM XML文档内存模型组织方法内存占用过大,按类型批量访问效率过低的问题。
[0023] 本发明的目的可通过以下的技术措施来实现:
[0024] 一种CIMXML文档的高效内存模型组织的访问方法,包括如下步骤:
[0025] (1)构造CIMXML文档的内存模型,包括:对每个电力对象以一个统一的内存结构描述;以及,对每一种电力对象类型建立一个内存结构描述;
[0026] 其中,设计电力对象的这个内存结构组织形式为CIMObjData{电力对象URI标识,属性取值数组},即包含一个电力对象的URI标识,与电力对象所属类型在CIMXML文档中拥有的属性集一样大小的,一个用于存储电力对象的对应属性取值的数组;
[0027] 其中,设计电力对象类型这个内存结构组织为CIMObjType{类型名字,Map<电力对象URI标识,CIMObjData>,Map<属性名,属性取值数组序号>},即包含类型名字、一个本类型对象的URI标识到其内存描述的索引、以及一个本类型属性的名字AttriName到每个CIMObjData结构中属性取值数组中对应属性取值位置的序号AttriValArrayIndex之间的映射,这同时要求设定同一类型的每个电力对象的属性取值数组与属性的对应顺序是一致的;
[0028] (2)对所述内存模型进行访问:进行对电力对象数据的批量访问时,在遍历一类型的所有对象的某个或几个属性时,仅需在遍历CIMObjType中Map<电力对象URI标识,CIMObjData>中的每个CIMObjData实例之前,针对每个属性执行一次针对CIMObjType结构中的Map<属性名,属性取值数组序号>的查询,得到对应属性在CIMObjData中的属性取值数组的序号,即可以在遍历过程中从每个CIMObjData结构中用此序号从属性取值数组中获取到对应属性的取值,因此,这一由属性名定位属性值的过程的执行效率将不再与所访问的对象数量以及属性数量有关,而是一个可以忽略的固定时间,从而极大提高了批量对象数据的访问效率。
[0029] 本发明对比现有技术,有如下优点:
[0030] 由于本方法并未牺牲单个对象属性取值的访问效率,而是保持了与现有技术二中方案相似的效率,都是一次由对象属性名查询对象属性取值映射过程,现有技术二中,是直接查询CIMXmlObj内存结构中的Map<属性名,取值>映射;而本优选方案是查询对应对象类型的CIMObjType结构中的Map<属性名,属性取值数组序号>映射。
[0031] 本发明通过将电力对象的属性取值存储由Map结构更换为数组,并将属性名到属性取值的映射从单一电力对象结构中抽取到对象所属类型中两方面的改进,大大降低了CIMXML加载后占用内存的数量,并同时极大提高了电力数据批量读取的效率。

具体实施方式

[0032] 本发明对CIM XML的解析采用高效的XML SAX解析方式,在电力数据的内存模型组织方式上采用了一种高度优化的内存组织结构,其改进在于,所述方法包含如下步骤:
[0033] (1)每个电力对象以一个统一的内存结构描述
[0034] (2)每一种电力对象类型建立一个内存结构描述
[0035] 本发明提供的优选技术方案中,在所述步骤1中,设计电力对象的这个内存结构组织形式为CIMObjData{电力对象URI标识,属性取值数组},即包含一个电力对象的URI标识,与电力对象所属类型在CIMXML文档中拥有的属性集一样大小的,一个用于存储电力对象的对应属性取值的数组。
[0036] 所述CIMObjData结构的伪代码表示为:
[0037]
[0038] 在所述优选方案中,由于每个对象仅仅为保存对象数据分配了与对象所能拥有的属性(由其对象类型决定)集一样大小的内存,所以不存在任何内存浪费。经过实测,在基于Java语言的一个具体实现中,一个CIM XML模型的此种描述占用内存大小是其文本描述大小的1.5倍左右。
[0039] 本发明提供的优选技术方案中,在所述步骤1中,设计电力对象类型这个内存结构组织为CIMObjType{类型名字,Map<电力对象URI标识,CIMObjData>,Map<属性名,属性取值数组序号>},即包含类型名字、一个本类型对象的URI标识到其内存描述的索引、以及一个本类型属性的名字AttriName到每个CIMObjData结构中属性取值数组中对应属性取值位置的序号AttriValArrayIndex之间的映射,这同时要求设定同一类型的每个电力对象的属性取值数组与属性的对应顺序是一致的。
[0040] 即是说,本发明为CIM XML文档描述的电力对象构建一个如下所示的内存表格:
[0041]对象URI标识 AttriName1 AttriName2 AttriName3 …
Obj_URI_1 Attri_1_val Attri_2_val Attri_3_val …
Obj_URI_2 Attri_1_val2 Attri_2_val2 Attri_3_val2