李鵬, 湯志杰
(宜興市人民醫院 信息科, 江蘇 宜興 214200)
隨著醫療信息化的不斷發展,醫療數據的擴展速度加快,覆蓋范圍不斷擴大。大數據時代的到來為健康和醫療領域創造了新的機遇。大數據概念本身在醫療保健領域并不新鮮,醫療保健提供者在處理大量的醫療記錄,尤其是慢性病時,不僅在質量和細節上有所提高,而且由于技術進步,其規模也在不斷增加[1]。通常醫療大數據主要來源包含醫學記錄、MRI、CT、健康監測數據、基因組數據等。然而,醫學數據可能是不完整的,有偏見的,甚至充滿了噪聲[2-3]。模糊信息、重復、噪聲和超高維對醫學數據的進一步利用將產生嚴重影響。
為了對數據進行分析,需要對數據進行預處理、數據建模、數據可視化和安全性等數據管理工作[4]。醫學大數據預處理、集成涉及數據ETL[5-6](Extract、Transform、Load,提取、轉換、加載)、多數據源集成、統一數據模型。基于現有大數據平臺的典型算法和工具主要是為了使數據分析更加方便有效。同時,面對復雜的醫學數據和日益增長的醫療需求,對于這樣的大型存儲庫,如何以高效性能進行數據分析、搜索和檢索已經成為一個挑戰[7]。
數據索引一直是提高查詢執行和數據搜索性能的有效機制。為此,國內外學者進行了許多深入研究,取得了眾多成果。楊輝等[8]基于自然語言處理技術,實現醫療大數據平臺上病歷庫中的相似病歷檢索。王紅遷等[9]基于Hadoop的關鍵技術和海量的醫療數據,開發實現跨數據域多條件關聯檢索的系統,幫助醫生快速獲取有效信息。
然而,對于傳統數據集的索引技術在應用于醫療大數據時表現不佳。因此,本文將著重研究醫療數據ETL管理、最小化索引開銷、提高查詢執行和搜索性能以及在聚合計算資源利用率的同時滿足處理需求的醫療健康檔案管理系統。同時考慮索引創建時間和索引大小,以便在工作中最小化索引開銷。此外,為了評估查詢執行和搜索性能,以仿真案例分析索引遍歷時間和數據檢索時間。
健康檔案管理系統是用于患者健康檔案管理及大數據索引的通用框架,可在任何分布式系統上實現。該系統作為用戶和分布式數據管理系統之間的中間層,可提供數據上傳、查詢執行機制及提供索引以方便對數據的搜索操作。
系統體系架構如圖1所示。

圖1 健康檔案管理系統體系架構
共包括3層:(1) 用戶界面(UI)層;(2) 應用層;(3) 數據層。用戶通過界面層發起數據上傳和索引創建操作,同時查詢和索引搜索的結果由應用層返回至界面層供用戶瀏覽。應用層接受來自界面層的數據上傳和索引指令,并調用數據塊創建在數據層存儲數據,調用索引創建在數據倉庫中創建索引。應用層還將查詢作為界面層的輸入,對存儲在文件系統中的數據調用索引搜索,并通過界面將所需的數據返回給用戶。數據層負責在可用存儲上容納數據塊和指定的副本確保數據安全。
根據系統架構圖可知,健康檔案管理系統可分解為四個模塊:ETL、數據塊創建、索引創建和查詢。ETL模塊將從多個來源(如慢性病和健康監測數據源)提取數據,并對其進行清理、定制和插入到數據倉庫中;第二個模塊用于創建數據塊,從而提高存儲及檢索的效率;索引創建模塊利用B行樹結構存儲從數據塊中提取的
ETL(Extract、Transform、Load)是醫療數據倉庫中常用的數據庫操作過程。ETL過程是數據倉庫的關鍵組成部分,因為不正確或誤導性的數據將可能產生錯誤的醫療決策。執行任務所依據的數據通常來自不同的來源,例如組織內各部門的多個可操作慢性病和健康監測數據庫,以及外部供應商。不同的源包含不同質量的數據,并且使用不一致的表示、代碼和格式。
現代大數據處理系統為大數據提供了分布式存儲,數據可靠性通過數據復制得到加強。此外,每個大數據存儲系統都有自己的數據分割機制,其中數據塊大小和在數據倉庫中的位置是確定的。當將數據拆分為固定大小的數據塊時,最后一條記錄將面臨中斷威脅從而造成數據損壞。因此,訪問多個站點以檢索損壞記錄會增加總體數據加載時間。因此,為了減少訪問結果記錄所需的時間,每個記錄都應該作為一個整體從單個站點訪問。也就是說,引入數據塊的模式使得每個塊中的最后一個記錄永遠不會被分割。
在數據塊創建階段,記錄被讀取并存儲在塊中,直到塊達到其存儲限制。本文提供的塊大小可根據數據中的正常記錄大小或ETL系統的默認塊大小進行調整。假設數據集表示為D,包含x條記錄,則有式(1)。
(1)
其中,recordc表示第c條記錄。進一步,算法1給出了數據塊的創建過程。在分布式數據系統中,數據塊的創建發生在數據上傳之前,并將數據分成更小的塊。然后將每個塊以可調的復制因子加載到數據倉庫中。

