天天看點

《大資料原理:複雜資訊的準備、共享和分析》一一2.3 注冊唯一對象辨別符

2.3 注冊唯一對象辨別符

唯一性是每個人都能完全了解的概念,似乎沒有解釋的必要。實際上,計算科學所指的唯一性與自然世界的唯一性有些不同。在計算科學中,唯一性是指一個資料對象與一個唯一的辨別符一一對應(即一個資料對象的辨別符不會被配置設定給任何其他資料對象)。我們大部分人會把資料對象看作是一種資料記錄,它可以由一個包含一串特征值的人名(包括身高、體重、年齡等)或包含一些實驗資料的血液樣本(包括白細胞數、紅細胞數、紅細胞壓積等)組成。對于計算機科學家來說,一個資料對象意味着資料價值得以保值,資料描述清晰、完整,資料屬性不變。當資料對象與其辨別符永久綁定時,資料對象的唯一性就可以實作。

唯一性對象有三個屬性:

1.唯一性對象可以從其他唯一性資料對象中區分開來。

2.唯一性對象無法從其自身中區分開來。

3.唯一性适用于唯一性對象集合(例如,屬于同一類的執行個體是唯一的)。

系統資料庫是一種可信任的服務,它為對象提供唯一的辨別符。注冊即每個資料對象使用者都使用由中央注冊中心提供的辨別符,唯一的對象系統資料庫很有用處,尤其是在資料對象辨別符永久不變的情況下。擁有一個中央權威的網址清單、圖書采購記錄和期刊摘要文本資訊是非常有意義的。下面列出一些釋出辨別符的組織:

在有些情況下,系統資料庫無法為資料對象提供完整的辨別符,而是向資源内的全部資料對象提供一個通用的辨別符序列,而資源内的各資料對象會額外添加本地給出的字尾序列。作為典型案例,生命科學辨別符(lsid)尤其能說明這種情況。每個lsid由五部分組成:網絡辨別符、機構辨別符(頂級的dns域名)、對象辨別符、命名空間辨別符和可選的修訂id。

在已釋出的lsid辨別符中,各個組成部分由冒号分隔開,如urn:lsid: pdb.org: 1aft:1,這個辨別1aft蛋白在蛋白質資料庫的第一個版本。其他lsid如:

辨別一個pubmed的引用。

辨別基因庫中一個條目的第二個版本。

對象辨別符(oid)是辨別符字首的層次結構。字首中連續數确定層次結構的遞減順序。以hl7的oid為例,它是處理健康資料交換協定的一個組織,記為:1.3.6.1.4.250。

這些連串資料的每個節點由一個點分隔開。注冊序列資訊夠細緻的話,可直接得到機構代碼。在本例中,hl7 oid正好是密歇根大學。

為資料對象建立oid的最後一步是在注冊字首的末端配置唯一的辨別号。這一步由資料管理者完成。這種方法的問題是,資料管理者配置的辨別号有時過于輕率,會破壞oid系統25。

舉個例子,醫院使用oid系統來識别圖像―它是醫學數字成像和通信标準(digital imaging and communications in medicine,dicom)的一部分。字首由永久性的機構和部門的注冊碼組成,字尾由建立圖像時産生的數字碼組成。例如,由計算機斷層攝影(ct)掃描器産生的第一幅圖像可以用oid辨別符和連字号以及數字1辨別。

最壞的情況是,不同的儀器可能會分别給圖像配置設定一串數字,而儀器間互相獨立。這意味着在房間a中建立的ct圖像辨別符與房間b中建立的ct圖像辨別符可能相同,而房間a與房間b的圖像來自不同的病人。這個問題可以通過限制每個ct掃描器使用任何其他ct掃描器數字配置設定補救。但這種方法也可能因為任何一個影響數字配置設定的系統出現故障而産生問題(例如,計數器被複位、損壞、更換或者簡單地被忽略)。

