CN104636265B - 一种cimxml文档的高效内存模型组织的访问方法 - Google Patents
一种cimxml文档的高效内存模型组织的访问方法 Download PDFInfo
- Publication number
- CN104636265B CN104636265B CN201510031550.4A CN201510031550A CN104636265B CN 104636265 B CN104636265 B CN 104636265B CN 201510031550 A CN201510031550 A CN 201510031550A CN 104636265 B CN104636265 B CN 104636265B
- Authority
- CN
- China
- Prior art keywords
- electric power
- attribute
- type
- power object
- cimobjdata
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种CIMXML文档的高效内存模型组织的访问方法,包括如下步骤:(1)构造CIMXML文档的内存模型,包括:对每个电力对象以一个统一的内存结构描述;以及,对每一种电力对象类型建立一个内存结构描述;(2)对所述内存模型进行访问。本发明由属性名定位属性值的过程的执行效率将不再与所访问的对象数量以及属性数量有关,而是一个可以忽略的固定时间,从而极大提高了批量对象数据的访问效率。解决当前CIMXML文档内存模型组织方法内存占用过大,按类型批量访问效率过低的问题。
Description
技术领域
本发明涉及CIMXML文档解析结果的内存表示,具体来说涉及提供一种能够实现对大规模CIMXML文档的低空间占用的内存模型的高效访问方法。
背景技术
CIM是公共信息模型(CommonInformationModel),一个综合的电力***管理过程信息模型,可以满足电力***管理与信息交换的大部分应用的需要。
XML是可扩展标记语言(eXtensibleMarkupLanguage)。是标准通用标记语言SGML(StandardGeneralizedMarkupLanguage)的一个子集,是针对Web应用的元标记语言,可以用来定义各种应用领域的标记词汇,可以用来表达各种类型的数据/信息。
CIMXML是一种使用标准的XML对CIM模型进行描述的格式。
在电力企业应用集成领域,IEC61970和IEC61968标准提供了良好的应用集成框架和基础信息模型——IECTC57公共信息模型(CommonInformationModel,CIM)。CIM是一个综合的电力***管理过程信息模型,可以满足电力***管理与信息交换的大部分应用的需要。
CIM是电力***的一个逻辑模型,描绘电力***运行管理中涉及的各种对象的类型、这些类型所具有的性质以及它们之间的关系。所以,CIM描绘的是模式(Schema)信息,或元数据(metadata)模型,具体的电力***数据模型是它的实例。IEC61970-452CIMModelExchangeSpec(CIM模型交换规范)规定了定义特殊的电力***模型交换所要求的CIM子集的指南。IEC61970-503CIMXMLModelExchangeFormat定义的CIMXML格式可以用来传输特定CIM子集的电力***模型。
CIMXML是一种使用标准的XML(可扩展标记语言,eXtensibleMarkupLanguage)对CIM模型进行描述的格式,XML是标准通用标记语言SGML(StandardGeneralizedMarkupLanguage)的一个子集,是针对Web应用的元标记语言,可以用来定义各种应用领域的标记词汇,可以用来表达各种类型的数据/信息。但是,XML本身并不解决如何描绘应用领域知识本体(Ontology)的问题,也就是web上信息(数据、知识)模型的定义问题。W3CRDF(ResourceDescriptionFramework)就是用来描绘Web资源及其性质的信息的一种数据定义语言。如果把Web资源的概念扩展为任何可以用URI标识的东西,那么,它们的信息都可以用RDF来描绘。RDF通常采用XML语法表达,可以作为各种应用程序和***的互操作的基础。
在电力企业应用集成领域进行电力信息***交换时,如何高效的对CIMXML文档进行处理是其中一个关键的技术课题,国内外许多电力厂商及电力科研机构都对此问题进行了研究,提出了各自的解决方案。
现有技术之一使用标准的XMLDOM处理器,使用XML的DOM解析器进行解析,解析结果直接使用DOM内存模型。XMLDOM是XMLDocumentObjectModel的缩写,即XML文档对象模型。DOM将XML文档作为一个树形结构,而树叶被定义为节点。
XMLDOM把XML文档视为一种树结构。这种树结构被称为节点树。XMLDOM内存模型严格按照XML节点树模型进行映射,可通过这棵树访问所有节点。可以修改或删除它们的内容,也可以创建新的元素。这颗节点树展示了节点的集合,以及它们之间的联系。这棵树从根节点开始,然后在树的最低层级向文本节点长出枝条。节点树中的节点彼此之间都有等级关系。父、子和同级节点用于描述这种关系。父节点拥有子节点,位于相同层级上的子节点称为同级节点(兄弟或姐妹)。
XMLDOM内存模型组织方式的缺点之一在于其树形组织结构,由于大部分情形下,XML元素本身的上下层级结构与XML文档描述的业务模型并不一致,而XMLDOM模型却为了维持XML节点间的层次关系不仅付出了巨大的内存占用开销,而且在构建过程中需要为这种上下层级关系建立索引,还增加了运行时开销。经实际测试,一个CIMXML模型的DOM内存描述有可能高达其文本描述大小的10倍以上。
XMLDOM内存模型组织方式的缺点之二在于其内存中对与XML节点本身的属性-取值映射表采用数组构建方式构建,而导致提供对特定属性的访问时,只能采用逐个比较属性名的方式获取对应取值,这种方式,固然降低解析构建过程建立属性名到属性取值的映射的运行开销,但是在对XML节点遍历并获取节点属性时,导致效率低下。
XMLDOM内存模型组织方式的最大缺点在于它仅仅是一个通用的XML内存模型,其组织并未考虑CIMXML所描述的电力数据本身的特点,这样就导致在最终使用时,对电力对象属性取值按类型批量访问的效率低下。例如在遍历某种类型的所有电力对象的某个或几个属性时,需要遍历整个DOM节点树,首先找到目标类型的所有电力对象的XML节点,然后解析这些XML节点得到一个电力对象的完整描述,然后再从中抽取目标属性的取值,显然,这一方式的执行效率是很低的。
另外一种常见的方式是根据XMLDOM方式的弱点,进行进一步的优化而得到解决方案。其做法是在解析阶段采用更高效的XMLSAX解析方式,而内存模型采用对应于CIMXML特点的{电力对象标识,Map<属性名,取值>}的内存组织方式。
XMLSAX(SimpleAPIforXML)解析方式是一种XMLDOM解析的替代方法。XMLSAX逐行扫描文档,一边扫描一边解析,但是它本身并不提供XML解析结果的内存描述。
在这种解决方案中,CIMXML文档解析的结果被以如下形式在内存中组织:
每个电力对象以一个统一的内存结构描述,这个内存结构组织形式为CIMXmlObj{电力对象URI标识,Map<属性名,取值>},即包含一个电力对象的URI标识,一个电力对象的属性名到其属性取值的映射。
每一种电力对象类型以一个统一的内存结构描述,这个内存结构组织为CIMXmlObjType{类型名字,Map<电力对象URI标识,CIMXmlObj>},即包含类型名字和一个本类型对象的URI标识到其内存描述的索引。
这种组织方式的缺点在于CIMXmlObj内存结构中的Map<属性名,取值>映射结构,这种将Map映射结构直接放置到对象级别的方式,引发两个问题,一个是内存效率问题,一个是属性取值按类型批量访问时效率低下问题。
首先,Map数据结构的特点是具有较高的搜索效率,而这是通过空间换时间的方式,为了加速查询效率,其内部Entry存储数组空闲较多,也即是占用更大的内存的方式来完成,而一个电网模型通常包含大量对象,例如,一个地区级输电网的对象数量都是百万级别,包含配电网描述对象时数量更大,这就会导致大量的内存浪费,换句话说,其内存占用过大。经实际测试,此种描述方式内存占用随着电力对象数量的增加(即CIMXmlObj数量增大)非线性增长,一个CIMXML模型的此种描述占用内存大小是其文本描述大小的5倍以上。
其次,此种内存模型组织方式下,电力对象属性取值按类型批量访问时效率仍然不高,在遍历某一类型的所有电力对象的某个或几个属性时,需要对CIMXmlObjType中Map<电力对象URI标识,CIMXmlObj>映射中的每个CIMXmlObj都应用从Map<属性名,取值>中使用属性名查询对应取值的过程,这一过程与对象数量和获取属性的个数的乘积成正比,即O(对象数量x属性数量),访问效率较低。
发明内容
本发明的目的在于主要解决当前CIMXML文档内存模型组织方法内存占用过大,按类型批量访问效率过低的问题。
本发明的目的可通过以下的技术措施来实现:
一种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结构中用此序号从属性取值数组中获取到对应属性的取值,因此,这一由属性名定位属性值的过程的执行效率将不再与所访问的对象数量以及属性数量有关,而是一个可以忽略的固定时间,从而极大提高了批量对象数据的访问效率。
本发明对比现有技术,有如下优点:
由于本方法并未牺牲单个对象属性取值的访问效率,而是保持了与现有技术二中方案相似的效率,都是一次由对象属性名查询对象属性取值映射过程,现有技术二中,是直接查询CIMXmlObj内存结构中的Map<属性名,取值>映射;而本优选方案是查询对应对象类型的CIMObjType结构中的Map<属性名,属性取值数组序号>映射。
本发明通过将电力对象的属性取值存储由Map结构更换为数组,并将属性名到属性取值的映射从单一电力对象结构中抽取到对象所属类型中两方面的改进,大大降低了CIMXML加载后占用内存的数量,并同时极大提高了电力数据批量读取的效率。
具体实施方式
本发明对CIMXML的解析采用高效的XMLSAX解析方式,在电力数据的内存模型组织方式上采用了一种高度优化的内存组织结构,其改进在于,所述方法包含如下步骤:
(1)每个电力对象以一个统一的内存结构描述
(2)每一种电力对象类型建立一个内存结构描述
本发明提供的优选技术方案中,在所述步骤1中,设计电力对象的这个内存结构组织形式为CIMObjData{电力对象URI标识,属性取值数组},即包含一个电力对象的URI标识,与电力对象所属类型在CIMXML文档中拥有的属性集一样大小的,一个用于存储电力对象的对应属性取值的数组。
所述CIMObjData结构的伪代码表示为:
在所述优选方案中,由于每个对象仅仅为保存对象数据分配了与对象所能拥有的属性(由其对象类型决定)集一样大小的内存,所以不存在任何内存浪费。经过实测,在基于Java语言的一个具体实现中,一个CIMXML模型的此种描述占用内存大小是其文本描述大小的1.5倍左右。
本发明提供的优选技术方案中,在所述步骤1中,设计电力对象类型这个内存结构组织为CIMObjType{类型名字,Map<电力对象URI标识,CIMObjData>,Map<属性名,属性取值数组序号>},即包含类型名字、一个本类型对象的URI标识到其内存描述的索引、以及一个本类型属性的名字AttriName到每个CIMObjData结构中属性取值数组中对应属性取值位置的序号AttriValArrayIndex之间的映射,这同时要求设定同一类型的每个电力对象的属性取值数组与属性的对应顺序是一致的。
即是说,本发明为CIMXML文档描述的电力对象构建一个如下所示的内存表格:
对象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 | |
… | … | … | … | … |
在所述优选方案中,进行对电力对象数据的批量访问时,在遍历一类型的所有对象的某个或几个属性时,仅需在遍历CIMObjType中Map<电力对象URI标识,CIMObjData>中的每个CIMObjData实例之前,针对每个属性执行一次针对CIMObjType结构中的Map<属性名,属性取值数组序号>的查询,得到对应属性在CIMObjData中的属性取值数组的序号,即可以在遍历过程中从每个CIMObjData结构中用此序号从属性取值数组中获取到对应属性的取值,因此,这一由属性名定位属性值的过程的执行效率将不再与所访问的对象数量以及属性数量有关,而是一个可以忽略的固定时间,从而极大提高了批量对象数据的访问效率。
需要注意的是,在所述优选方案中,并未牺牲单个对象属性取值的访问效率,而是保持了与现有技术二中方案相似的效率,都是一次由对象属性名查询对象属性取值映射过程,现有技术二中,是直接查询CIMXmlObj内存结构中的Map<属性名,取值>映射;而本优选方案是查询对应对象类型的CIMObjType结构中的Map<属性名,属性取值数组序号>映射。
本发明对比现有技术,有如下优点:
本发明通过将电力对象的属性取值存储由Map结构更换为数组,并将属性名到属性取值的映射从单一电力对象结构中抽取到对象所属类型中两方面的改进,大大降低了CIMXML加载后占用内存的数量,并同时极大提高了电力数据批量读取的效率。
本发明的实施方式不限于此,在本发明上述基本技术思想前提下,按照本领域的普通技术知识和惯用手段对本发明内容所做出其它多种形式的修改、替换或变更,均落在本发明权利保护范围之内。
Claims (1)
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结构中用此序号从属性取值数组中获取到对应属性的取值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510031550.4A CN104636265B (zh) | 2015-01-21 | 2015-01-21 | 一种cimxml文档的高效内存模型组织的访问方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510031550.4A CN104636265B (zh) | 2015-01-21 | 2015-01-21 | 一种cimxml文档的高效内存模型组织的访问方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104636265A CN104636265A (zh) | 2015-05-20 |
CN104636265B true CN104636265B (zh) | 2016-04-27 |
Family
ID=53215046
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510031550.4A Active CN104636265B (zh) | 2015-01-21 | 2015-01-21 | 一种cimxml文档的高效内存模型组织的访问方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104636265B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106469137A (zh) * | 2015-08-19 | 2017-03-01 | 互联网域名***北京市工程研究中心有限公司 | Xml文档解析方法及装置 |
CN107451188A (zh) * | 2017-06-26 | 2017-12-08 | 中国电力科学研究院 | 一种电网调控模型数据多级节点组合的发布方法及*** |
CN107463374B (zh) * | 2017-07-11 | 2021-02-23 | 中国电力科学研究院有限公司 | 一种基于继承和关联自动推演的子集模型抽取方法及*** |
CN112000851B (zh) * | 2020-08-28 | 2023-03-28 | 北京计算机技术及应用研究所 | 一种键值模型、文档模型和图模型数据的统一存储方法 |
CN112650892A (zh) * | 2020-12-30 | 2021-04-13 | 广东电网有限责任公司电力科学研究院 | 基于cim对象分类的树形数据加载方法、装置、存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693129A (zh) * | 2012-04-28 | 2012-09-26 | 广东电网公司电力科学研究院 | Iec61850到61970的模型转换方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2349905A1 (en) * | 2001-06-07 | 2002-12-07 | Ibm Canada Limited-Ibm Canada Limitee | System and method of mapping between software objects and structured language element based documents |
-
2015
- 2015-01-21 CN CN201510031550.4A patent/CN104636265B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693129A (zh) * | 2012-04-28 | 2012-09-26 | 广东电网公司电力科学研究院 | Iec61850到61970的模型转换方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104636265A (zh) | 2015-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sevilla Ruiz et al. | Inferring versioned schemas from NoSQL databases and its applications | |
CN110837492B (zh) | 一种多源数据统一sql提供数据服务的方法 | |
CN107291807B (zh) | 一种基于图遍历的sparql查询优化方法 | |
CN104160394B (zh) | 用于半结构化数据的可缩放分析平台 | |
CN104636265B (zh) | 一种cimxml文档的高效内存模型组织的访问方法 | |
Vajk et al. | Denormalizing data into schema-free databases | |
CN104346377A (zh) | 一种基于唯一标识的数据集成和交换方法 | |
CN101566988A (zh) | 一种模糊语义搜索方法、***及设备 | |
Krijnen et al. | A SPARQL query engine for binary-formatted IFC building models | |
CN103246719B (zh) | 一种基于Web的网络信息资源整合方法 | |
CN104462161A (zh) | 基于分布式数据库的结构化数据查询方法 | |
CN101710336A (zh) | 一种利用关系中间件加速数据处理的方法 | |
CN105138674B (zh) | 一种数据库访问方法 | |
CN114564482A (zh) | 一种面向多实体的标签***及处理方法 | |
CN101216851A (zh) | 一种本体数据(Ontology)管理***和方法 | |
CN115757810A (zh) | 一种知识图谱标准本体构建方法 | |
Graube et al. | Integrating industrial middleware in linked data collaboration networks | |
Abbas et al. | Bridging Property Graphs and RDF for IoT Information Management. | |
CN101719162A (zh) | 基于片段模式匹配的多版本开放式地理信息服务访问方法及*** | |
CN101504660A (zh) | 一种纯扩展标记语言数据库的查询管理方法及其*** | |
CN106909645B (zh) | 一种可扩展定义的时空数据统一组织方法 | |
CN114880483A (zh) | 一种元数据知识图谱构建方法、存储介质及*** | |
CN110321456B (zh) | 一种海量不确定xml近似查询方法 | |
Zhang et al. | Semantic web and geospatial unique features based geospatial data integration | |
Zhang et al. | Storing fuzzy description logic ontology knowledge bases in fuzzy relational databases |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200408 Address after: 510080 Dongfeng East Road, Dongfeng, Guangdong, Guangzhou, Zhejiang Province, No. 8 Patentee after: Electric Power Research Institute of Guangdong Power Grid Co.,Ltd. Address before: 510080 Dongfeng East Road, Dongfeng, Guangdong, Guangzhou, Zhejiang Province, No. 8 Co-patentee before: WEIHAI CIMSTECH Co.,Ltd. Patentee before: Electric Power Research Institute of Guangdong Power Grid Co.,Ltd. |
|
TR01 | Transfer of patent right |