左銘,萬歆,劉迎,崔潔,朱立峰上海交通大學醫學院附屬瑞金醫院計算機中心,上海 200025
臨床數據中心數據處理過程的實現
左銘,萬歆,劉迎,崔潔,朱立峰
上海交通大學醫學院附屬瑞金醫院計算機中心,上海 200025
中國醫院信息化建設從20世紀90年代起步,從最初的收費模塊、掛號模塊和診斷模塊,到后來完善的醫院信息系統(HIS)、實驗室信息系統(LIS)、醫學影像存儲與傳輸系統(PACS)、放射科信息管理系統(RIS)、電子病歷(EMR)系統等,已積累和沉淀了大量的臨床數據,同時也存在著大量的數據冗余,例如幾乎每個系統都有一套病人基本信息,且存在著數據的不一致性。近年來,不少醫院和廠商在不同系統之間進行了一定的數據同步,或采用了企業服務總線(Enterprise Service Bus)之類的數據共享平臺或中間件來同步或共享數據,但是對于醫生或行政管理人員來說,為了獲取所需的完整數據,還是要在不同系統界面間切換,甚至需要分別登錄這些系統,帶來了巨大的工作量。
對于大型三級甲等綜合性教學醫院,一般擁有大量臨床診療應用系統,總數據量多達約數10 TB(含影像數據文件)。如何充分合理利用這些多年積累起來的臨床診療數據,是我們面臨的一個難題。由于數據散落在不同的應用系統之中,數據存儲結構差異較大,系統之間沒有直接的交互,缺乏統一的標準,醫生在進行診療和科研時,很難對這些數據進行方便、合理的收集和分析。所以,當前急需建立一個統一的臨床數據中心來對臨床診療決策和臨床科研分析進行支持。
臨床數據中心對數據收集和處理的手段之一是通過抽取、轉換、加載(Extraction Transformation Load,ETL)過程實現數據的轉移和轉換。本文重點介紹我院在構建臨床數據中心時,將數據從數據源裝載到數據倉庫的ETL過程的具體實現方法。
2.1 數據流架構
一個數據倉庫系統通常包含兩種主要數據架構:數據流架構和系統架構。數據流架構是有關如何在數據倉庫中組織數據存儲以及數據如何從源系統經過數據存儲,流向最終用戶;系統架構是有關服務器、網絡、軟件、存儲和客戶端的系統配置[1]。數據流架構通常有多維數據存儲(Dimensional Data Store,DDS),規范化數據存儲(Normalized Data Store,NDS)+DDS,操作數據存儲(Operational Data Store,ODS)+DDS三種形式。
大型醫院目前擁有HIS、LIS、RIS、EMR等業務系統,數據庫產品有MS SQL Server、 Sybase ASE和Oracle等,為了使數據ETL過程對實時業務系統的影響降到最低,一般采用NDS+DDS 的數據流架構,即從數據源裝載到數據倉庫,再到NDS的數據流架構,見圖1。