算法1 創建數據塊輸入:block_l=D_s,即數據塊容量限額為D_s;flag_c=true,即數據塊容量是否滿額標識符;block_n=0,表示初始化數據塊個數;while讀取數據 do If flag_c=true and block_l 索引創建過程在數據加載到數據倉庫后進行,創建索引可以縮短數據檢索時間。此外,還需要減少索引創建所帶來的開銷,這樣不僅可以最小化數據上傳到開始執行查詢之間的延遲,而且還可以減少索引所消耗的額外空間。索引創建過程通過使用B-Tree結構進行索引來減少空間和時間開銷。在索引創建階段,將每個索引屬性記錄的內容作為鍵,將該記錄的位置作為值。索引的創建過程如算法2所示。 如前所述,索引在大數據處理中起著重要作用,它會導致系統開銷增大。因此,從索引中獲得的搜索性能必須大于索引創建過程所造成的開銷。本節將展示系統查詢執行模塊。查詢執行模塊執行索引搜索并成功檢索索引和非索引屬性。數據塊的容錯性和可用性取決于底層數據層。因此,只要存儲的數據塊和索引可以從底層數據倉庫中訪問,系統的查詢執行模塊就會成功執行。此外,使用該模塊完成查詢執行和數據檢索過程,取決于查詢中謂詞的選擇。查詢執行模塊不為將非索引屬性作為選擇謂詞的查詢提供服務。 使用索引執行查詢的過程如算法3所示。 算法3 執行查詢輸入:錯誤信息err_msg;查詢query;索引index;目標名稱name;目標屬性attr;數據塊位置block_loc;B-Tree 首先,分析傳入查詢以驗證其語法并驗證查詢中指定的參數。在顯示相應的錯誤消息后,系統將丟棄具有鍵入錯誤、語法錯誤或與文件系統中的任何文件不匹配的查詢。通過對查詢字符串的成功分析,我們可以確保查詢索引的可用性(只有當索引對查詢的選擇謂詞不可用時,才建議執行完全掃描操作)。我們加載并遍歷相應的索引以查找記錄的位置。最后,通過直接訪問期望記錄的位置從文件中提取數據。下一節將給出顯示搜索操作性能的結果。 為驗證本文所提架構性能,接下來以一個案例進行仿真分析。本文提出的所有模塊和相關算法開發環境為Ubuntu系統下使用Python開發,評估監控管理系統時系統數據集如表1所示。 表1 系統數據集 系統驗證時的數據集包括醫學記錄數據、MRI數據、CT數據、健康監測數據及基因組數據。這些數據集大小不等、格式各異并包含不同數量的信息。數據集的這些特性會影響數據加載開銷、索引開銷和最終的搜索性能。 進一步,將本文所提檢索算法與啟發式搜索檢索結果進行比較。不同算法實現數據分類、檢索算法的效率對比結果,如圖2所示。 圖2 不同算法數據分類、檢索效率對比結果 由圖2可知,當數據量較少時,兩種算法性能相差無幾。但隨著數據量不斷增多,本文方法檢索效率不斷提高,并且遠高于啟發式算法。特別是當索引文件數量較多時,啟發式算法的檢索率越來越低,不堪重負。故本文方法更適合于海量數據的檢索工作。 本文對醫學數據預處理、數據建模、安全性、數據檢索等進行了研究,提出了具有數據管理及高效檢索的健康檔案管理系統。該系統提供了在數據集上創建多個索引的功能,索引開銷最小,創建和遍歷方面足夠快,占用的空間更少,從而提高了數據管理及搜索性能。 本文在系統建立及模型驗證時運行在較理想環境,假定模型不會遭受如惡意攻擊、信息篡改等情況。未來研究的方向可包括用戶隱私保護、數據安全分析及解決時延、干擾等通信問題。2.3 索引創建

2.4 執行查詢

3 仿真分析


4 總結