左銘,萬歆,劉迎,崔潔,朱立峰上海交通大學(xué)醫(yī)學(xué)院附屬瑞金醫(yī)院計算機(jī)中心,上海 200025
臨床數(shù)據(jù)中心數(shù)據(jù)處理過程的實現(xiàn)
左銘,萬歆,劉迎,崔潔,朱立峰
上海交通大學(xué)醫(yī)學(xué)院附屬瑞金醫(yī)院計算機(jī)中心,上海 200025
中國醫(yī)院信息化建設(shè)從20世紀(jì)90年代起步,從最初的收費模塊、掛號模塊和診斷模塊,到后來完善的醫(yī)院信息系統(tǒng)(HIS)、實驗室信息系統(tǒng)(LIS)、醫(yī)學(xué)影像存儲與傳輸系統(tǒng)(PACS)、放射科信息管理系統(tǒng)(RIS)、電子病歷(EMR)系統(tǒng)等,已積累和沉淀了大量的臨床數(shù)據(jù),同時也存在著大量的數(shù)據(jù)冗余,例如幾乎每個系統(tǒng)都有一套病人基本信息,且存在著數(shù)據(jù)的不一致性。近年來,不少醫(yī)院和廠商在不同系統(tǒng)之間進(jìn)行了一定的數(shù)據(jù)同步,或采用了企業(yè)服務(wù)總線(Enterprise Service Bus)之類的數(shù)據(jù)共享平臺或中間件來同步或共享數(shù)據(jù),但是對于醫(yī)生或行政管理人員來說,為了獲取所需的完整數(shù)據(jù),還是要在不同系統(tǒng)界面間切換,甚至需要分別登錄這些系統(tǒng),帶來了巨大的工作量。
對于大型三級甲等綜合性教學(xué)醫(yī)院,一般擁有大量臨床診療應(yīng)用系統(tǒng),總數(shù)據(jù)量多達(dá)約數(shù)10 TB(含影像數(shù)據(jù)文件)。如何充分合理利用這些多年積累起來的臨床診療數(shù)據(jù),是我們面臨的一個難題。由于數(shù)據(jù)散落在不同的應(yīng)用系統(tǒng)之中,數(shù)據(jù)存儲結(jié)構(gòu)差異較大,系統(tǒng)之間沒有直接的交互,缺乏統(tǒng)一的標(biāo)準(zhǔn),醫(yī)生在進(jìn)行診療和科研時,很難對這些數(shù)據(jù)進(jìn)行方便、合理的收集和分析。所以,當(dāng)前急需建立一個統(tǒng)一的臨床數(shù)據(jù)中心來對臨床診療決策和臨床科研分析進(jìn)行支持。
臨床數(shù)據(jù)中心對數(shù)據(jù)收集和處理的手段之一是通過抽取、轉(zhuǎn)換、加載(Extraction Transformation Load,ETL)過程實現(xiàn)數(shù)據(jù)的轉(zhuǎn)移和轉(zhuǎn)換。本文重點介紹我院在構(gòu)建臨床數(shù)據(jù)中心時,將數(shù)據(jù)從數(shù)據(jù)源裝載到數(shù)據(jù)倉庫的ETL過程的具體實現(xiàn)方法。
2.1 數(shù)據(jù)流架構(gòu)
一個數(shù)據(jù)倉庫系統(tǒng)通常包含兩種主要數(shù)據(jù)架構(gòu):數(shù)據(jù)流架構(gòu)和系統(tǒng)架構(gòu)。數(shù)據(jù)流架構(gòu)是有關(guān)如何在數(shù)據(jù)倉庫中組織數(shù)據(jù)存儲以及數(shù)據(jù)如何從源系統(tǒng)經(jīng)過數(shù)據(jù)存儲,流向最終用戶;系統(tǒng)架構(gòu)是有關(guān)服務(wù)器、網(wǎng)絡(luò)、軟件、存儲和客戶端的系統(tǒng)配置[1]。數(shù)據(jù)流架構(gòu)通常有多維數(shù)據(jù)存儲(Dimensional Data Store,DDS),規(guī)范化數(shù)據(jù)存儲(Normalized Data Store,NDS)+DDS,操作數(shù)據(jù)存儲(Operational Data Store,ODS)+DDS三種形式。
大型醫(yī)院目前擁有HIS、LIS、RIS、EMR等業(yè)務(wù)系統(tǒng),數(shù)據(jù)庫產(chǎn)品有MS SQL Server、 Sybase ASE和Oracle等,為了使數(shù)據(jù)ETL過程對實時業(yè)務(wù)系統(tǒng)的影響降到最低,一般采用NDS+DDS 的數(shù)據(jù)流架構(gòu),即從數(shù)據(jù)源裝載到數(shù)據(jù)倉庫,再到NDS的數(shù)據(jù)流架構(gòu),見圖1。
圖1 數(shù)據(jù)流架構(gòu)
其中,Stage為源系統(tǒng)數(shù)據(jù)的一個副本,從數(shù)據(jù)源裝載到數(shù)據(jù)倉庫的ETL過程并不對數(shù)據(jù)進(jìn)行刪減、修改或整合,僅負(fù)責(zé)抽取和裝載,而從數(shù)據(jù)倉庫到NDS的ETL過程,則需要按照數(shù)據(jù)倉庫建模的需要對數(shù)據(jù)進(jìn)行一定的清洗和轉(zhuǎn)換。
2.2 數(shù)據(jù)庫復(fù)制
當(dāng)數(shù)據(jù)從源系統(tǒng)的數(shù)據(jù)庫被讀取并寫入到Stage數(shù)據(jù)庫中,不可避免的會對源系統(tǒng)產(chǎn)生一定的影響,尤其對于HIS、LIS這類特別繁忙的業(yè)務(wù)系統(tǒng)而言,為了避免對其進(jìn)行直接對接和數(shù)據(jù)抽取,當(dāng)下流行的方式有硬盤整盤拷貝技術(shù)以及數(shù)據(jù)庫復(fù)制兩種。但是為了捕獲增量數(shù)據(jù),一般選擇數(shù)據(jù)庫表中有時間戳(Timestamp)字段。對于原業(yè)務(wù)系統(tǒng)中無時間戳字段,可以利用數(shù)據(jù)庫產(chǎn)品的事務(wù)復(fù)制功能,由系統(tǒng)自動跟蹤 INSERT、UPDATE和 DELETE 等DML語句或其他數(shù)據(jù)修改,并將這些更改數(shù)據(jù)存儲到分發(fā)數(shù)據(jù)庫中,然后將更改數(shù)據(jù)傳播到訂閱服務(wù)器上,并按其發(fā)生次序加以執(zhí)行,這樣就不需要對生產(chǎn)數(shù)據(jù)庫的表結(jié)構(gòu)進(jìn)行改動,而只需在訂閱數(shù)據(jù)庫的表上增加時間戳字段。數(shù)據(jù)庫復(fù)制是一種技術(shù),它將數(shù)據(jù)和數(shù)據(jù)庫對象從一個數(shù)據(jù)庫復(fù)制和分發(fā)到另一個數(shù)據(jù)庫,然后在數(shù)據(jù)庫間進(jìn)行同步,以維持一致性。復(fù)制的拓?fù)浣Y(jié)構(gòu)包括發(fā)布服務(wù)器、分發(fā)服務(wù)器、訂閱服務(wù)器及發(fā)布、項目和訂閱等組件。
醫(yī)院的臨床業(yè)務(wù)系統(tǒng)屬于業(yè)務(wù)繁忙、吞吐量大的OLTP(聯(lián)機(jī)事務(wù)處理系統(tǒng)),通過設(shè)置分發(fā)服務(wù)器、訂閱服務(wù)器以及相關(guān)組件,來建立系統(tǒng)的復(fù)制服務(wù),并在訂閱服務(wù)器的相關(guān)表中增加了時間戳字段用于識別增量數(shù)據(jù),通過元數(shù)據(jù)管理服務(wù)對增量數(shù)據(jù)的抽取進(jìn)行管理和控制,既不影響生產(chǎn)系統(tǒng)的正常運行,又能保證數(shù)據(jù)的完整性和一致性,同時能識別出增量數(shù)據(jù),提高了數(shù)據(jù)抽取的效率和實時性。
2.3 增量數(shù)據(jù)的抽取
數(shù)據(jù)倉庫在企業(yè)管理和決策中是面向主題的、集成的、與時間相關(guān)的、非易失的;其數(shù)據(jù)隨時間變化,是支持各層管理的數(shù)據(jù)集合[2]。但是,近年來對于數(shù)據(jù)倉庫中數(shù)據(jù)的時效性要求越來越高,如在臨床科研隨訪中,對于每個參與臨床隨訪患者的每次就診數(shù)據(jù)都必須及時匯總到隨訪數(shù)據(jù)庫中,以供科研分析支持。對新增數(shù)據(jù)識別,并及時地抽取到數(shù)據(jù)倉庫中,這就是對增量數(shù)據(jù)抽?。–DC)。
增量數(shù)據(jù)的識別很大程度上依賴于時間戳。時間戳,通常是一個字符序列,唯一地標(biāo)識某一刻的時間。通過記錄每次抽取數(shù)據(jù)的最后時間戳(終點),來作為下一次抽取的起始時間戳(起點),就可以很容易收集兩次抽取之間的變化數(shù)據(jù)。時間戳字段在數(shù)據(jù)庫系統(tǒng)中通常由系統(tǒng)自動產(chǎn)生,這樣就可以避免數(shù)據(jù)的遺漏。對于采用復(fù)制方式的源數(shù)據(jù)抽取,是在訂閱數(shù)據(jù)庫的相關(guān)表中增加時間戳字段,由于生成時間戳需要一定的系統(tǒng)開銷,這樣就可以避免生產(chǎn)庫生成時間戳數(shù)據(jù)而對生產(chǎn)系統(tǒng)帶來性能的損失。對于繁忙程度較低的系統(tǒng),如病理系統(tǒng)、手麻系統(tǒng)等,我們直接在生產(chǎn)庫的相關(guān)表中增加時間戳字段來捕獲增量數(shù)據(jù)。
我們使用SQL Server 2005版本以上的系統(tǒng),開啟數(shù)據(jù)庫提供的CDC服務(wù)來獲取增量數(shù)據(jù)。SQL SERVER CDC Service通過對事務(wù)日志的異步讀取,記錄操作的發(fā)生時間、類型和實際影響的數(shù)據(jù)變化,然后將這些數(shù)據(jù)記錄到啟用CDC時自動創(chuàng)建的表中。通過CDC相關(guān)的存儲過程,可以獲取詳細(xì)的數(shù)據(jù)變化情況。由于數(shù)據(jù)變化是異步讀取的,對整體性能的影響不大,遠(yuǎn)小于通過Trigger實現(xiàn)的數(shù)據(jù)變化記錄。此外,通過SQL Server集成服務(wù)(SQL Server Integration Services,SSIS)工具箱中的CDC控制任務(wù)和數(shù)據(jù)流任務(wù)中的CDC拆分器,可以很容易地識別出增量數(shù)據(jù),且可以分別獲得新增、更新和刪除的數(shù)據(jù)集。
捕獲增量數(shù)據(jù)的另一種手段是使用觸發(fā)器技術(shù),來記錄變更的數(shù)據(jù)。但這種方式會對系統(tǒng)產(chǎn)生一定的性能損失,有時甚至?xí)绊懙綐I(yè)務(wù)系統(tǒng)的正常運行,因此不建議輕易使用該技術(shù)。如果采用復(fù)制技術(shù),也可以在訂閱服務(wù)器上使用觸發(fā)器。顯然在訂閱服務(wù)器相關(guān)表上增加時間戳字段是保障系統(tǒng)性能更優(yōu)的選擇。
2.4 ETL工具
目前,主流的數(shù)據(jù)庫供應(yīng)商都提供了各自的ETL工具[3-4]。本文以微軟SSIS(企業(yè)級的)工具為例來介紹ETL過程。該工具包括用于生成和調(diào)試包的圖形工具和向?qū)?;用于?zhí)行工作流函數(shù)(如FTP操作)、執(zhí)行SQL語句或發(fā)送電子郵件的任務(wù);用于提取和加載數(shù)據(jù)的數(shù)據(jù)源和目標(biāo);用于清理、聚合、合并和復(fù)制數(shù)據(jù)的轉(zhuǎn)換;用于管理集成服務(wù),以及用于對集成服務(wù)對象模型編程的應(yīng)用程序編程接口(API)。
在Microsoft的所有工具中,SSIS是最重要的商業(yè)智能工具,該工具具有清洗和將數(shù)據(jù)轉(zhuǎn)換為合適的格式的功能,并可以快速地完成對數(shù)據(jù)的提取、轉(zhuǎn)換和加載。同其他的ETL工具相比,SSIS是隨SQL Server數(shù)據(jù)庫產(chǎn)品一起提供的,有較好的經(jīng)濟(jì)適用性。
在臨床數(shù)據(jù)中心的ETL設(shè)計和實現(xiàn)過程中,我們通過不斷地實踐,反復(fù)地調(diào)試,使整個ETL過程達(dá)到了預(yù)期目標(biāo)。同時也積累了一些經(jīng)驗和教訓(xùn)[5-8]:
(1)ETL過程應(yīng)盡可能地配置大內(nèi)存服務(wù)器,并給數(shù)據(jù)庫服務(wù)配置較高的內(nèi)存份額以提高數(shù)據(jù)讀取和寫入的性能。
(2)提高創(chuàng)建索引所使用的內(nèi)存配額。由于Stage中的數(shù)據(jù)需要對增量讀取,DW數(shù)據(jù)庫的目標(biāo)表寫入時需要進(jìn)行查找等操作來進(jìn)行數(shù)據(jù)清洗,所以需要在相關(guān)字段創(chuàng)建索引,提高查找的效率。
(3)對于SQL Server數(shù)據(jù)庫源,抽取數(shù)據(jù)的查詢語句加上option,并指定參數(shù)為MAXDOP ?,問號處設(shè)置數(shù)字1~9,如option (MAXDOP 6)。該選項用于忽略由Sp_ configure 設(shè)定的針對查詢的最大并行線程數(shù)目,以此來提高查詢的并行度,以充分利用服務(wù)器的CPU資源。
(4)利用SSIS的CDC源抽取數(shù)據(jù)時,開啟CDC服務(wù)的源數(shù)據(jù)庫,必須設(shè)置CDC源的CommandTimeout,如300 s,而不要使用系統(tǒng)默認(rèn)值。系統(tǒng)默認(rèn)值為0,表示無限超時時間,但實踐表明,若不進(jìn)行設(shè)置,SSIS運行時會拋出命令執(zhí)行超時的異常。
(5)設(shè)置數(shù)據(jù)流目標(biāo)時使用快速加載選項,快速加載選項數(shù)據(jù)插入采用Bulk Insert,大大提升了插入速度,但由于不產(chǎn)生日志,所以目標(biāo)表的觸發(fā)器將不會執(zhí)行。
(6)利用SQL Server的預(yù)估執(zhí)行計劃對數(shù)據(jù)抽取的SQL語句進(jìn)行分析,對于查詢優(yōu)化器未使用到索引的大表的查詢操作,在查詢語句的表名后面加上with (index(索引名稱))的選項,強制查詢優(yōu)化器使用索引來進(jìn)行查詢。
(7)將“執(zhí)行卷維護(hù)任務(wù)”權(quán)限賦予給SQL Server的啟動賬戶。這樣在數(shù)據(jù)庫文件增長時可以避免清零操作,最大限度地減少數(shù)據(jù)庫文件增長造成的影響。
(8)將“鎖定內(nèi)存頁”權(quán)限賦予給SQL Server的啟動賬戶,避免SQL Server進(jìn)程被操作系統(tǒng)頁出(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] 徐春艷.面向?qū)崟r數(shù)據(jù)倉庫的ETL研究[D].南京:南京航空航天大學(xué),2007.
[4] 張旭峰,孫未未,汪衛(wèi),等.增量ETL過程自動化產(chǎn)生方法的研究[J].計算機(jī)研究與發(fā)展,2006,43(6):1097-1103.
[5] 安繼業(yè),薛萬國,史洪飛,等.臨床數(shù)據(jù)中心構(gòu)建方法探討[J].中國數(shù)字醫(yī)學(xué),2008,(10):13-16.
[6] 施今馳.?dāng)?shù)據(jù)挖掘技術(shù)在醫(yī)院信息系統(tǒng)中的應(yīng)用[J].中國醫(yī)療設(shè)備,2012,27(1):86-88.
[7] 俞磊,楊宋濤,王宗殿.基于數(shù)據(jù)倉庫的醫(yī)院決策系統(tǒng)的研究與設(shè)計[J].計算機(jī)與數(shù)字工程,2010,38(4):142-145.
[8] 林超英.?dāng)?shù)據(jù)挖掘在醫(yī)院信息化建設(shè)中的應(yīng)用研究[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
構(gòu)建臨床數(shù)據(jù)中心是進(jìn)行臨床診療決策和臨床科研分析的重要手段。本文重點介紹了我院在構(gòu)建臨床數(shù)據(jù)中心過程中,將各信息系統(tǒng)的數(shù)據(jù)從數(shù)據(jù)源裝載到數(shù)據(jù)倉庫的抽取、轉(zhuǎn)換、加載的具體實現(xiàn)方法,同時也總結(jié)了經(jīng)驗、教訓(xùn),供同行參考。
醫(yī)院信息系統(tǒng);臨床數(shù)據(jù)中心;ETL;數(shù)據(jù)庫復(fù)制
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
上海市科學(xué)技術(shù)委員會成果轉(zhuǎn)化與應(yīng)用課題(1251150 2406)。
朱立峰,高級工程師。
通訊作者郵箱:zlf@rjh.com.cn