當圖像計數能正确完成時,掃描器也被限制配置設定唯一編号,那麼每個圖像就會被配置設定到唯一的辨別符(oid字首+圖像編号字尾)。盡管如此,随着時間的推移,使用連續編碼的圖像可能會造成辨別符混亂。當圖像服務更多部門,或者部門合并,又或者機構合并時,oid字首會發生變化;這時,在使用連續編号系統時,你可能希望在oid字首因合并發生變化後,可以建立辨別符副本。這樣,合并的兩個機構的原始記錄就可以被配置設定到相同的字首,而字尾保持不變(如圖像1、圖像2等)。

另一個可能出現的問題是一個對象有多個不同的唯一辨別符。一個軟體程式在設計時可能會忽略對象先前已被指定的唯一辨別符,而使用自身的配置設定方法生成新的辨別符。此種做法向軟體廠商提供了一種政策,即與其競争軟體給出的較差的辨別符分隔開來,并潛在地提高客戶對其軟體産品的粘連度。

oid系統為機構提供了一套優秀的辨別符,但機構内的資料對象需要有自己的辨別系統。例如,oid有一個對hl7的陳述:“雖然hl7應當在給第三方hl7分支配置設定oid前進行仔細調查,但鑒于全球oid注冊機制的缺乏,不能絕對肯定先前沒有為第三方實體的hl7賦oid值26。”

有時,想從中央注冊中心獲得唯一辨別符是不可行的。這主要發生在那些暫時的事務辨別上,如臨床實驗室的血液樣本的追蹤代碼。

網絡工作小組釋出了一個通用唯一辨別符(uuid,也稱為guid;見術語表,uuid),不需要中央注冊中心。一個uuid字長為128位,存儲位元組來自計算機時間戳的60位字元串27。如果使用得當,uuid将提供空間和時間上的唯一性。uuid最初用于阿波羅網絡計算系統,此後被用于開源軟體基金會的分布式計算環境。包括perl、python、ruby等在内的衆多計算語言已經内置生成uuid的程式19。

如果一個辨別系統采用長随機數序列,再加上時間戳,将具有很大優勢。假設你的系統由20個字元長的随機數序列和時間戳組成,則時間戳使用所謂的unix時間,這是自1970年1月1日零點開始已過的秒數。例如,1342883791發生在2012年7月21日那天。

使用一個随機字元生成器和一個時間測量儀可以生成唯一辨別符,大多數程式語言已嵌入這兩種程式。例如,辨別符mje03jdf8ctssdktewfk-1342883791。

随機序列裡的字元可以是大小寫、羅馬數字或任何标準鍵盤字元,這些總計約有128個字元,也即所謂的ascii字元(見術語表,ascii)。兩個20個字元長的随機序列完全一樣的機率是128的-20次方。如果給這個随機序列附加一個時間戳,那麼兩個序列完全等價時相當于這兩個序列有相同的随機數字首,并且辨別符是在同一時間建立的(見術語表,time stamp)。

使用長的、包含時間戳的随機序列的辨別符配置設定系統,完全不用擔心兩個不同的資料對象會被配置設定到相同的辨別符。

假設一個場景,你正利用的大資料資源每秒産生萬億個辨別符,在這些萬億的資料對象中,也許就有一天出現了重複的辨別符。當然,也可能不會出現,但這是資料管理者必須考慮的一個問題,這裡有一個解決方案。讓我們設想大資料資源擁有配置設定每秒萬億辨別符的能力,資料管理者保留每秒産生的新辨別符清單。由于建立了新辨別符,需要檢查這個清單以保證新的辨別符不與清單中的其他辨別符重複。在存在副本的情況下(雖然幾乎不可能發生),系統會停止産生辨別符零點幾秒,在這個時間間隔内,系統建立新的時間序列,辨別符的沖突問題完成了自我消化。

假設正在合并兩個大資料資源,如果在兩個資源中存在辨別符副本,你會怎麼做?當然,辨別符沖突的幾率小到完全有理由忽略其發生的可能性。忠于觀測事實的資料管理者會選擇在合并之前比較辨別符,一旦發現辨別符副本的存在,有必要采取注釋手段說明情況。

從技術角度來說,建立一個唯一性的辨別系統是完全可行的。讀者應該銘記,唯一性是一個設計良好的辨別系統的基本要求。

繼續閱讀