航天器电测数据库表结构的设计与实现
2012-12-29张海祥何晓宇李鹏吕伟
张海祥 何晓宇 李鹏 吕伟
(北京空间飞行器总体设计部,北京 100094)
1 引言
航天器电测是指在统一供配电条件下,对航天器电气功能、性能、接口等进行的全面检查。电测过程中,航天器按照一定的格式和频率下传数据,地面电测设备对数据进行解析、处理和分析,以此对航天器的功能和性能作出评估和判断[1]。航天器电测产生的数据量非常大,因此对电测数据必须有效存储。最简单的做法是利用文件系统来存储数据。这种方式每次将数据以文本文件的方式记录在单个数据文件中,然后再利用文件夹来管理所有的数据文件。这种形式虽然存储简单容易实现,但随着文件数量的不断增加,数据变得不可管理,不方便查询,通用性差,效率不高。
与数据文件存储方式相比,数据库管理系统(DBMS)在数据存储方面具有明显的优势:关系数据库技术和数据库理论发展成熟,应用工具多;与数据文件相比,DBMS能管理的数据量大,操作容易;利用SQL语句完成后期数据分析,效率高,且具有良好的通用性和可扩展性[2]。航天器电测领域引入数据库管理系统,利用数据库技术可以提高数据管理的有效性和方便性,提升航天器测试的信息化水平。
2 航天器电测数据特点分析
航天器是一个由供配电、测控、热控、姿态与轨道控制、有效载荷等多个分系统组成的复杂系统,各个分系统又分别由若干子单元组成,这些子单元又可进一步分解,直至元器件[3]。为了全面地反映航天器各个组成部分的性能和工作状态,每个航天器都设计了大量的遥测参数,这些参数包括电压、电流、温度、压力、星上设备状态等[4]。根据航天器的实际应用情况,可以做出如下假设:
(1)每个航天器最多由26个分系统组成,为每个分系统设置一个标识号,依次为A、B、C、…Z;
(2)每个分系统最多有999个遥测参数,为每个遥测参数设置一个参数序号,例如A 分系统的参数序号为A001、A002、A003、…A999,B 分系统的参数序号为B001、B002、B003、…B999,以此类推直到Z分系统。
根据数据的应用类型,航天器电测数据可以分为基础定义数据和测试数据,基础定义数据是指遥测参数的定义信息。遥测参数定义信息中包含该参数所属分系统、测量单位、参数在遥测格式中的位置和下传周期等。测试数据是指电测过程中产生的每个遥测参数的具体测试值,测试值包括原码和工程值,原码是指航天器下传后未经处理的原始值,为十六进制的整数,工程值是指按照设计的处理方法和系数对原码进行计算处理后的数值,比如把某一组成部分的电压,经过计算处理将原码转换成具体的电压数值,有利于直观的判读。
两类数据相比较而言,基础定义数据的数据量小,每个航天器一般包含上千个遥测参数,这类数据变化较少,存储管理相对简单,该类表的设计不在本文描述。测试数据的数据量大,一般而言,在航天器电测过程中,重要参数或变化较快的参数可达到下传7 200次/小时,而这类参数数量高达数百个,测试数据的存储管理相对复杂,测试数据的数据量占整个电测的数据量的98%以上,测试数据表的表结构设计,对整个数据库的性能极为关键,本文主要描述测试数据的数据库表结构的实现方法。
3 航天器电测数据库表结构的实现
3.1 航天器电测数据表设计方法
表是数据库存储和管理数据的基本逻辑结构,表结构设计对数据库性能的影响是最直接的[5]。表的横向的每一列称为字段,如果表的字段数量特别多,称之为横表,相反表的字段数量相对少而记录条数较多的表称之为竖表[6]。这两类表对数据库的各项性能起到截然相反的作用。横表携带的有效信息量多,存储相同的信息量的情况下其占用的记录条数更少,有利于数据插入操作,但扩展性不佳。竖表实际上是将一条横表的大记录拆成若干条小记录,为了保证原信息的完整性,必须引入额外的冗余数据,对数据查询有利。从表结构设计来看,是不可能达到各项性能同时最优的效果,所以系统数据表的设计关键是选择合适的字段长度,平衡各性能要素,从而达到总体性能最优[7-8]。
测试数据的每个遥测参数相互独立,逻辑关系简单,航天器下传的每帧数据包含3个属性:时间、参数序号、测试值。根据数据表设计的两个方向:竖表和横表,其竖表表结构见表1。
表1 竖表数据表结构Table 1 A vertical table structure
这种表结构形式简单,但同一时刻需要存储的数据记录将达到上千条,每秒钟将增加几千条数据记录,数据量将呈现爆炸式增长,数据冗余大,给数据入库的实时性应用造成了很大的影响[9]。这种表结构不适合航天器电测领域。
在横表设计中,以时间和参数序号作为字段名,最简单的表结构为所有参数的工程值存入一张表中,如果一个航天器具有参数A001、A002…C001、C002…Z001、Z002…,则该表的表结构见表2。
表2 横表数据表结构Table 2 A horizontal table structure
这种表结构数据记录条数是前一种表结构的几千分之一,而且可以把时间设为主键,有利于查询,但这种表结构的突出缺点是列数太多,如果一个航天器有3 000个参数,这张表的列数将达到3 001列,如此多列的表大大影响数据库性能。因此在航天器测试领域需要对这种表进行优化改进。
横表表结构按分系统来划分,以遥测参数序号作为字段名,存在缺点是扩展性差,灵活性差,当航天器增加一个新的分系统时,数据库需要增加一张该分系统的数据表,当某一分系统增加一个新的遥测参数时,该表需要为该参数增加一个新的字段。为了克服此缺点,结合前文的假设,设计数据库表时,可以为航天器预先创建26 个分系统,每个分系统包含999 个参数的数据库表,这种最大包络的冗余设计,可以有效解决随着分系统和参数的变化而需要修改数据表结构的问题。
在横表结构中,数据库性能与表的字段数存在如下关系:当字段数在某一阈值以内时,字段数的大小对数据库性能影响很小,当字段数超过该阈值时,数据库性能随着字段数的增加而急剧降低。阈值的大小与数据库软件、数据库属性设置、安装数据库的硬件环境相关。在实际的数据库设计中,绝大多数的数据表的字段数均小于200。
根据前面的假设以及最大包络的设计思路,使每个航天器型号包含26个分系统,每个分系统包含999个遥测参数。在横表模式设计中,可以按照分系统来划分,不同分系统的数据划分到不同的表中,同时为了具体应用的方便性,把每个分系统999个遥测参数的数据再等数量地划分到5张表中,每张表包含200(或199)个参数的数值。这种表结构的设计,不仅减少表的字段数,提高数据库性能,同时使表结构的层次更加清晰。
3.2 在航天器电测中的应用
根据3.1节设计的方法,在航天器电测中,测试数据表存储测试过程产生参数原码、工程值、测试指令和测试序列等信息。原码和工程值数据表的表名称定义为:
表名称=“航天器编号_数据类型编号_分系统代号_原码|工程值_垂直分区编号_水平分区编号”
其中垂直分区编号是指把每个分系统的999个参数分配到5张表中,作为每张表的垂直分区标志号;水平分区编号是指由于测试时间跨度较长,把全程的测试时间数据分配到多张表中而加以区分的编号,比如把2012年全年的数据按季度分配到4张表中进行存储,则水平分区的编号可以定义为“201201”、“201202”、“201203”和“201204”。
在航天器电测数据库表设计中定义的缩写见表3。
表3 数据库设计中名词缩写说明Table 3 Abbreviation in the database structure
表3的数据表表名称可以表示为
表名 = WXBH_SJLX_FXT_YM |GCZ_CZFQ_SPFQ
每张工程值表的表结构都相同,第一列为时间,后面200(或199)列为参数序号。如航天器编号为SATTEST1,数据类型为DATE,C 分系统前199个参数2012年第一季度的工程表表名为SATTEST1_DATE_C_GCZ_0_201201,其具体表结构见表4。
表4 某型号C分系统的第一张工程值表表结构Table 4 First table structure of C subsystem’s value in some spacecraft
原码表与工程值表类似,只有参数的数据类型不同。如航天器编号为SATTEST1,数据类型为DATE,C分系统前199个参数2012年第一季度的原码表表名为SATTEST1_DATE_C_YM_0_201201,其具体结构见表5。
表5 某型号的C分系统的第一张原码表表结构Table 5 First table structure of C subsystem’s raw value in some spacecraft
为航天器初始创建数据库表时,一次创建26个分系统的表,每个分系统预分配999个参数,这样避免了测试过程中,增加新的参数时需要对数据库表结构进行修改。航天器型号的工程值表和原码表可以用如下集合来表示:
测试数据库表还可以存储在测试过程中发送的测试指令和测试序列,指令和测试序列的内容相对简单,可以把指令和序列的相应属性作为表的字段来创建数据表。
4 结论
利用数据库管理系统对测试数据进行管理,具有管理集中、应用方便等优点。本文根据航天器电测数据的特点,按照分类分层次的方法,提出了一种面向航天器电测的通用的数据库表结构设计方法,该数据库表结构设计具有如下优点:
(1)通用性强。该表结构与具体的航天器型号特点无关,所有型号的航天器测试数据表均可以按照该方法创建统一的数据表。该数据库结构适用于各种通用的数据库软件,比如ORACLE、MYSQL等,不依赖于数据库软件的特有特性。
(2)冗余性好。在表结构设计中,为分系统个数和参数个数做好了冗余设计,测试过程中增加新的分系统和新的参数时,不需要修改数据表结构。
(3)层次结构清晰,命名统一规范,兼顾数据入库和查询的效率。在数据库横表模式的基础上,进行拆分优化,提高了数据库的整体性能。
该数据库表结构实现了测试数据的集中有效管理,方便对试验数据的分析,提高了数据的利用效率,具有良好的通用性和实用性。该数据库表结构已经广泛应用于“北斗”、“嫦娥”、“神舟”等系列航天器的电测中,可作为航天器电测中通用的表结构设计方法。
(References)
[1]谭维炽,胡金刚.航天器系统工程[M].北京:中国科学技术出版社,2009
Tan Weizhi,Hu Jingang.Spacecraft system engineering[M].Beijing:China Science and Technology Press,2009(in Chinese)
[2]路川,胡欣杰,阎文丽.Oracle 10g宝典[M].北京:电子工业出版社,2010
Lu Chuan,Hu Xinjie,Yan Wenli.Bible of Oracle 10g[M].Beijing:Publishing House of Electronics Industry,2010(in Chinese)
[3]王庆成.航天器电测技术[M].北京:中国科学技术出版社,2007
Wang Qingcheng.Electrical test technology of spacecraft[M].Beijing:China Science and Technology Press,2007(in Chinese)
[4]刘德勇,石柱,刘国民.应用UML建模航天测试数据库需求的过程[J].航天控制,2008,26(4):48-52
Liu Deyong,Shi Zhu,Liu Guoming.The process of requirement development of aerospace test database by UML[J].Aerospace Control,2008,26(4):48-52(in Chinese)
[5]李超,张明博,邢春晓,等.列存储数据库关键技术综述[J].计算机科学,2010,37(12):1-7
Li Chao,Zhang Mingbo,Xing Chunxiao,et al.Survey and review on key technologies of column oriented database systems[J].Computer Science,2010,37(12):1-7(in Chinese)
[6]刘艳艳,崔松雪,陈勇.一种新的海量海洋环境数据库组织结构的研究与实现[J].中国海洋大学学报,2008,38(4):667-670
Liu Yanyan,Cui Songxue,Chen Yong.Research and realization of a new massive ocean environmental database storage structure[J].Periodical of Ocean University of China,2008,38(4):667-670(in Chinese)
[7]章洪良,张广兴,张大方.海量网络监测数据存储优化研究[J].微计算机信息,2009,25(4):175-176
Zhang Hongliang,Zhang Guangxin,Zhang Dafang.Research of data-storing optimization for large-scale network monitoring systems[J].Micro-computer Information,2009,25(4):175-176(in Chinese)
[8]徐洪信,申景诗,王凤阳.高速率数据接收存储系统设计[J].航天器工程,2009,18(1):43-47
Xu Hongxin,Shen Jingshi,Wang Fengyang.Design of the high-speed data receiving and storage system[J].Spacecraft Engineering,2009,18(1):43-47(in Chinese)
[9]武海平,余宏亮,郑纬民.通用海量数据库性能测试系统的设计与实现[J].清华大学学报(自然科学版),2006,46(7):1309-1312
Wu Haiping,Yu Hongliang,Zheng Weimin.General performance measures for massive databases[J].Journal of Tsinghua University(Science and Technology),2006,46(7):1309-1312(in Chinese)