滕愛國(guó) 譚晶 查易藝 陳飛園 吳震寰
摘要:近20年來,中子和同步加速器科學(xué)共同體一直希望有一種共同的數(shù)據(jù)格式,用于交換實(shí)驗(yàn)結(jié)果和應(yīng)用,以便減少數(shù)據(jù)、分析數(shù)據(jù)。使用HDF5作為數(shù)據(jù)載體已成為許多設(shè)施的標(biāo)準(zhǔn)。最大的問題是在HDF5內(nèi)的數(shù)據(jù)組織(模式)的標(biāo)準(zhǔn)化。通過為數(shù)據(jù)訪問引入新的間接層:公共數(shù)據(jù)模型訪問(CDMA)框架,文章提出了一種解決方案,允許數(shù)據(jù)壓縮開發(fā)人員與研究所責(zé)任分離:數(shù)據(jù)壓縮開發(fā)人員負(fù)責(zé)數(shù)據(jù)簡(jiǎn)化代碼;研究所提供訪問數(shù)據(jù)的插件。CDMA是一種核心API,它通過科學(xué)家和研究所共同認(rèn)可的數(shù)據(jù)格式插件機(jī)制和科學(xué)的程序定義(關(guān)鍵字集合)來訪問數(shù)據(jù)。在應(yīng)用程序定義和物理數(shù)據(jù)組織之間使用一種新型映射系統(tǒng),CDMA允許數(shù)據(jù)壓縮程序獨(dú)立于數(shù)據(jù)文件載體和模式下開發(fā)。每個(gè)機(jī)構(gòu)都為自己的數(shù)據(jù)文件格式開發(fā)一個(gè)數(shù)據(jù)訪問插件,以及程序定義和數(shù)據(jù)文件之間的映射。因此,數(shù)據(jù)壓縮程序可以從嚴(yán)格科學(xué)的角度開發(fā),并能立即處理來自多個(gè)研究所的數(shù)據(jù)。
關(guān)鍵詞:公共數(shù)據(jù)模型訪問;數(shù)據(jù)分析;數(shù)據(jù)可視化;數(shù)據(jù)壓縮;字典機(jī)制
1 項(xiàng)目的起源
ESRF,SOLEIL,DESY和ANSTO軟件開發(fā)專注于數(shù)據(jù)處理框架的設(shè)計(jì),并在NeXus(SOLEIL使用的標(biāo)準(zhǔn)數(shù)據(jù)格式)數(shù)據(jù)存儲(chǔ)層上運(yùn)行[1]。協(xié)作的主要問題使用獨(dú)立于數(shù)據(jù)載體和模式的共同工具。通過使用一組Java接口的數(shù)據(jù)模型,在ANSTO上使用GumTree數(shù)據(jù)模型以在底層的NeXus文件(標(biāo)準(zhǔn)數(shù)據(jù)格式)中訪問抽象數(shù)據(jù)文件。我們預(yù)計(jì)這是一個(gè)很有前景的發(fā)展方向。
這個(gè)概念引起了SOLEIL的注意,因?yàn)樗『眯枰谝粋€(gè)基于NeXus的統(tǒng)一的數(shù)據(jù)訪問層上建立它的COMETE項(xiàng)目,一個(gè)旨在緩解數(shù)據(jù)可視化和數(shù)據(jù)分析程序編程方面的問題Java框架。
2010年1月,在ICALEPCS 2009會(huì)議上兩位作者會(huì)面之后,ANSTO和SOLEIL開始合作。這項(xiàng)工作是從ANSTO的GumTree項(xiàng)目的數(shù)據(jù)訪問層開始的,用Java編寫。
在2011年第四季度,DESY將參與合作并幫助我們開發(fā)C++的CDMA端口。2動(dòng)機(jī)分析
必須理解的重要一點(diǎn)是,數(shù)據(jù)格式不是問題。問題是如何讓我們研究所的用戶使用相同的工具,而不考慮數(shù)據(jù)的來源。
即使在相同的同步加速器或中子發(fā)施中,在通過光束線時(shí)數(shù)據(jù)結(jié)構(gòu)也不盡相同。NeXus標(biāo)準(zhǔn)很有用,但還不足以保證一致性。對(duì)標(biāo)準(zhǔn)的解釋允許兩個(gè)相同的光束線具有不同的數(shù)據(jù)結(jié)構(gòu)。
CDMA的目的是提供一個(gè)抽象的數(shù)據(jù)訪問層,以構(gòu)建分析程序或壓縮程序,而不考慮數(shù)據(jù)結(jié)構(gòu)。
類HDF的格式允許使用API[2]記錄任何類型的數(shù)據(jù);抽象了物理文件組織。類NeXus規(guī)范是一組標(biāo)準(zhǔn)化工作中的邏輯數(shù)據(jù)組織。這種標(biāo)準(zhǔn)化可能適用于各種以樹為導(dǎo)向的數(shù)據(jù)格式(如HDF或XML)。這種方法的問題在于,設(shè)備必須生成嚴(yán)格遵守規(guī)范的數(shù)據(jù)文件。這是一個(gè)巨大的挑戰(zhàn),因?yàn)槊總€(gè)設(shè)施的工組人員(主要是科學(xué)家和工程師)在采集系統(tǒng)和實(shí)驗(yàn)相關(guān)數(shù)據(jù)方面都有自己的觀點(diǎn),并且數(shù)據(jù)記錄系統(tǒng)很少驅(qū)動(dòng)硬件和數(shù)據(jù)采集過程。
CDMA背后的想法是逆轉(zhuǎn)數(shù)據(jù)的觀點(diǎn)。與其不顧一切地使各個(gè)機(jī)構(gòu)數(shù)據(jù)文件標(biāo)準(zhǔn)化,還不如引入一層來隱藏?cái)?shù)據(jù)存儲(chǔ)的不同方式。我們覺得這是可實(shí)現(xiàn)的。
筆者建議使用NeXus標(biāo)準(zhǔn)。隨著標(biāo)準(zhǔn)的成熟,NeXusAPI可能會(huì)取代CDMA,盡管CDMA現(xiàn)在允許處理各種標(biāo)準(zhǔn)解釋,我們還是建議各個(gè)設(shè)備參與到NeXus的標(biāo)準(zhǔn)化進(jìn)程中。
每個(gè)機(jī)構(gòu)將繼續(xù)使用最合適的格式來產(chǎn)生數(shù)據(jù)。在進(jìn)行兼并之前,不必等待最終的數(shù)據(jù)組織規(guī)范再共享數(shù)據(jù)和程序。
3 CDMA的介紹
CDMA的組成:(l)用于編寫數(shù)據(jù)壓縮和分析應(yīng)用程序的客戶端層API。(2)用于構(gòu)建數(shù)據(jù)訪問插件的開發(fā)者API。CDMA常規(guī)使用圖解如圖1所示。
客戶端API。使用客戶端API,數(shù)據(jù)壓縮程序開發(fā)人員不必了解任何關(guān)于文件格式的信息,因?yàn)锳PI使用了一個(gè)抽象的數(shù)據(jù)訪問層,它隱藏了數(shù)據(jù)文件規(guī)范。 數(shù)據(jù)源插件。數(shù)據(jù)文件規(guī)范是通過插件機(jī)制嵌入的。因此,研究機(jī)構(gòu)有責(zé)任開發(fā)他們的數(shù)據(jù)訪問插件,以便通過CDMA訪問其研究所獲得的數(shù)據(jù)集。
傳統(tǒng)導(dǎo)航API。不過,使用導(dǎo)航API,數(shù)據(jù)壓縮開發(fā)人員必須精確地知道應(yīng)用程序訪問的每個(gè)數(shù)據(jù)文件中的數(shù)據(jù)模式。這很浪費(fèi)時(shí)間。這也是這些項(xiàng)目在其開發(fā)組織之外使用的一個(gè)障礙。
字典機(jī)制。為了解決這個(gè)問題,CDMA引入了一種新的數(shù)據(jù)訪問方法。這就是字典機(jī)制[3]。
使用此機(jī)制,數(shù)據(jù)壓縮程序開發(fā)人員不再需要知道數(shù)據(jù)模式。而是使用關(guān)鍵字訪問數(shù)據(jù)。關(guān)鍵字是一個(gè)短字符串,用于命名科學(xué)測(cè)量或通用技術(shù)數(shù)據(jù)項(xiàng)。因此,訪問數(shù)據(jù)壓縮程序的源代碼部分更簡(jiǎn)單、更穩(wěn)定(這是最重要的)。
考慮到這一機(jī)制,科學(xué)家必須在關(guān)鍵字的名稱上達(dá)成一致,并不需要考慮數(shù)據(jù)的物理結(jié)構(gòu)如何。此外,同樣的測(cè)量數(shù)據(jù)可能有不同的單位(例如波長(zhǎng)和能量),所以CDMA提供了同步轉(zhuǎn)換機(jī)制。
需要注意的是,老式導(dǎo)航API仍然可用,但我們更加建議使用字典API。
3.1客戶端API
客戶端API定義了抽象數(shù)據(jù)源的接口。有3個(gè)層次的抽象:(1)頂層是IDataset接口,它代表一個(gè)實(shí)驗(yàn)的所有數(shù)據(jù)處理。(2) IGroup(或ILogicaIGroup:如果使用字典機(jī)制,請(qǐng)參閱下文)定義了一組相關(guān)數(shù)據(jù)。每個(gè)數(shù)據(jù)集至少有一個(gè)根組;一個(gè)組可以包含子組和數(shù)據(jù)項(xiàng)。(3) IDataltem定義了單個(gè)值或量度,它可以是標(biāo)量或多維數(shù)組。
有了數(shù)據(jù)訪問層,數(shù)組類可支持多維數(shù)組的高效操作。它不僅僅是一個(gè)原始的Java或C++數(shù)組。它是一個(gè)科學(xué)的數(shù)據(jù)對(duì)象,允許你分片或分塊并在此基礎(chǔ)上做數(shù)學(xué)運(yùn)算。CDMA還提供了一個(gè)允許錯(cuò)誤傳播的類,該錯(cuò)誤對(duì)象提供了基于泊松統(tǒng)計(jì)數(shù)據(jù)的計(jì)數(shù)不確定性的傳播。這可以擴(kuò)展到其他不確定性計(jì)算。
3.2數(shù)據(jù)源插件系統(tǒng)
使用CDMA庫(kù),數(shù)據(jù)壓縮開發(fā)人員并不關(guān)心數(shù)據(jù)模式。插件機(jī)制動(dòng)態(tài)地加載從數(shù)據(jù)文件中訪問數(shù)據(jù)的插件(動(dòng)態(tài)庫(kù))[4]。因此,該機(jī)制允許用戶在同一會(huì)話中打開從不同機(jī)構(gòu)獲得的文件。
3.3字典機(jī)制
字典機(jī)制依賴于兩個(gè)XML文檔。
3.3.1數(shù)據(jù)定義
第一個(gè)文檔是匹配科學(xué)或技術(shù)數(shù)據(jù)項(xiàng)的關(guān)鍵字。例如,一個(gè)叫電流的鍵在采集時(shí)間應(yīng)該指代存儲(chǔ)環(huán)中的有效電流。這些關(guān)鍵字可以通過這個(gè)文檔列出,或者通過樹狀結(jié)構(gòu)來組織。在后一種情況下,這個(gè)文檔描述了一個(gè)特定于數(shù)據(jù)的視圖,比如NeXus應(yīng)用程序定義[5]。
該文檔旨在獨(dú)立于數(shù)據(jù)的物理組織方式。這份文檔至少有兩種寫法:(1)它可以為已經(jīng)存在的特定數(shù)據(jù)分析應(yīng)用程序編寫,并適用于CDMA的使用。(2)或者它可以獨(dú)立于任何應(yīng)用程序編寫,比如NeXus應(yīng)用程序定義。數(shù)據(jù)定義舉例如圖2所示。
3.3.2關(guān)鍵字映射
第二個(gè)文檔是字典本身。它是關(guān)鍵字與真實(shí)路徑之間的映射。它需要在文件中準(zhǔn)確地匹配數(shù)據(jù)模式。NeXus文件映射舉例如圖3所示。
3.3.3責(zé)任
給定一個(gè)關(guān)鍵字列表,產(chǎn)生實(shí)驗(yàn)數(shù)據(jù)的研究所必須編寫與他們的數(shù)據(jù)文件結(jié)構(gòu)相對(duì)應(yīng)的映射文檔。
4 當(dāng)前的狀態(tài)
實(shí)現(xiàn)CDMA有兩種方式:Java和C++。Java實(shí)現(xiàn)在實(shí)際操作中己十分成熟,并且已經(jīng)可以在SVN Codehaus存儲(chǔ)庫(kù)中使用[6]。
ANSTO開發(fā)了一種基于Java版本的CDMA的數(shù)據(jù)瀏覽器[7],并將使用CDMA的4個(gè)中子束儀作為Gumtree生態(tài)系統(tǒng)的一部分。ANSTO上基于CDMA的數(shù)據(jù)瀏覽器如圖4所示。
在SOLEIL方面,基于CDMA的數(shù)據(jù)并用Java編寫的兩個(gè)數(shù)據(jù)壓縮程序,目前正在生產(chǎn)中,可用于SWING(SAX獲?。┖蚇TARES(EXAFS,光電發(fā)射測(cè)量)[8]。一種在SOLEIL上使用CDMA的數(shù)據(jù)壓縮程序如圖5所示。
我們正在進(jìn)行C++的實(shí)現(xiàn),并計(jì)劃于2012年初發(fā)布。然后將根據(jù)這個(gè)C++的實(shí)現(xiàn)開發(fā)一個(gè)Python端口。
5結(jié)語
第一次使用CDMA的結(jié)果證明其非常有效。研究發(fā)現(xiàn),由于開發(fā)人員不必再處理數(shù)據(jù)格式,開發(fā)新的數(shù)據(jù)壓縮程序所需的時(shí)間大大減少了。在技術(shù)方面,隨著新參與者(DESY, ANKA,…)的到來,我們建立了一個(gè)社區(qū),可以通過擴(kuò)大數(shù)據(jù)壓縮程序和數(shù)據(jù)源插件[9]的數(shù)量來快速發(fā)展這個(gè)項(xiàng)目,從而支持交叉研究所的實(shí)驗(yàn)文件交換。
最后強(qiáng)調(diào)—下,我們始終相信CDMA是一個(gè)對(duì)數(shù)據(jù)管理問題[10]。說有價(jià)值的技術(shù)方案。隨著CDMA現(xiàn)在提供了一個(gè)一直希望得到的解決方案,即通過透明的方式交換機(jī)構(gòu)之間的數(shù)據(jù)文件和數(shù)據(jù)分析程序,像PANDATA HDRI,NFFA等這樣的歐洲項(xiàng)目的數(shù)據(jù)管理問題都可被解決。
[參考文獻(xiàn)]
[1lMANJU NATN S.片上調(diào)試建立Nexus標(biāo)準(zhǔn)[J]電子設(shè)計(jì)技術(shù),2000 (9):62,64,66.
[2]呂晨,姜偉,虎嵩林.一種基于新型圖模型的API推薦系統(tǒng)[J].計(jì)算機(jī)學(xué)報(bào),2015 (11):2172-2187
[3]馬志強(qiáng),周長(zhǎng)勝,楊娜,等.基于中文搜索引擎的分詞詞典的設(shè)計(jì)與實(shí)現(xiàn)[J]鐵路計(jì)算機(jī)應(yīng)用,2016 (12):45-47
[4l曹玉林,馬建萍.基于操作系統(tǒng)的動(dòng)態(tài)庫(kù)分析及移植方法[J].西北民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2004 (4):52-55
[5]姜文,劉立康.基于SVN的應(yīng)用軟件持續(xù)集成[J]計(jì)算機(jī)測(cè)量與控制,2016 (3):109-113
[6]施健.通用數(shù)據(jù)瀏覽器的設(shè)計(jì)實(shí)現(xiàn)[J]計(jì)算機(jī)應(yīng)用研究,1996 (6):53-54.
[7]張?jiān)隼ぃ瑥埖陆?,張群興.光電發(fā)射光譜儀分析測(cè)量不確定度的評(píng)定[J].冶金標(biāo)準(zhǔn)化與質(zhì)量,2014 (2):13-15.
[8]楊勇生.數(shù)據(jù)集成平臺(tái)中多數(shù)據(jù)源包裝器的實(shí)現(xiàn)[D].天津:天津大學(xué),2008
[9]毛華,竇林立,楊蕾.樹狀結(jié)構(gòu)組織的屬性優(yōu)先的概念格漸進(jìn)式算法[J]計(jì)算機(jī)工程與應(yīng)用,2008 (27):65-68
[10]楊善林,周開樂.大數(shù)據(jù)中的管理問題:基于大數(shù)據(jù)的資源觀[J].管理科學(xué)學(xué)報(bào),2015 (5):1-8.