CN104765694B - 一种可配置合并取值的cim内存库加载方法 - Google Patents
一种可配置合并取值的cim内存库加载方法 Download PDFInfo
- Publication number
- CN104765694B CN104765694B CN201510119962.3A CN201510119962A CN104765694B CN 104765694 B CN104765694 B CN 104765694B CN 201510119962 A CN201510119962 A CN 201510119962A CN 104765694 B CN104765694 B CN 104765694B
- Authority
- CN
- China
- Prior art keywords
- attribute
- string
- mapping table
- value
- character string
- 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
本发明的目的在于提供一种可配置合并取值的CIM内存库加载方法,包括如下步骤:第一步:配置合并属性;第二步:配置属性分段规则;第三步:建立映射表;第四步:设置属性值;第五步:获取属性值。本方法可以在基本不影响效率的情况下,有效的减少基于CIM的面向对象内存库的资源占用,对于含义大量重复的字符串属性的电力模型尤其明显。内存占用的大幅减少使得重量级数据平台的内存库构建不再受过高的内存要求限制,能够进行快速业务分析和提供高速数据访问能力。
Description
技术领域
本发明涉及电力系统的数据处理方法,具体来说涉及一种可配置合并取值的CIM内存库加载方法。
背景技术
国际电工技术委员会IEC定义了一种电力系统通用信息模型CIM(CommonInformationModel,通用信息模型)。CIM提供了一个关于电力系统信息的全面逻辑视图,是一个代表电力企业所有主要对象的抽象模型,包括了这些对象的公有类和属性,以及它们之间的关系。
使用CIM描述电力系统数据使得每种业务对象都有了一个特定的类名,包含明确的属性和关联定义,便于对数据进行统一描述和管理,也使得将电力设备对象之间映射成面向对象编程语言中的内存对象成为可能。属性是CIM类中的字段。
在电力自动化分析等领域,将按照CIM组织的对象加载到内存中进行业务逻辑分析处理的作为已经很常见,但多数是轻量级模型,数据量在几十万对象,而百万甚至千万级的数据平台很少有通过内存库提高数据访问效率的做法。
按照CIM组织的电力系统数据有一定的数据特点和规律,例如一百万个设备的电压等级字段有一百万个值,但实际上只有“500kV”、“220kV”、“110kV”、“35kV”和“10kV”这六个取值,不需要占用一百万个字符串存储单元。有些属性取值很长,但可以分段,且但部分重复,例如对象的路径名,前半部分多数是重复的。针对这些规律可以找到一个存储与效率折中的加载方法,减少CIM内存库对资源占用,扩大CIM内存库的应用范围。
现有的方法是直接加载CIM模型中的属性值到内存中构建CIM内存库是最常用的方式,每一个有值的属性取值都会被分配一个存储单元。这样的方法对于大量取值相同或相近的字符串类属性值,占用大量的内存空间,内存使用量随着对象数呈线性增长,很难承受巨大的数据量。
另外一种方法是内存库中只做基本的初始化和内存存储,属性取值不存储在内存中,或者选择性存储,对大量占内存大的字符串类型属性不建立内存存储,当查询时动态向服务器或数据库查询,用于满足基于对象数据访问或者struts2等自动化框架对内存库的要求。实际上这种方法是一种假内存库,因为全部或部分属性没有保存在内存中,查询时需要反复与服务器进行交互,查询效率极低,只能满足有些界面显示或手动查询操作,很难对自动化分析业务提供支持。
发明内容
本发明的目的在于根据电力系统CIM模型数据的特点,发现数据重复的规律,设计出CIM内存库加载优化方案。本发明的可配置合并取值的CIM内存库加载方法将通过合并字符串类型属性中相同的取值,并将长字符串分段以多个对象引用来替代,实现内存的缩减。
本发明的目的可通过以下的技术措施来实现:
一种可配置合并取值的CIM内存库加载方法,包括如下步骤:
第一步:配置合并属性
根据数据特点,配置需要合并的属性。对于重复性高的属性,配置其需要合并属性值的标识,记录在配置文件中,以便后续步骤能够识别该属性是否需要进行取值合并。例如可将导电设备的voltageLevel属性设置为取值合并,则后续步骤再遇到导电设备的voltageLevel属性时会进行进一步处理。
第二步:配置属性分段规则
对于可根据明确规则分段的长字符串属性,将字符串分段后与其他对象的属性取值比较,重复的概率更高,则进行分段处理。属性分段处理需要配置分段规则。
属性的分段规则包括分隔符(如“/”)和分割点,即在第几段进行分隔比较。例如两个长字符串属性取值选择前6段比较和选择前4段比较重复的概率是不一样的,比较的段数越少,重复的概率越大,但剩余内容的重复性也越高。因此需要根据数据的特点选择最优的分隔点。根据分段规则可通过编程语言的字符串处理方法如String.split或String.substring对字符串进行分隔。
一个属性可以配置多个分隔点,这样一个字符串就被分隔成多个字符串进行比较、合并。
分割点配置示例如下:
IdentifiedObject.pathName/24
表示IdentifiedObject.pathName属性以“/”为分隔符,通过第二个和第四个分隔符将字符串分割成三段。
第三步:建立映射表
建立字符串属性取值内容到字符串内存对象的映射表,根据不同语言的特点,映射表采用哈希映射表或二叉树映射表,优选哈希映射表。
第四步:设置属性值
当为属性设置字符串取值时,若该属性设置了合并,则到第三步构造的映射表中查询是否存在该字符串取值的内存对象,如果存在,被设置的属性直接使用已存在的字符串内存对象;如果不存在,先向映射表中插入这个字符串内存对象,然后再让被设置的属性使用这个映射表中的字符串内存对象。
对于分段属性,首先根据要分的段数为属性申请数组。然后将要设置的字符串取值按配置的分段规则分隔成相应的段数,每一段到第三步构造的映射表中查询是否已存在相同的字符串。如果存在,则直接将映射表中的字符串内存对象放到数组中;如果不存在,先将本段字符串内存对象插入到映射表,同时存放在数组中。
第五步:获取属性值
对于设置了简单合并且不需要分段处理的属性,获取属性值时直接返回该属性使用的字符串内存对象即可。对于配置了分段处理的属性,需要将属性值数组中的分段字符串组合成新的字符串对象返回。
本发明对比现有技术,有如下优点:
本方法可以在基本不影响效率的情况下,有效的减少基于CIM的面向对象内存库的资源占用,对于含义大量重复的字符串属性的电力模型尤其明显。内存占用的大幅减少使得重量级数据平台的内存库构建不再受过高的内存要求限制,能够进行快速业务分析和提供高速数据访问能力。
具体实施方式
在数据结构存储中,数据类型可划分为对象引用、数字和字符串三大类。其中引用和数字的空间占用大小是固定的,一般为4或8个字节,而字符串是一个复合数据类型,里面包括一个字符序列的引用,一个数字型的长度和一个字符序列,在Java中一个字符占两个字节的存储空间。
因此最字符串属性的优化是降低内存使用率的重点,将大量重复字符串对象的引用指向同一对象,将长字符串拆分成对个对象的引用,可以节省大量内存;而将数字型转换成对象引用指向相同的数字对象,则基本没有意义,数组和引用的大小基本相同,反而会因为增加引用增大内存占用量。
下面详述本发明的方法的具体过程:
一种可配置合并取值的CIM内存库加载方法,包括如下步骤:
第一步:配置合并属性
根据数据特点,配置需要合并的属性。并不是所有的字符串类型属性都需要合并,如果重复率不高,合并只会降低系统性能,对内存优化不起作用。对于重复性高的属性,配置其需要合并属性值的标识,在内存库加载时,会自动将同样取值的对象指向同一内存区域。
第二步:配置属性分段规则
对于类似对象pathName属性这样的长字符串且可分段的属性,不能使用第一步的简单配置进行属性值合并。因为这种属性往往值不重复,但是字符串的大部分内容类似,需要分段处理。例如“惠州供电局/500kV祯州站/220kV/220kV祯铁甲线4708间隔/4708开关/A383/AvDsch/mon”和“惠州供电局/500kV祯州站/220kV/220kV祯铁甲线4708间隔/4708开关/A383/DschCnt/mon”,按“/”进行分段,只有一段不同,其他的全部相同。
属性分段规则包括分隔符,如“/”,和进行比较及合并的段数,例如上述的两个pathName选择前6段比较和选择前4段比较结果是不一样的,比较的段数越少,重复的概率越大,但剩余内容的重复性也越高。因此需要根据数据的特点选择最优的分隔点。
一个属性可以配置多个分隔点,这样一个字符串就被分隔成多个字符串进行比较、合并。
第三步:建立映射表
建立字符串内容到字符串对象的映射表,根据不同语言的特点,映射表可以是哈希映射表也可以是二叉树映射表等,为了提供访问效率,推荐使用哈希映射。
第四步:设置属性值
当为属性设置取值时,若该属性设置了合并,则到映射表中查询是否存在该字符串的对象,如果存在,被设置的属性引用直接指向已存在的字符串对象;如果不存在,先向映射表中插入这条记录,然后再让属性引用指向映射表中的字符串对象。
对于分段属性,首先根据要分的段数为属性申请数组,比如大小为2的数组。然后将字符串按配置的规则分隔成相应的段数,然后每一段到映射表中查询是否已存在相同的字符串。如果存在,则数组中的引用元素直接指向映射表中的字符串对象;如果不存在,先将本段字符串插入到映射表中,再将数组中的引用元素指向映射表中的字符串对象。
第五步:获取属性值
对于设置了简单合并的属性,获取属性值时直接返回其引用的字符串对象即可。对于配置了分段处理的属性,需要将属性中的数组组合成新的字符串对象返回。
属性的设置和获取操作过程都在构建内存库时自动生成在set和get方法中,对用户的使用是完全透明的,用户只需要根据数据的特点配置相应的合并规则。
本发明的实施方式不限于此,在本发明上述基本技术思想前提下,按照本领域的普通技术知识和惯用手段对本发明内容所做出其它多种形式的修改、替换或变更,均落在本发明权利保护范围之内。
Claims (1)
1.一种可配置合并取值的CIM内存库加载方法,其特征在于包括如下步骤:
第一步:配置合并属性
根据数据特点,配置需要合并的属性:对于重复性高的属性,配置该属性需要合并属性值的标识,记录在配置文件中;
第二步:配置属性分段规则
对于可根据明确规则分段的长字符串属性,如果长字符串分段后得到的字符串之间的比较比整个长字符串之间的直接比较具有更高的重复概率,则进行分段处理;
第三步:建立映射表
建立字符串属性取值内容到字符串内存对象的映射表,根据不同语言的特点,映射表采用哈希映射表或二叉树映射表;
第四步:设置属性值
当为字符串属性设置字符串取值时,若该属性设置了合并,则到第三步构造的映射表中查询是否存在该字符串取值的内存对象,如果存在,被设置的属性直接使用已存在的字符串内存对象;如果不存在,先向映射表中插入这个字符串内存对象,然后再让被设置的属性使用这个映射表中的字符串内存对象;
对于分段字符串属性,首先根据要分的段数为属性申请数组,然后将要设置的字符串取值按配置的分段规则分隔成相应的段数,每一段到第三步构造的映射表中查询是否已存在相同的字符串;如果存在,则直接将映射表中的字符串内存对象放到数组中;如果不存在,先将本段字符串内存对象插入到映射表,同时存放在数组中;
第五步:获取属性值
对于设置了简单合并且不需要分段处理的字符串属性,获取属性值时直接返回该属性使用的字符串内存对象即可;对于配置了分段处理的字符串属性,需要将属性值数组中的分段字符串组合成新的字符串对象返回。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510119962.3A CN104765694B (zh) | 2015-03-18 | 2015-03-18 | 一种可配置合并取值的cim内存库加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510119962.3A CN104765694B (zh) | 2015-03-18 | 2015-03-18 | 一种可配置合并取值的cim内存库加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104765694A CN104765694A (zh) | 2015-07-08 |
CN104765694B true CN104765694B (zh) | 2016-07-06 |
Family
ID=53647537
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510119962.3A Active CN104765694B (zh) | 2015-03-18 | 2015-03-18 | 一种可配置合并取值的cim内存库加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104765694B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101531B (zh) * | 2018-06-22 | 2022-05-31 | 联想(北京)有限公司 | 文件处理方法、装置及系统 |
CN110765218B (zh) * | 2019-10-25 | 2022-05-13 | 山东大学 | Cim类中复合型属性数据的关系数据库持久化配置方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663094A (zh) * | 2012-04-10 | 2012-09-12 | 国电南瑞科技股份有限公司 | Iec61970cim模型校验方法 |
CN103020281A (zh) * | 2012-12-27 | 2013-04-03 | 中国科学院计算机网络信息中心 | 一种基于空间数据数值索引的数据存储与检索方法 |
CN103164532A (zh) * | 2013-04-07 | 2013-06-19 | 广东电网公司电力科学研究院 | 电网模型数据的分类分块抽取方法及系统 |
CN103646111A (zh) * | 2013-12-25 | 2014-03-19 | 普元信息技术股份有限公司 | 大数据环境下实现实时数据关联的系统及方法 |
-
2015
- 2015-03-18 CN CN201510119962.3A patent/CN104765694B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663094A (zh) * | 2012-04-10 | 2012-09-12 | 国电南瑞科技股份有限公司 | Iec61970cim模型校验方法 |
CN103020281A (zh) * | 2012-12-27 | 2013-04-03 | 中国科学院计算机网络信息中心 | 一种基于空间数据数值索引的数据存储与检索方法 |
CN103164532A (zh) * | 2013-04-07 | 2013-06-19 | 广东电网公司电力科学研究院 | 电网模型数据的分类分块抽取方法及系统 |
CN103646111A (zh) * | 2013-12-25 | 2014-03-19 | 普元信息技术股份有限公司 | 大数据环境下实现实时数据关联的系统及方法 |
Non-Patent Citations (2)
Title |
---|
《基于CIM的内存实时数据库的设计》;薛艳芳等;《计算机工程与设计》;20070730;第28卷(第14期);3508-3510 * |
《支持CIM的实时对象数据库管理系统》;王宁等;《电力系统自动化》;20060825;第30卷(第16期);93-96,101 * |
Also Published As
Publication number | Publication date |
---|---|
CN104765694A (zh) | 2015-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105260403B (zh) | 通用跨数据库访问方法 | |
CN107291807B (zh) | 一种基于图遍历的sparql查询优化方法 | |
CN103218398B (zh) | 智能变电站scl文件差异性比较方法 | |
CN109299102A (zh) | 一种基于Elastcisearch的HBase二级索引系统及方法 | |
CN103412924B (zh) | 日志多语言查询方法和系统 | |
CN107657019B (zh) | 电网系统的网络拓扑结构获取方法和系统 | |
CN102426525B (zh) | 一种多应用系统的全景建模方法 | |
CN102663007B (zh) | 一种支持敏捷开发和横向扩展的数据存储与查询方法 | |
CN104504030B (zh) | 一种面向电力调度自动化海量报文的索引方法 | |
CN103678609A (zh) | 一种基于分布式关系-对象映射处理的大数据查询的方法 | |
CN104750825A (zh) | 一种智能变电站scd文件快速解析方法 | |
CN110019287B (zh) | 执行结构化查询语言sql指令的方法和装置 | |
CN104573022A (zh) | 一种HBase的数据查询方法及装置 | |
CN102915344B (zh) | 一种sql语句处理方法及装置 | |
CN105335479A (zh) | 一种基于sql的文本数据统计实现方法 | |
US20210406281A1 (en) | Data configuration query method and device | |
CN104765694B (zh) | 一种可配置合并取值的cim内存库加载方法 | |
CN103778212A (zh) | 基于数据节点的并行海量数据处理方法 | |
CN116500385B (zh) | 输电网监测校验方法、装置、设备和介质 | |
Lv et al. | Design of cloud data warehouse and its application in smart grid | |
CN104636265B (zh) | 一种cimxml文档的高效内存模型组织的访问方法 | |
CN104462095B (zh) | 一种查询语句公共部分的提取方法及装置 | |
CN109086331B (zh) | 主配网数据更新方法、装置与计算机可读存储介质 | |
Chen et al. | Multi-source and heterogeneous data integration model for big data analytics in power DCS | |
CN105159946A (zh) | 一种基于jQuery的表格排序方法及系统 |
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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200407 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. |