一,、前言從20世紀90年代數(shù)字化醫(yī)院概念提出到至今的20多年時間,,數(shù)字化醫(yī)院(Digital Hospital)在國內(nèi)各大醫(yī)院飛速的普及推廣發(fā)展,并取得驕人成績,。不但有數(shù)字化醫(yī)院管理信息系統(tǒng)(HIS),、影像存檔和通信系統(tǒng)(PACS)、電子病歷系統(tǒng)(EMR)和區(qū)域醫(yī)療衛(wèi)生服務(wù)(GMIS)等成功實施與普及推廣,,而且隨著日新月異的計算機技術(shù)和網(wǎng)絡(luò)技術(shù)的革新,,進一步為數(shù)字化醫(yī)院帶來新的交互渠道譬如:遠程醫(yī)療服務(wù),網(wǎng)上掛號預(yù)約。 隨著IT技術(shù)的飛速發(fā)展,,80%以上的三級醫(yī)院都相繼建立了自己的醫(yī)院信息系統(tǒng)(HIS),、電子病歷系統(tǒng)(EMR)、合理用藥系統(tǒng)(PASS),、檢驗管理系統(tǒng)(LIS),、醫(yī)學(xué)影像存儲與共享系統(tǒng)(PACS)以及移動查房,、移動護理系統(tǒng)以及與大量的第三方接口整合應(yīng)用,,IT在醫(yī)療領(lǐng)域已經(jīng)進入了一個大數(shù)據(jù)時代,隨著HIS的廣泛應(yīng)用及其功能的不斷完善,,HIS收集了大量的醫(yī)療數(shù)據(jù),。 進入2012年,大數(shù)據(jù)及相關(guān)的大數(shù)據(jù)處理技術(shù)越來越多地被國人提及,,人們也普遍的接受大數(shù)據(jù)的概念,,大數(shù)據(jù)技術(shù)也影響著我們的日常生活,互聯(lián)網(wǎng)行業(yè)已經(jīng)得到廣泛應(yīng)用,,電信,、銀行等行業(yè)也已經(jīng)在廣泛嘗試使用大數(shù)據(jù)技術(shù)提供更穩(wěn)健和優(yōu)質(zhì)的服務(wù)。 在目前情況下,,醫(yī)療IT系統(tǒng)收集了這些集其有價值的數(shù)據(jù),,但是這些大量的有價值的歷史醫(yī)療數(shù)據(jù)并沒有發(fā)揮出其應(yīng)有的價值,不能為一線臨床醫(yī)生提供醫(yī)療診斷輔助,,也不能為醫(yī)院管理和經(jīng)營決策提供必須的支持,。 針對以上現(xiàn)狀,思考擬利用醫(yī)院現(xiàn)有的歷史就診記錄,、處方,、診斷、病歷數(shù)據(jù),,挖掘出有價值的基于統(tǒng)計學(xué)的醫(yī)學(xué)規(guī)則,、知識,并基于這些規(guī)則,、知識信息構(gòu)建專業(yè)的臨床知識庫,,為一線醫(yī)務(wù)人員提供專業(yè)的診斷、處方,、用藥推薦功能,,基于強大的關(guān)聯(lián)推薦能力,極大的提高醫(yī)療服務(wù)質(zhì)量,,減輕一線醫(yī)療人員的工作強度,。 二、Hadoop&Spark目前大數(shù)據(jù)處理領(lǐng)域的框架有很多,。從計算的角度上看,,主要有MapReduce框架(屬于Hadoop生態(tài)系統(tǒng))和Spark框架,。其中Spark是近兩年出現(xiàn)的新一代計算框架,基于內(nèi)存的特性使它在計算效率上大大優(yōu)于MapReduce框架,;從存儲角度來看,,當前主要還是在用Hadoop生態(tài)環(huán)境中的HDFS框架。HDFS的一系列特性使得它非常適合大數(shù)據(jù)環(huán)境下的存儲,。 2.1 HadoopHadoop不是一個軟件,,而是一個分布式系統(tǒng)基礎(chǔ)架構(gòu),是由Apache基金會主持開發(fā)的一個開源項目,。Hadoop可以使用戶在不了解分布式底層實現(xiàn)的情況下,,開發(fā)分布式程序,從而充分利用電腦集群的威力,,實現(xiàn)高速運算和大規(guī)模數(shù)據(jù)存儲,。Hadoop主要有HDFS、MapReduce,、Hbase等子項目組成,。 Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架,并且使用可靠,、高效,、可伸縮的方式進行數(shù)據(jù)處理。Hadoop假設(shè)數(shù)據(jù)處理和存儲會失敗,,因此系統(tǒng)維護多個工作數(shù)據(jù)副本,,確保能夠針對失敗的節(jié)點重新分布處理。Hadoop通過并行工作,,提高數(shù)據(jù)處理速度,。Hadoop能夠處理PB級數(shù)據(jù),這是常規(guī)數(shù)據(jù)服務(wù)器所不能實現(xiàn)的,。此外,,Hadoop依賴于開源社區(qū),任何問題都可以及時得到解決,,這也是Hadoop的一大優(yōu)勢,。Hadoop建立在Linux 集群上,因此成本低,,并且任何人都可以使用,。它主要具有以下優(yōu)點: 1高可靠性。Hadoop系統(tǒng)中數(shù)據(jù)默認有三個備份,,并且Hadoop有系統(tǒng)的數(shù)據(jù)檢查維護機制,,因而提供了高可靠性的數(shù)據(jù)存儲。 2擴展性強。Hadoop在普通PC服務(wù)器集群上分配數(shù)據(jù),,通過并行運算完成計算任務(wù),,可以很方便的為集群擴展更多的節(jié)點。 3高效性,。Hadoop能夠在集群的不同節(jié)點之間動態(tài)的轉(zhuǎn)移數(shù)據(jù),。并且保證各個節(jié)點的動態(tài)平衡,因此處理速度非???。 4高容錯性。Hadoop能夠保存數(shù)據(jù)的多個副本,,這樣就能夠保證失敗時,,數(shù)據(jù)能夠重新分配。 Hadoop總體架構(gòu)如下圖所示,,Hadoop架構(gòu)中核心的是MapReduce和HDFS兩大組件。 Google曾發(fā)表論文《Google File System》,,系統(tǒng)闡述了Google的分布式文件系統(tǒng)的設(shè)計實現(xiàn),,Apache針對GFS,進行開源開發(fā),,發(fā)布了Hadoop的分布式文件系統(tǒng):Hadoop Distributed File System,縮寫為HDFS,。MapReduce的核心思想也由Google的一篇論文《MapReduce:Simplified Data Processing on Large Clusters》 提出,筒單解釋MapReduce的核心思想就是:任務(wù)分解執(zhí)行,,執(zhí)行結(jié)果匯總,。 2.2 SparkSpark是UC Berkeley大學(xué)AMP實驗室開源的類似MapReduce的計算框架,它是一個基于內(nèi)存的集群計算系統(tǒng),,最初的目標是解決MapReduce磁盤讀寫的開銷問題,,當前最新的版本是1.5.0。Spark—經(jīng)推出,,就以它的高性能和易用性吸引著很多大數(shù)據(jù)研究人員,,在眾多愛好者的努力下,Spark逐漸形成了自己的生態(tài)系統(tǒng)( Spark為基礎(chǔ),,上層包括Spark SQL,,MLib,Spark Streaming和GraphX),并成為Apache的頂級項目,。 Spark的核心概念是彈性分布式存儲(Resilient Distributed Datasets, RDD)間,,它是Spark對分布式內(nèi)存進行的抽象,使用者可以像操作本地數(shù)據(jù)集一樣操作RDD,從而可以將精力集中于業(yè)務(wù)處理,。在Spark程序中,,數(shù)據(jù)的操作都是基于RDD的,例如經(jīng)典的WordCount程序,其在Spark編程模型下的操作方式如下圖所示: 可以看到Spark先從文件系統(tǒng)抽象出RDD1,然后由RDD1經(jīng)過flatMap算子轉(zhuǎn)換得到RDD2,RDD2再經(jīng)過reduceByKey算子得到RDD3,最后RDD3中的數(shù)據(jù)重新寫回文件系統(tǒng),,一切操作都是基于RDD的,。 三、思路和架構(gòu)經(jīng)過多方面的思考,,最終決定基于Spark技術(shù)進行構(gòu)建和實現(xiàn)醫(yī)院臨床知識庫系統(tǒng),,采用MongoDB/Sequoiadb構(gòu)建大數(shù)據(jù)倉庫,做為大數(shù)據(jù)的存儲中心,,采用Hadoop+Spark1構(gòu)建大數(shù)據(jù)分析平臺,,基于AgileEAS.NET SOA中間件構(gòu)建ETL數(shù)據(jù)抽取轉(zhuǎn)換工具(后期部分換用了Pentaho Kettle),基于AgileEAS.NET SOA中間件構(gòu)建知識庫的服務(wù)門戶,,通過WCF/WebService與HIS系統(tǒng)進行業(yè)務(wù)整合集成,,使用AgileEAS.NET SOA+FineUI構(gòu)建基礎(chǔ)字典管理以后分析結(jié)構(gòu)的圖像化展示功能。 最初我們選擇了SequoiaDB做為大數(shù)據(jù)存儲中心,,為此我還特意的為SequoiaDB完成了C#驅(qū)動,,參考本人為巨杉數(shù)據(jù)庫(開源NoSQL)寫的C#驅(qū)動,支持Linq,,全部開源,,已提交github一文,但是一方面熟悉SequoiaDB的技術(shù)人員太少了,,維護是個問題,,最后,在差不多8多個月這后我們換用了MongoDB 3.0做為大數(shù)據(jù)存儲中心,。 最初我們選擇了hadoop2.0+spark1.3.1版本之上使用scala2.10開發(fā)完成了醫(yī)院臨床知識庫系統(tǒng),,請參考centos+scala2.11.4+hadoop2.3+spark1.3.1環(huán)境搭建,但是在后期替換Sequoiadb為MongoDB的同時,,我們把計算框架也由hadoop2.0+spark1.3.1升級到了hadoop2.6+spark1.6.2,。 考慮到spark都部署在Linux的情況,對于spark分析的結(jié)果輸出存儲在Mysql5.6數(shù)據(jù)庫之中,,系統(tǒng)所使用的各種字典信息也存儲在Mysql之中,。 spark數(shù)據(jù)分析部分的代碼使用IntelliJ IDEA 14.1.4工具進行編寫,其他部分的代碼使用VS2010進行編寫,。 3.1 總體架構(gòu)整個系統(tǒng)由數(shù)據(jù)采集層,、存儲分析層和應(yīng)用邏輯層三大部分以及本系統(tǒng)所選所以來的外部數(shù)據(jù)源。 本系統(tǒng)的外部數(shù)據(jù)源目前主要是醫(yī)院信息系統(tǒng)所產(chǎn)生的臨床數(shù)據(jù),,目前主要集中在HIS系統(tǒng)之中,,后期將采依賴于EMR、LIS,、PACS系統(tǒng),。 數(shù)據(jù)采集層主要負責(zé)從臨床業(yè)務(wù)系統(tǒng)采集海量歷史臨床數(shù)據(jù)同,,歷史記錄采集方式分為批采集和實時采集,在數(shù)據(jù)采集過程之中對原始數(shù)據(jù)進行格工檢查,,并對原始數(shù)據(jù)進行清洗和轉(zhuǎn)換,,并將處理后的數(shù)據(jù)存儲在大數(shù)據(jù)倉庫之中。 存儲分析層主要負責(zé)數(shù)據(jù)存儲以及數(shù)據(jù)分析兩大部分業(yè)務(wù),,經(jīng)過清洗轉(zhuǎn)換的合理有效數(shù)據(jù)被存儲在大數(shù)據(jù)集群之中,,使用JSON格式,大數(shù)據(jù)存儲引用使用SequoiaDB數(shù)據(jù)庫,,數(shù)據(jù)分析部分由Hadoop/Spark集群來完成,,大數(shù)據(jù)存儲經(jīng)由Spark導(dǎo)入并進行分析,分析結(jié)果寫入臨床知識數(shù)據(jù)庫,,臨床知識數(shù)據(jù)庫使用MySql數(shù)據(jù)庫進行存儲,。 應(yīng)用邏輯層主要負責(zé)人機交互以及分析結(jié)構(gòu)回饋臨床系統(tǒng)的渠道,通過WebUI的方式向臨床醫(yī)生,、業(yè)務(wù)管理人員提供列表式,、圖像化的知識展示,也為臨床系統(tǒng)的業(yè)務(wù)輔助,、推薦功能提供調(diào)用的集成API,,目前API主要通過WebService、WebAPI兩種方式提供,。 3.2 總體流程整個系統(tǒng)經(jīng)由數(shù)據(jù)源數(shù)據(jù)采集,寫入大數(shù)據(jù)存儲SequoiaDB集群,,然后由Spark進行分析計算,,分析生成的臨床知識寫入MySQL知識庫,經(jīng)由WebUI以及標準的API交由臨床使用,。 3.3 數(shù)據(jù)導(dǎo)入流程歷史數(shù)據(jù)的采集導(dǎo)入使用初期使用AgileEAS.NET SOA 的計劃任務(wù)配何C#腳本進行實現(xiàn),,由計劃任務(wù)進行協(xié)調(diào)定時執(zhí)行,具體的數(shù)據(jù)導(dǎo)入代碼根據(jù)不同的臨床業(yè)務(wù)系統(tǒng)不同進行腳本代碼的調(diào)整,,也可以使用Pentaho Kettle進行實現(xiàn),,通過Pentaho Kettle可配置的實現(xiàn)數(shù)據(jù)的導(dǎo)入。 3.4 物理結(jié)構(gòu)設(shè)計臨床數(shù)據(jù)源為本系統(tǒng)進行分析的數(shù)據(jù)來源,,源自于臨床HIS,、EMR,目前醫(yī)院的HIS使用SQL Server 2008 R2數(shù)據(jù)庫,,EMR使用ORACLE 11G數(shù)據(jù)庫,,運行于Windows2008操作系統(tǒng)之上。 |
|