圖1 數據流架構
其中,Stage為源系統數據的一個副本,從數據源裝載到數據倉庫的ETL過程并不對數據進行刪減、修改或整合,僅負責抽取和裝載,而從數據倉庫到NDS的ETL過程,則需要按照數據倉庫建模的需要對數據進行一定的清洗和轉換。
2.2 數據庫復制
當數據從源系統的數據庫被讀取并寫入到Stage數據庫中,不可避免的會對源系統產生一定的影響,尤其對于HIS、LIS這類特別繁忙的業務系統而言,為了避免對其進行直接對接和數據抽取,當下流行的方式有硬盤整盤拷貝技術以及數據庫復制兩種。但是為了捕獲增量數據,一般選擇數據庫表中有時間戳(Timestamp)字段。對于原業務系統中無時間戳字段,可以利用數據庫產品的事務復制功能,由系統自動跟蹤 INSERT、UPDATE和 DELETE 等DML語句或其他數據修改,并將這些更改數據存儲到分發數據庫中,然后將更改數據傳播到訂閱服務器上,并按其發生次序加以執行,這樣就不需要對生產數據庫的表結構進行改動,而只需在訂閱數據庫的表上增加時間戳字段。數據庫復制是一種技術,它將數據和數據庫對象從一個數據庫復制和分發到另一個數據庫,然后在數據庫間進行同步,以維持一致性。復制的拓撲結構包括發布服務器、分發服務器、訂閱服務器及發布、項目和訂閱等組件。
醫院的臨床業務系統屬于業務繁忙、吞吐量大的OLTP(聯機事務處理系統),通過設置分發服務器、訂閱服務器以及相關組件,來建立系統的復制服務,并在訂閱服務器的相關表中增加了時間戳字段用于識別增量數據,通過元數據管理服務對增量數據的抽取進行管理和控制,既不影響生產系統的正常運行,又能保證數據的完整性和一致性,同時能識別出增量數據,提高了數據抽取的效率和實時性。
2.3 增量數據的抽取
數據倉庫在企業管理和決策中是面向主題的、集成的、與時間相關的、非易失的;其數據隨時間變化,是支持各層管理的數據集合[2]。但是,近年來對于數據倉庫中數據的時效性要求越來越高,如在臨床科研隨訪中,對于每個參與臨床隨訪患者的每次就診數據都必須及時匯總到隨訪數據庫中,以供科研分析支持。對新增數據識別,并及時地抽取到數據倉庫中,這就是對增量數據抽?。–DC)。
增量數據的識別很大程度上依賴于時間戳。時間戳,通常是一個字符序列,唯一地標識某一刻的時間。通過記錄每次抽取數據的最后時間戳(終點),來作為下一次抽取的起始時間戳(起點),就可以很容易收集兩次抽取之間的變化數據。時間戳字段在數據庫系統中通常由系統自動產生,這樣就可以避免數據的遺漏。對于采用復制方式的源數據抽取,是在訂閱數據庫的相關表中增加時間戳字段,由于生成時間戳需要一定的系統開銷,這樣就可以避免生產庫生成時間戳數據而對生產系統帶來性能的損失。對于繁忙程度較低的系統,如病理系統、手麻系統等,我們直接在生產庫的相關表中增加時間戳字段來捕獲增量數據。
我們使用SQL Server 2005版本以上的系統,開啟數據庫提供的CDC服務來獲取增量數據。SQL SERVER CDC Service通過對事務日志的異步讀取,記錄操作的發生時間、類型和實際影響的數據變化,然后將這些數據記錄到啟用CDC時自動創建的表中。通過CDC相關的存儲過程,可以獲取詳細的數據變化情況。由于數據變化是異步讀取的,對整體性能的影響不大,遠小于通過Trigger實現的數據變化記錄。此外,通過SQL Server集成服務(SQL Server Integration Services,SSIS)工具箱中的CDC控制任務和數據流任務中的CDC拆分器,可以很容易地識別出增量數據,且可以分別獲得新增、更新和刪除的數據集。
捕獲增量數據的另一種手段是使用觸發器技術,來記錄變更的數據。但這種方式會對系統產生一定的性能損失,有時甚至會影響到業務系統的正常運行,因此不建議輕易使用該技術。如果采用復制技術,也可以在訂閱服務器上使用觸發器。顯然在訂閱服務器相關表上增加時間戳字段是保障系統性能更優的選擇。
2.4 ETL工具
目前,主流的數據庫供應商都提供了各自的ETL工具[3-4]。本文以微軟SSIS(企業級的)工具為例來介紹ETL過程。該工具包括用于生成和調試包的圖形工具和向導;用于執行工作流函數(如FTP操作)、執行SQL語句或發送電子郵件的任務;用于提取和加載數據的數據源和目標;用于清理、聚合、合并和復制數據的轉換;用于管理集成服務,以及用于對集成服務對象模型編程的應用程序編程接口(API)。
在Microsoft的所有工具中,SSIS是最重要的商業智能工具,該工具具有清洗和將數據轉換為合適的格式的功能,并可以快速地完成對數據的提取、轉換和加載。同其他的ETL工具相比,SSIS是隨SQL Server數據庫產品一起提供的,有較好的經濟適用性。
在臨床數據中心的ETL設計和實現過程中,我們通過不斷地實踐,反復地調試,使整個ETL過程達到了預期目標。同時也積累了一些經驗和教訓[5-8]:
(1)ETL過程應盡可能地配置大內存服務器,并給數據庫服務配置較高的內存份額以提高數據讀取和寫入的性能。
(2)提高創建索引所使用的內存配額。由于Stage中的數據需要對增量讀取,DW數據庫的目標表寫入時需要進行查找等操作來進行數據清洗,所以需要在相關字段創建索引,提高查找的效率。
(3)對于SQL Server數據庫源,抽取數據的查詢語句加上option,并指定參數為MAXDOP ?,問號處設置數字1~9,如option (MAXDOP 6)。該選項用于忽略由Sp_ configure 設定的針對查詢的最大并行線程數目,以此來提高查詢的并行度,以充分利用服務器的CPU資源。
(4)利用SSIS的CDC源抽取數據時,開啟CDC服務的源數據庫,必須設置CDC源的CommandTimeout,如300 s,而不要使用系統默認值。系統默認值為0,表示無限超時時間,但實踐表明,若不進行設置,SSIS運行時會拋出命令執行超時的異常。
(5)設置數據流目標時使用快速加載選項,快速加載選項數據插入采用Bulk Insert,大大提升了插入速度,但由于不產生日志,所以目標表的觸發器將不會執行。
(6)利用SQL Server的預估執行計劃對數據抽取的SQL語句進行分析,對于查詢優化器未使用到索引的大表的查詢操作,在查詢語句的表名后面加上with (index(索引名稱))的選項,強制查詢優化器使用索引來進行查詢。
(7)將“執行卷維護任務”權限賦予給SQL Server的啟動賬戶。這樣在數據庫文件增長時可以避免清零操作,最大限度地減少數據庫文件增長造成的影響。
(8)將“鎖定內存頁”權限賦予給SQL Server的啟動賬戶,避免SQL Server進程被操作系統頁出(page out)。
[1] Vincent Rainardi. Building a Data Warehouse With Examples in SQL Server[M].Berkeley,CA:Apress,Inc,2008:29.
[2] W.H.Inmon.Building the Data Warehouse[M].Third Edition.New York:Wiley Computer Publishing,2002:31.
[3] 徐春艷.面向實時數據倉庫的ETL研究[D].南京:南京航空航天大學,2007.
[4] 張旭峰,孫未未,汪衛,等.增量ETL過程自動化產生方法的研究[J].計算機研究與發展,2006,43(6):1097-1103.
[5] 安繼業,薛萬國,史洪飛,等.臨床數據中心構建方法探討[J].中國數字醫學,2008,(10):13-16.
[6] 施今馳.數據挖掘技術在醫院信息系統中的應用[J].中國醫療設備,2012,27(1):86-88.
[7] 俞磊,楊宋濤,王宗殿.基于數據倉庫的醫院決策系統的研究與設計[J].計算機與數字工程,2010,38(4):142-145.
[8] 林超英.數據挖掘在醫院信息化建設中的應用研究[J].信息與電腦(理論版),2011,(2):127-128.
Implementation of Data ETL Processes in the Clinical Data Center
ZUO Ming, WAN Xin, LIU Ying, CUI Jie, ZHU Li-feng
Computer Center, Ruijin Hospital Affiliated to the Shanghai Jiao Tong University School of Medicine, Shanghai 200025, China
構建臨床數據中心是進行臨床診療決策和臨床科研分析的重要手段。本文重點介紹了我院在構建臨床數據中心過程中,將各信息系統的數據從數據源裝載到數據倉庫的抽取、轉換、加載的具體實現方法,同時也總結了經驗、教訓,供同行參考。
醫院信息系統;臨床數據中心;ETL;數據庫復制
Construction of the clinical data center is an important approach for decision-making of clinical diagnosis and treatment as well as analysis of clinical and scientific researches. Ruijin Hospital Affiliated to the Shanghai Jiao Tong University School of Medicine is exemplified in this paper for its successful implementation of data ETL (Extraction-Transformation-Load) processes in loading the data of multiple information systems from the data source to the data warehouse during construction of the clinical data center in the hospital. Experiences and lessons are also summarized in this paper to provide references for hospital in China.
hospital information system; clinical data center; extraction-transformation-load; database replication
TP392
A
10.3969/j.issn.1674-1633.2015.04.023
1674-1633(2015)04-0078-03
2014-10-10
2015-02-09
上海市科學技術委員會成果轉化與應用課題(1251150 2406)。
朱立峰,高級工程師。
通訊作者郵箱:zlf@rjh.com.cn