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