发明内容
本发明的目的是寻找另一种方法,不通过增加数据库资源,也不显著增加成本的情况上,提高数据库的访问性能。本方法不排斥背景技术中的上述三种常规方法,这几种方法可以共存,每采用一种方法,访问性能都会有所提升。
本发明提供了基于文件和数据库交换的电力系统仿真中心数据处理方法,包括以下步骤:
(1)用户第一次使用电力系统仿真中心时,需要通过仿真中心应用服务器提供的工具,将自己原有的作业数据导入到仿真中心,并首先存储在仿真中心数据库的磁盘文件中;
(2)用户的数据已经保存在仿真中心后,当用户进入仿真中心,打开一个工程的某个作业,准备进行工作时,系统首先判断这个作业是否已经装入仿真中心数据库中,如果所述作业已装入数据库则立即给用户使用;如果所述作业没有装入数据库,则需要将所述作业数据通过外部存储设备导入到仿真中心数据库中,然后允许用户使用;
(3)当一个作业数据从通过外部存储设备导入到仿真中心数据库之后,系统首先判断载入作业数量是否超过预定数量,如果超过预定数量,则将最早使用过的空闲的作业数据导出到外部存储设备中。
其中,所述步骤(1)中的作业数据包括电力系统仿真涉及的两大类数据:一类是电网基础模型数据(简称基础数据)、另一类是各种计算所需数据(简称计算数据);保存作业数据的仿真中心数据库的磁盘文件目录按用户、工程和作业来组织。
其中,所述步骤(2)中,判断作业是否已经装入仿真中心数据库,通过作业换入换出管理表来进行,所述作业换入换出管理表包括工程名、作业名以及作业状态,标明了作业是在仿真中心数据库中、换出到仿真中心数据库的磁盘文件中或者正在换入换出。
其中,所述步骤(3)中,系统设置一个数据库最大载入作业容量,当载入作业数超过该容量时,则导出最早使用过的空闲的作业,判断最早使用过的空闲的作业的方法是,当用户退出系统或离开一个作业时,将退出或离开时间写入到该作业在换入换出管理表的Out_time字段作为空闲时间,也即作业处于空闲的开始时间,系统将当前时间与每个作业的空闲时间进行比较,差值最大者就是最早空闲的作业,系统将最早空闲的作业数据导出到外部存储设备后,修改换入换出表的作业状态status为0。
其中,所述把空闲时间作为换入换出的策略是首先考虑作业的重要程度因素再考虑空闲时间因素,首先换出不重要的作业,其次换出比较重要的作业,对于特别重要的作业可以一直保存在仿真中心的数据库中。
其中,所述换入换出的策略可根据需求不同,对策略进行调整,但提高数据库性能的目标不变。
本发明技术方案的优点是:本发明实现的数据处理和数据存储方法,可以显著地减少当前数据库中保存的数据,极大地提高数据库访问性能。
具体实施方式
这里的“电力系统仿真”指的是通过电力系统模型和计算机软件算法来复现实际系统中发生的本质过程。
下面是对仿真中心数据库结构的基本介绍,通过将这些表中的数据与磁盘文件换入换出,可以将当前需要的数据保留在数据库中,暂时不需要的数据导出到磁盘文件中,减少数据表的当前记录数,提高数据库的访问性能。这些表只是电力系统仿真中心数据库的一部分,表的结构也是计算所需的一部分,不能真正满足实际需要,它只是用于理解本发明的方法,且不影响本发明的实现。
仿真数据库和数据表
电力系统仿真涉及的数据有两大类:一类是电网基础模型数据(简称基础数据)、另一类是各种计算所需数据(简称计算数据)。基础数据描述了电网的基本模型和参数信息以及必要的组织管理信息,它是形成各种计算数据的基础。计算数据又称为作业数据,是根据作业定义从基础数据抽取不同记录和不同参数,并增加了计算设置信息的一套数据,计算数据除了上述输入数据外,还包括计算结果数据。根据定义和设置信息的不同,同一种计算可以有多套不同的计算数据。计算数据包括潮流计算数据(简称潮流数据)、暂态稳定计算数据(简称暂稳数据)、小干扰计算数据、电压稳定计算数据等各种计算数据。电力系统仿真中心数据按工程来组织,一个工程包括一套基础数据和多种计算的多个作业。
在仿真中心,仿真数据按照设备类型分别存放在数据库的表中。
基础数据表主要包括下列表:
母线表
交流线表
电容电抗器表
发电机表
为了数据库管理方便,把所有工程的相同类型的数据放在一个表中,因此需要在每个表中增加一个字段标识不同的工程。
计算数据表除了从上述基础数据表中抽取而形成的设备表外,还包括以下类型的表(每种计算的表结构和表的个数有所不同):
据此定义,从基础数据抽取形成计算数据。
对计算方法和计算过程进行控制。
对计算结果和输出变量进行控制。
记录仿真过程中和结束后的电力系统状态。
同基础数据一样,计算数据的每个表需要增加工程标识字段。另外,把同一种计算的所有同类型作业数据放在一个表中,需要再增加一个作业标识字段。
仿真中心数据组织和数据规模
仿真中心包含了多个用户的仿真数据,每个用户可以拥有多套电网工程数据,每套工程数据包含了一套基础数据和若干套不同计算类型的计算数据。具体数据组织如图2所示,仿真中心系统中具有多个(m)用户和多个(n)工程数据,每个用户拥有的工程数不等。图上显示用户1拥有一个工程(工程1),用户2拥有3个工程(工程2、工程3和工程4)。每个工程包含一套基础数据和若干套潮流计算数据、暂态稳定计算数据和其它类型的计算数据。
仿真中心一般要支持上千个用户和上万个工程,每个工程一般包含上百个潮流作业数据,根据电网规模不同,每个潮流作业包含的各种设备表有几百到上万条记录。假设,数据中心包含1000个用户,每个用户有10个工程,每个工程有100个潮流作业,每个潮流作业包含的每种设备表平均为1000条记录,则数据中心每个潮流作业设备表平均记录数为10亿条。暂稳作业的数量通常比潮流作业多,设备表平均记录数也更大。对如此多记录的数据表进行查询和更新操作是非常耗时的,如果不进行优化将无法正常使用。
一种数据库与磁盘文件换入换出的性能优化方法
电力系统仿真中心的应用具有一定的特点,注册用户虽然很多,但不是所有用户都同时在线工作,一般在线工作的用户只有10%左右(按上述假设,只有100个活动用户在线);每个用户有多个工程,但一般只在一个工程内工作(即总共有100个活动工程在使用);一个工程有多个作业,但一般只在一个作业上工作(即总共有100个活动作业在使用)。实际上虽然每个设备表有10亿记录,但真正被在线使用的只有100作业(每个作业1000条记录),总共10万活动记录。如果把没有使用的数据从设备表移走(需要时再移回来),只留下有用的10万记录,那效率将大大提高。那么,数据什么时候移,移到哪里?我们设计了数据库与磁盘文件进行换入换出的方法,很好地回答了这个问题。如图3所示,把需要使用的数据从磁盘导入到数据库中,把非活动数据从数据库导入到磁盘文件中。
数据库与磁盘文件进行换入换出的具体步骤和方法如下:
步骤1:初始时所有数据存在磁盘中,需要时换入到数据库中。
步骤2:当用户进入一个工程的某个作业准备工作时,系统首先判断这个作业是否已经装入数据库,如果已装入数据库则立即给用户使用;如果没有装入数据库,则找到该作业换出后所在的磁盘文件地址,将文件内数据导入到数据库中,然后允许用户使用。此过程根据数据量大小,会稍有延迟,时间不等,此时可在界面给用户以提示。由于此延迟只在装入数据库时发生,不影响后面数据访问,且时间很短,因此是可以接受的。
步骤3:系统设置一个数据库最大载入作业容量,当载入作业数超过该容量时,则导出最早空闲的作业。判断最早空闲作业的方法是,当用户退出系统或离开一个作业时,将退出(或离开)时间写入到该作业在换入换出管理表的Out_time(作业处于空闲的开始时间)字段,系统将当前时间与每个作业的空闲时间进行比较,差值最大者就是最早空闲的作业。
步骤4:系统将作业数据导出到文件后,修改换入换出表的作业状态(status)为0(已换出到文件)。
上述把空闲时间作为换入换出策略只是一种基本方法,还可以考虑重要程度等因素。根据作业的性质,首先换出不重要的作业,其次换出比较重要的作业,对于特别重要的作业可以一直保存在数据库中。根据需求不同,这些策略都可以调整,但提高数据库性能的目标不变。
基础数据同样可以换入换出,具体方法同作业换入换出方法。
将非活动数据换出并归档到磁盘之后的仿真中心数据库,将只有很少的数据。如图4所示,数据库中只留下工程2的一套潮流计算数据,工程n的一套基础数据和一套其它计算数据。
换入换出数据结构设计
换入换出相关数据结构包括作业换入换出管理表(简称作业管理表)和换出文件在磁盘的存储位置信息。
作业换入换出管理表结构如下所示。它包含工程名和作业名,这两个字段的组合做为联合主键;还包含作业状态字段,标明该作业是在数据库中、或是换出到磁盘文件中。
表1作业换入换出管理表case_manage的表结构
表字段名 |
类型及长度 |
说明 |
Project_name |
C(32) |
工程名(联合关键字) |
Case_name |
C(32) |
作业名(联合关键字) |
Case_type |
C(32) |
作业类型0:潮流作业1:暂稳作业2:小干扰作业3:电压稳定作业 |
Status |
N(4) |
状态0:已换出到文件1:已换入到数据库2:正在换入换出操作中 |
Out_time |
time |
作业处于空闲的开始时间 |
磁盘文件目录可按用户、工程、作业来组织,具体如下所示:
/导出数据/用户名/工程名/作业名/作业数据
用户管理表
用户表存储可以登录并使用仿真中心系统的用户基本信息,包括用户名、用户标识、用户口令、用户包含的工程数量,以及用户的登入及退出时间等信息。
表2用户管理表user_table的表结构
表字段名 |
类型及长度 |
说明 |
user_name |
C(32) |
用户名(关键字) |
User_id |
C(32) |
用户标识 |
Password |
C(16) |
用户密码 |
User_projects |
N(8) |
用户包含的工程数量 |
Login_time |
Time |
用户上次登入系统时间 |
Logout_time |
Time |
用户上次退出系统时间 |
工程管理表
工程管理表保存了仿真中心数据库中所有工程的信息,包括工程名和工程所属的用户。通过该表可以查询某用户拥有的所有工程。
表3工程管理表project_table的表结构
表字段名 |
类型及长度 |
说明 |
Project_name |
C(32) |
工程名(关键字) |
User_name |
C(32) |
工程所属的用户(同user_table.username) |
作业管理表
参见前面作业换入换出管理表case_manage的表结构。
基础库母线表
基础库母线表保存了工程内所有母线信息,包括工程名、母线名、母线基准电压、电压限值、短路容量等。工程名和母线名做为联合主键。
表4基础库母线表bus_table的表结构
表字段名 |
类型及长度 |
说明 |
Project_name |
C(32) |
工程名(联合关键字) |
Bus_Name |
C(20) |
母线名(联合关键字) |
Base_kV |
N(10,4) |
基准电压 |
Vmax_kV |
N(10,4) |
电压上限 |
Vmin_kV |
N(10,4) |
电压下限 |
SC1_MVA |
N(12,6) |
单相短路容量 |
SC3_MVA |
N(12,6) |
三相短路容量 |
基础库节点表
节点是电气设备的连接点,用于建立电网模型的拓扑关系。节点可以是母线节点,也可以是普通节点(普通节点通过开关和刀闸设备最终也连接到母线节点)。节点表保存了工程名、节点名、物理母线标志、节点所属母线名。
表5
表字段名 |
类型及长度 |
说明 |
Project_name |
C(32) |
工程名(联合关键字) |
Node_Name |
C(20) |
节点名(联合关键字) |
Bus_Name |
C(20) |
节点所属母线名 |
ISPhyBus |
N(4) |
物理母线标记0:普通节点1:物理母线节点 |
基础库交流线表
基础库交流线表保存了工程内交流线的基本信息,包括拓扑信息(I侧节点名、J侧节点名)及线路参数等,其它参数略。工程名和线路名为联合主键。
表6基础库交流线表acline_table的表结构
表字段名 |
类型及长度 |
说明 |
Project_name |
C(32) |
工程名(联合关键字) |
ID_Name |
C(20) |
线路名称(联合关键字) |
I_Name |
C(20) |
I侧节点名 |
J_Name |
C(20) |
J侧节点名 |
R1 |
N(13,6) |
R1 |
X1 |
N(13,6) |
X1 |
B1_Half |
N(13,6) |
B1/2 |
R0 |
N(13,6) |
R0 |
X0 |
N(13,6) |
X0 |
B0_Half |
N(13,6) |
B0/2 |
Rate_Ka |
N(12,5) |
额定容量(kA) |
Up_Limit |
N(6,2) |
容量上限(%) |
Length_km |
N(8,3) |
1段线路长度(Km) |
潮流库节点表
潮流库节点表比基础库节点表多了一个作业名字段(Case_Name),用于区分不同作业,其它字段根据需要可增减。工程名、作业名、节点名为联合主键。
表7潮流库交流线表lf_acline_table的表结构
表字段名 |
类型及长度 |
说明 |
Project_name |
C(32) |
工程名(联合关键字) |
Case_Name |
C(20) |
作业名(联合关键字) |
Node_Name |
C(20) |
节点名(联合关键字) |
Bus_Name |
C(20) |
节点所属母线名 |
ISPhyBus |
N(4) |
物理母线标记0:普通节点1:物理母线节点 |
潮流库交流线表
潮流库交流线表比基础库交流线表多了一个作业名字段(Case_Name),用于区分不同作业,其它字段根据需要可增减。工程名、作业名、线路名称联合做为关键字。
表8潮流库交流线表lf_acline_table的表结构
表字段名 |
类型及长度 |
说明 |
Project_name |
C(32) |
工程名(联合关键字) |
Case_Name |
C(20) |
作业名(联合关键字) |
ID_Name |
C(20) |
线路名称(联合关键字) |
I_Name |
C(20) |
I侧节点名 |
J_Name |
C(20) |
J侧节点名 |
R1 |
N(13,6) |
R1 |
X1 |
N(13,6) |
X1 |
B1_Half |
N(13,6) |
B1/2 |
R0 |
N(13,6) |
R0 |
表字段名 |
类型及长度 |
说明 |
X0 |
N(13,6) |
X0 |
B0_Half |
N(13,6) |
B0/2 |
Rate_Ka |
N(12,5) |
额定容量(kA) |
Up_Limit |
N(6,2) |
容量上限(%) |
Length_km |
N(8,3) |
1段线路长度(Km) |
此外,根据之前提到的提高数据库访问一般有三种方法。一是对数据库进行合理设计和性能优化,增加索引、数据库分区等机制,二是提升数据库服务器硬件计算资源性能,三是部署多个数据库系统,通过负载均衡来提高性能,后两种方法需要显著增加购买成本和维护成本。本发明的目的是寻找另一种方法,不通过增加数据库资源,也不显著增加成本的情况下,提高数据库的访问性能。本方法不排斥上述三种常规方法,这几种方法可以共存,每采用一种方法,访问性能都会有所提升。
此处已经根据特定的示例性实施例对本发明进行了描述。对本领域的技术人员来说在不脱离本发明的范围下进行适当的替换或修改将是显而易见的。示例性的实施例仅仅是例证性的,而不是对本发明的范围的限制,本发明的范围由所附的权利要求定义。