滕爱国 谭晶 查易艺 陈飞园 吴震寰
摘要:近20年来,中子和同步加速器科学共同体一直希望有一种共同的数据格式,用于交换实验结果和应用,以便减少数据、分析数据。使用HDF5作为数据载体已成为许多设施的标准。最大的问题是在HDF5内的数据组织(模式)的标准化。通过为数据访问引入新的间接层:公共数据模型访问(CDMA)框架,文章提出了一种解决方案,允许数据压缩开发人员与研究所责任分离:数据压缩开发人员负责数据简化代码;研究所提供访问数据的插件。CDMA是一种核心API,它通过科学家和研究所共同认可的数据格式插件机制和科学的程序定義(关键字集合)来访问数据。在应用程序定义和物理数据组织之间使用一种新型映射系统,CDMA允许数据压缩程序独立于数据文件载体和模式下开发。每个机构都为自己的数据文件格式开发一个数据访问插件,以及程序定义和数据文件之间的映射。因此,数据压缩程序可以从严格科学的角度开发,并能立即处理来自多个研究所的数据。
关键词:公共数据模型访问;数据分析;数据可视化;数据压缩;字典机制
1 项目的起源
ESRF,SOLEIL,DESY和ANSTO软件开发专注于数据处理框架的设计,并在NeXus(SOLEIL使用的标准数据格式)数据存储层上运行[1]。协作的主要问题使用独立于数据载体和模式的共同工具。通过使用一组Java接口的数据模型,在ANSTO上使用GumTree数据模型以在底层的NeXus文件(标准数据格式)中访问抽象数据文件。我们预计这是一个很有前景的发展方向。
这个概念引起了SOLEIL的注意,因为它恰好需要在一个基于NeXus的统一的数据访问层上建立它的COMETE项目,一个旨在缓解数据可视化和数据分析程序编程方面的问题Java框架。
2010年1月,在ICALEPCS 2009会议上两位作者会面之后,ANSTO和SOLEIL开始合作。这项工作是从ANSTO的GumTree项目的数据访问层开始的,用Java编写。
在2011年第四季度,DESY将参与合作并帮助我们开发C++的CDMA端口。2动机分析
必须理解的重要一点是,数据格式不是问题。问题是如何让我们研究所的用户使用相同的工具,而不考虑数据的来源。
即使在相同的同步加速器或中子发施中,在通过光束线时数据结构也不尽相同。NeXus标准很有用,但还不足以保证一致性。对标准的解释允许两个相同的光束线具有不同的数据结构。
CDMA的目的是提供一个抽象的数据访问层,以构建分析程序或压缩程序,而不考虑数据结构。
类HDF的格式允许使用API[2]记录任何类型的数据;抽象了物理文件组织。类NeXus规范是一组标准化工作中的逻辑数据组织。这种标准化可能适用于各种以树为导向的数据格式(如HDF或XML)。这种方法的问题在于,设备必须生成严格遵守规范的数据文件。这是一个巨大的挑战,因为每个设施的工组人员(主要是科学家和工程师)在采集系统和实验相关数据方面都有自己的观点,并且数据记录系统很少驱动硬件和数据采集过程。
CDMA背后的想法是逆转数据的观点。与其不顾一切地使各个机构数据文件标准化,还不如引入一层来隐藏数据存储的不同方式。我们觉得这是可实现的。
笔者建议使用NeXus标准。随着标准的成熟,NeXusAPI可能会取代CDMA,尽管CDMA现在允许处理各种标准解释,我们还是建议各个设备参与到NeXus的标准化进程中。
每个机构将继续使用最合适的格式来产生数据。在进行兼并之前,不必等待最终的数据组织规范再共享数据和程序。
3 CDMA的介绍
CDMA的组成:(l)用于编写数据压缩和分析应用程序的客户端层API。(2)用于构建数据访问插件的开发者API。CDMA常规使用图解如图1所示。
客户端API。使用客户端API,数据压缩程序开发人员不必了解任何关于文件格式的信息,因为API使用了一个抽象的数据访问层,它隐藏了数据文件规范。 数据源插件。数据文件规范是通过插件机制嵌入的。因此,研究机构有责任开发他们的数据访问插件,以便通过CDMA访问其研究所获得的数据集。
传统导航API。不过,使用导航API,数据压缩开发人员必须精确地知道应用程序访问的每个数据文件中的数据模式。这很浪费时间。这也是这些项目在其开发组织之外使用的一个障碍。
字典机制。为了解决这个问题,CDMA引入了一种新的数据访问方法。这就是字典机制[3]。
使用此机制,数据压缩程序开发人员不再需要知道数据模式。而是使用关键字访问数据。关键字是一个短字符串,用于命名科学测量或通用技术数据项。因此,访问数据压缩程序的源代码部分更简单、更稳定(这是最重要的)。
考虑到这一机制,科学家必须在关键字的名称上达成一致,并不需要考虑数据的物理结构如何。此外,同样的测量数据可能有不同的单位(例如波长和能量),所以CDMA提供了同步转换机制。
需要注意的是,老式导航API仍然可用,但我们更加建议使用字典API。
3.1客户端API
客户端API定义了抽象数据源的接口。有3个层次的抽象:(1)顶层是IDataset接口,它代表一个实验的所有数据处理。(2) IGroup(或ILogicaIGroup:如果使用字典机制,请参阅下文)定义了一组相关数据。每个数据集至少有一个根组;一个组可以包含子组和数据项。(3) IDataltem定义了单个值或量度,它可以是标量或多维数组。
有了数据访问层,数组类可支持多维数组的高效操作。它不仅仅是一个原始的Java或C++数组。它是一个科学的数据对象,允许你分片或分块并在此基础上做数学运算。CDMA还提供了一个允许错误传播的类,该错误对象提供了基于泊松统计数据的计数不确定性的传播。这可以扩展到其他不确定性计算。
3.2数据源插件系统
使用CDMA库,数据压缩开发人员并不关心数据模式。插件机制动态地加载从数据文件中访问数据的插件(动态库)[4]。因此,该机制允许用户在同一会话中打开从不同机构获得的文件。
3.3字典机制
字典机制依赖于两个XML文档。
3.3.1数据定义
第一个文档是匹配科学或技術数据项的关键字。例如,一个叫电流的键在采集时间应该指代存储环中的有效电流。这些关键字可以通过这个文档列出,或者通过树状结构来组织。在后一种情况下,这个文档描述了一个特定于数据的视图,比如NeXus应用程序定义[5]。
该文档旨在独立于数据的物理组织方式。这份文档至少有两种写法:(1)它可以为已经存在的特定数据分析应用程序编写,并适用于CDMA的使用。(2)或者它可以独立于任何应用程序编写,比如NeXus应用程序定义。数据定义举例如图2所示。
3.3.2关键字映射
第二个文档是字典本身。它是关键字与真实路径之间的映射。它需要在文件中准确地匹配数据模式。NeXus文件映射举例如图3所示。
3.3.3责任
给定一个关键字列表,产生实验数据的研究所必须编写与他们的数据文件结构相对应的映射文档。
4 当前的状态
实现CDMA有两种方式:Java和C++。Java实现在实际操作中己十分成熟,并且已经可以在SVN Codehaus存储库中使用[6]。
ANSTO开发了一种基于Java版本的CDMA的数据浏览器[7],并将使用CDMA的4个中子束仪作为Gumtree生态系统的一部分。ANSTO上基于CDMA的数据浏览器如图4所示。
在SOLEIL方面,基于CDMA的数据并用Java编写的两个数据压缩程序,目前正在生产中,可用于SWING(SAX获取)和NTARES(EXAFS,光电发射测量)[8]。一种在SOLEIL上使用CDMA的数据压缩程序如图5所示。
我们正在进行C++的实现,并计划于2012年初发布。然后将根据这个C++的实现开发一个Python端口。
5结语
第一次使用CDMA的结果证明其非常有效。研究发现,由于开发人员不必再处理数据格式,开发新的数据压缩程序所需的时间大大减少了。在技术方面,随着新参与者(DESY, ANKA,…)的到来,我们建立了一个社区,可以通过扩大数据压缩程序和数据源插件[9]的数量来快速发展这个项目,从而支持交叉研究所的实验文件交换。
最后强调—下,我们始终相信CDMA是一个对数据管理问题[10]。说有价值的技术方案。随着CDMA现在提供了一个一直希望得到的解决方案,即通过透明的方式交换机构之间的数据文件和数据分析程序,像PANDATA HDRI,NFFA等这样的欧洲项目的数据管理问题都可被解决。
[参考文献]
[1lMANJU NATN S.片上调试建立Nexus标准[J]电子设计技术,2000 (9):62,64,66.
[2]吕晨,姜伟,虎嵩林.一种基于新型图模型的API推荐系统[J].计算机学报,2015 (11):2172-2187
[3]马志强,周长胜,杨娜,等.基于中文搜索引擎的分词词典的设计与实现[J]铁路计算机应用,2016 (12):45-47
[4l曹玉林,马建萍.基于操作系统的动态库分析及移植方法[J].西北民族大学学报(自然科学版),2004 (4):52-55
[5]姜文,刘立康.基于SVN的应用软件持续集成[J]计算机测量与控制,2016 (3):109-113
[6]施健.通用数据浏览器的设计实现[J]计算机应用研究,1996 (6):53-54.
[7]张增坤,张德杰,张群兴.光电发射光谱仪分析测量不确定度的评定[J].冶金标准化与质量,2014 (2):13-15.
[8]杨勇生.数据集成平台中多数据源包装器的实现[D].天津:天津大学,2008
[9]毛华,窦林立,杨蕾.树状结构组织的属性优先的概念格渐进式算法[J]计算机工程与应用,2008 (27):65-68
[10]杨善林,周开乐.大数据中的管理问题:基于大数据的资源观[J].管理科学学报,2015 (5):1-8.