基于异构数据库的空间天文卫星数据组织方法
2022-09-17杨晓艳刘志奇孙小涓佟继周
杨晓艳,刘志奇,孙小涓,3,石 涛,纪 珍,佟继周
(1. 中国科学院空天信息创新研究院,北京 100190;2. 中国科学院空间信息与应用系统重点实验室,北京 100190;3. 中国科学院大学,北京 100049;4. 中国科学院国家空间科学中心,北京 100190)
2015年以来,我国陆续发射了暗物质粒子探测卫星、硬X射线调制望远镜、引力波暴高能电磁对应体全天监测器卫星等空间天文卫星,获取了大量空间天文观测数据。地面系统对卫星原始探测数据以及在此基础上生成的编辑级产品、标定级产品进行存储和管理。这些数据产品是卫星在一定时空条件下的探测成果,产品内容包含粒子类别、粒子数量、粒子能段、粒子入射径迹、粒子能量沉积等表征空间天文目标的信息,同时还包含卫星在轨姿态、轨道位置、温度、压力等表征卫星平台、有效载荷工作状况的信息。这些数据用于空间天文研究、卫星及载荷健康状况趋势分析、卫星探测目标分析与计划辅助制定、卫星探测过程可视化等应用领域,能够发挥重要的数据价值。
现有的卫星数据地面管理系统中,按照国家空间科学中心提出的空间科学数据模型[1],空间天文卫星数据以FITS(Flexible Image Transport System)[2-3]、ROOT(欧洲核子研究中心开发的一种数据格式)等空间科学领域专用的数据格式保存在文件中。在获取数据时,首先需要检索数据文件并解析文件格式[4-5],然后从文件指定位置抽取所需的特征参数,对某些数据还需要进行物理量转换、时间校正等处理[6]。由于各卫星数据产品的存储格式不同,获取特征参数的数据处理过程也不同,处理过程复杂耗时。随着数据量的不断增长,数据库检索时间越来越长,数据获取的实时性越来越难以保证。目前以文件为粒度进行数据存储和组织的系统难以满足数据实时检索获取的要求。
为了满足实时获取数据的应用需求,我们需要从空间天文数据文件中抽取特征参数,构建一种高效的参数级细粒度数据组织方法。但是,从海量空间天文数据文件中抽取得到的特征参数数量巨大,如何高效地组织和索引这些数据是一个非常关键的问题。
1 空间天文卫星数据特点
空间天文卫星观测对象主要是宇宙中的各类天体目标,空间天文卫星数据包括表征这些观测对象的科学数据,以及表征卫星和载荷状态的工程数据,这类数据有以下特点。
(1)数据种类多样,时间分辨率高,数据量庞大
从产品内容来讲,空间天文卫星数据包含天文目标科学数据、卫星平台及载荷工程数据等类型;从产品级别来讲,包含编辑级产品、标定级产品等类型。每颗卫星的产品内容、产品级别有所不同。以暗物质卫星为例,产品级别有9级,每级产品类型约为十几类,共计100多类。以暗物质卫星标定级产品为例,半小时的数据文件中包含粒子数量达12万左右,每个粒子的参数包括粒子在各载荷中的沉积能量、击中位置、粒子入射径迹等,按5年卫星寿命期估算,产生的数据约为105.1亿条。工程数据包括卫星姿态轨道控制计算机(Attitude and Orbit Control Computer, AOCC)的姿态数据、全球定位系统(Global Positioning System, GPS)数据等几十类数据,大部分数据为每秒一条,还有一部分数据每秒两条甚至四条。按照每秒一条估算,每颗卫星每年每类数据产生3 000多万条,按照卫星寿命5年、每颗卫星35类数据估算,单星寿命期内产生数据量约50亿条。数据总量达百亿甚至千亿量级,我们迫切需要构建一种针对海量多源数据的高效组织方法。
(2)数据具有时间、空间属性特征,需要支持基于时空条件快速检索多类数据的应用需求
空间天文卫星数据信息表达为(Time, RA, DEC, par1, par2……)。其中,Time表示观测时间;RA表示当前观测时间卫星视场中心点赤经;DEC表示当前观测时间卫星视场中心点赤纬;par1和par2表示特征参数,比如高能电子计数、载荷工程参数测量值等。空间天文数据具有时间、空间属性特征,为了支持基于时空检索条件对多源数据进行快速检索,需要对多源数据的时间、空间属性进行统一处理,构建基于特征参数时空索引的数据组织方法和检索方法,面向应用提供符合要求的数据。
(3)数据量持续增长,需要可扩展架构支持日益增长的数据存储要求
伴随着已有卫星持续在轨运行和新型卫星发射入轨,空间天文卫星数据体量呈现持续增长的趋势,需要构建一套在存储容量方面具备良好可扩展性的分布式数据库存储系统,并且随着存储容量的增加,其检索效率能够基本稳定。
2 相关研究工作
面对空间天文卫星海量数据组织和快速获取的需求,传统关系型数据库难以满足。HBase等非关系型数据库具有数据结构灵活、水平扩展性强的特点,比传统的结构化数据库更加有效地组织大数据。然而,由于HBase数据库仅在主键建立了B+树索引,能够提供基于主键的快速查询能力,在面对非主键查询请求时,需要进行全表扫描,查询效率很低。而空间天文卫星数据需要按照时间、赤经、赤纬、参数等多重属性进行检索,HBase难以满足按照多重属性快速检索数据的需求。
利用非关系型数据库存储和检索海量时空数据,多个行业的学者都进行了研究,主要有两种思路:一种是地理信息、国土资源、空间科学等领域的学者,从构建时空格网模型出发,将时空数据按照时空编码存入非关系型数据库。比如文[7]提出一种空间矢量数据分布式存储模型,采用四叉树建立空间格网,并以格网编号、随机码构建行键,将数据存储在HBase数据库中。文[8]提出HTM-ST离散化时空数据组织模型,采用时间、空间离散剖分的方式建立时空耦合编码,并以该编码构建行键,将日地空间数据存储在HBase数据库中。由于HBase采用字典序方式存储行键,采用多重属性构建行键的方法仅适用于点查询;针对范围查询,需要逐层判断各个时空网格与查询范围的拓扑关系,在剖分细化的过程中不断逼近查询条件中的时空范围,或者进行全表扫描,查询耗时明显。
另一种思路是计算机信息技术领域的学者,通过构建多层索引,提高非关系型数据库的数据检索效率。比如,文[9]提出一种基于索引表和值表,并结合热点数据缓存的分层式索引技术。该方法在一定程度上提高了检索效率,但在多属性范围检索时需要对多列查询结果进行合并处理,同样无法满足空间科学领域需要按照时空范围实时获取数据的需求。文[10]提出TA-index的三层索引技术,该方法旨在提高数据入库效率,在时空范围查询时由于需要分多次查询多层索引和数据库表,因此耗时较长。
针对海量空间天文卫星数据需要按照时间、空间双重属性进行组织和查询的需求,本文提出一种新的空间天文卫星数据组织方法。首先解析数据文件并从中抽取海量特征参数,建立观测时间、空间位置与特征参数的关联,实现在统一时空下的多源数据组织。然后结合非关系型数据库数据结构灵活、水平扩展性强,以及关系型数据库在多列值范围查询方面的优势,建立一套基于异构数据库进行数据组织和存储的方式,其中采用分布式数据库分区分表的方式,构建空间天文卫星HBase集群数据库,对海量特征参数进行存储管理;采用关系型数据库分表的方式,存储空间天文卫星时空索引数据,支持时间、空间两个维度的检索数据。
3 空间天文卫星数据组织
3.1 特征参数抽取
现有的空间天文卫星数据以文件形态存储在地面管理系统中,特征参数抽取是空间天文卫星高效组织大数据的第一步。基于FITSIO(https://heasarc.gsfc.nasa.gov/fitsio/fitsio.html)和ROOT(http://root.cern.ch)格式解析框架,构建数据解析算法,能够适应现有卫星多种数据格式参数抽取的要求。主要步骤如下:
(1)预先设置各卫星各类数据需要抽取的参数,生成参数抽取需求。
(2)获取卫星数据产品文件,识别卫星名称、数据类型、存储格式。
(3)根据卫星名称、数据类型,与步骤(1)的参数抽取需求进行匹配。
(4)针对FITS格式数据文件,调用FITSIO提取各参数值及观测时间;针对ROOT格式数据文件,调用ROOT格式解析框架提取各参数值及观测时间;针对CSV和dat等普通格式文件,直接提取各参数值及观测时间。
(5)根据需要对提取的参数进行物理量转换,比如将载荷温度、压力等参数值从星上记录的电信号值转换为有物理含义的参数值。
(6)基于卫星姿态数据计算逐时刻的卫星观测视场位置信息(RA,DEC)。
3.2 特征参数存储
面向海量特征参数时间序列数据的存储需求,本文提出一种基于HBase集群构建的特征参数存储结构(如图1),以参数分表+时间分区的方式进行存储,支持以时间点、时间范围为条件检索数据。
首先,以单个参数或几个关联参数为粒度,将海量特征参数划分为Group1和Group2等不同的参数组,分别建立参数表。其中,针对姿态四元数、轨道位置xyz坐标、轨道六根数等互相关联的参数,将其按组建表存储,比如图中参数A,B和C划分为一组,参数U和V划分为一组;其余参数单独建表存储。这种存储方式一方面能够提高数据存储的灵活性,便于管理;另一方面能够支持多组参数表并发查询,从而提高多参数查询效率。
然后,基于各类参数的时间频率,按照时间范围对各参数表进行分区,分别建立独立的时间分区索引。比如,图1中Table1参数时频较高,以5个时间单位为跨度建立t1,t6,t11…的时间分区索引;而TableN参数时频较低,以10个时间单位为跨度建立t1,t11…的时间分区索引。这种分区设计能够将数量庞大的参数按照时间范围存入不同区域,在参数检索过程中,支持通过分区索引查找对应时段数据,并且能够支持多分区并发查询,从而进一步提高查询效率。
3.3 时空索引存储
时空索引表示观测时间与观测视场中心点位置的关系,需要存储Time,RA和DEC三个字段的数据。时空索引需要满足按照时间、空间范围联合检索的需求,即按照Time,RA和DEC字段范围获取数据。由于非关系型数据库HBase的优势在于通过行键或者行键的范围快速检索数据,在面对非主键查询需求时,需要进行全表扫描,因而效率较低。而关系型数据库采用结构化查询语言(Structured Query Language, SQL)的方式,适合这种多列值查询的应用需求,不仅能够满足点查询需求(按照指定时间、位置获取数据),而且能够满足范围查询需求(按照时间范围、空间范围获取数据)。因此,本文将时空索引数据存入关系型数据库MySQL中。
卫星观测过程中,每秒产生一条时空索引数据,观测时间为顺序递增值。在时空索引表中,将Time字段设置为主键。另外,由于时空索引每秒一条记录,每颗卫星每年数据量高达3 000多万条,而MySQL库表数据达到千万级后,检索效率很低。对数据库表进行水平切分,能够解决超大型数据量和高负载库表遇到瓶颈的问题,提高检索效率。
由于本文面向的典型应用场景每次请求数据的时长基本是小时量级,大概率是查询单表,而单表数据量控制在百万级别,能够保证检索效率。因此,在时空索引数据存储过程中,按照观测时间Time字段,以月为单位对时空索引表进行水平切分,切分后的子表数据量为200多万条。同时,针对跨两个表的联合查询也做了摸底测试,联合查询耗时与单表查询没有明显区别。但是,如果应用场景发生变化,比如检索时长较长,经常需要联合查询或者联合多张表进行查询,MySQL分表方案可能需要随之进行调整。
联合查询的SQL语句如下:
select Time from Table1
where Time>=?5 and Time<=?6 and RA>=?1 and RA<=?2 and DEC>=?3 and DEC<=?4
union select Time from Table2
where Time>=?5 and Time<=?6 and RA>=?1 and RA<=?2 and DEC>=?3 and DEC<=?4
4 面向应用的数据检索
本文方法能够支持以时间、空间为条件对特征参数进行检索。根据时间和空间组合数据检索条件,数据检索需求可分为时间点、时间范围、空间点、空间范围、时间点+空间点、时间点+空间范围、时间范围+空间点、时间范围+空间范围共8种情况。
当检索请求仅包含时间信息时,根据时间点或者时间范围对待检索参数表发起多个并行检索任务,针对以时间点为检索条件的请求,调用HBase get方法(根据唯一健值查询)对参数表进行检索;针对以时间段为检索条件的请求,调用HBase scan方法(根据唯一键值的起止范围查询)对参数表进行检索;完成检索后,对多个任务的检索结果进行合并。
当检索请求包含空间信息时,首先检索时空索引表,获取符合条件的时间信息;然后根据时间信息检索参数表。
以检索赤经RA范围在(r1,r3)、赤纬DEC范围在(d1,d2)、观测时间Time范围在(t1,t100)且检索参数为A,B,C和W为例,检索过程如图2。
图2 数据检索过程
(1)以 “r1 (2)以 “t1