自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大數(shù)據(jù)項目實踐:基于hadoop+spark+mongodb+mysql+c#開發(fā)醫(yī)院臨床知識庫系統(tǒng)

大數(shù)據(jù) Hadoop Spark MongoDB
針對醫(yī)療IT系統(tǒ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ī)療人員的工作強度。

[[170493]]

一、前言

從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 Hadoop

Hadoop不是一個軟件,而是一個分布式系統(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)平衡,因此處理速度非??臁?/p>

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 Spark

Spark是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)之上。

SequoiaDB集群為大數(shù)據(jù)存儲數(shù)制庫集群,目前使用SequoiaDB v2.0,運行于Centos6.5操作系統(tǒng)之上,根據(jù)業(yè)務(wù)來規(guī)模使用2-16節(jié)點集群,其用于存儲經(jīng)過清洗轉(zhuǎn)換處理的海量歷史臨床數(shù)據(jù),供Spark集群進行分析,以及供應(yīng)SOA服務(wù)器進行歷史數(shù)據(jù)查詢和歷史相關(guān)推薦使用。

Hadoop/Spark集群為本系統(tǒng)的分析計算核心節(jié)點,用于對SequoiaDB集群之中的歷史數(shù)據(jù)進行分析,生成輔助臨床醫(yī)生使用的醫(yī)學(xué)知識,本集群根據(jù)業(yè)務(wù)來規(guī)模使用2-16節(jié)點集群,使用Centos6.5操作系統(tǒng),安裝JAVA1.7.79運行環(huán)境、scala2.11.4語言,使用Hadoop2.3,spark1.3.1分析框架。

MySql知識庫為本系統(tǒng)的知識庫存儲數(shù)據(jù)庫,Hadoop/Spark集群所生產(chǎn)的分析結(jié)構(gòu)寫入本數(shù)據(jù)庫,經(jīng)由SOA服務(wù)器和Web服務(wù)處理供臨床系統(tǒng)集成使用和WebGUI展現(xiàn),目前使用MySQL5.6版本,安裝于Windows2008/Centos6操作系統(tǒng)之上。

SOA Server為本系統(tǒng)的對外接口應(yīng)用服務(wù)器,向臨床業(yè)務(wù)系統(tǒng)和Web Server提供業(yè)務(wù)運算邏輯,以及向臨床業(yè)務(wù)系統(tǒng)提供服務(wù)API,目前運行于Windows2008操作系統(tǒng),部署有.NET Framework 4.0環(huán)境,運行AgileEAS.NET SOA 中間件的SOA服務(wù),由AgileEAS.NET SOA 中間件SOA服務(wù)向外部系統(tǒng)提供標準的WebService以及WebAPI。

Web Server為系統(tǒng)提供基于標準的B/S瀏覽器用戶接口,供業(yè)務(wù)人員通過B/S網(wǎng)頁對系統(tǒng)進行管理,查詢使用知識庫之中的醫(yī)學(xué)知識,目前運行于Windows2008操作系統(tǒng),部署有.NET Framework 4.0環(huán)境,運行于IIS7.0之中。

臨床工作站系統(tǒng)運行HIS、EMR系統(tǒng),兩系統(tǒng)均使用C#語言SOA架構(gòu)思路進行開發(fā),與本系統(tǒng)集成改造后,使用標準WebService接口本系統(tǒng),使用本系統(tǒng)所提供的API為臨床提供診療輔助。

四、環(huán)境、安裝、坑

目前系統(tǒng)跑在虛擬化環(huán)境之中,其中三臺Centos6組成大數(shù)據(jù)存儲、計算集群,每臺分配16CPU(核)16G內(nèi)存2T硬盤,3臺共48核48G,這三臺機器每臺都安裝了java1.8.25+scala2.10+hadoop2.6,spark1.62,mongodb3.0組合3節(jié)點的集群,spark采用Standalone Cluster模式,單一master節(jié)點,為每臺機器分配其中12核12G用于Worker,其余CPU內(nèi)存留給mongodb集群使用,運行截圖如下:

一臺Win2008做為SOA|應(yīng)用服務(wù)器,分配32核64G內(nèi)存,部署了Mysql5.6,IIS,AgileEAS.NET SOA 服務(wù),整個系統(tǒng)的SOA服務(wù)和Web管理界面由本服務(wù)器進行承載,一方面提供Web方式的管理和查詢,另一方面以webservice、webAPI為臨床系統(tǒng)提供服務(wù)。

具體環(huán)境的安裝過程由于篇幅的原因在此就不在一一細說,我將會單獨寫一篇文章為大家進行詳細的介紹。

***次使用Spark,又沒有多少資料可參考,所以在開發(fā)過程之中遇到不少的坑,特別是初期的時間,搭建環(huán)境就費了一周,寫代碼過程之中坑也是一直發(fā)現(xiàn)一直填坑,有點坑也填不了,直好換思路繞了,記得在spark sql的udf自定義函數(shù)上,并不是所有函數(shù)都有坑,偶爾自己寫的udf函數(shù)怎么都是過不去,找不到原因,看spark的源代碼也沒看出個所以然,***不得改寫代碼,換思路搞。

感覺特別有愛的就是scala語言了,我覺得使用.net 4.0(C#)的朋友們,特別是用熟Linq的兄弟們,scala語言太方便了,我感覺他基本上就是和linq一樣方便,更沒有節(jié)操的是,在函數(shù)之中可以定義類,不過,真的是很方便,我不是很喜歡java,但是我喜歡scala。

五、效果展示

5.1 門診診斷排名

門診診斷排名是門診診斷知識的圖形化界面展示顯示,用于展示全院或者指定??频腡opN位常用診斷,也為每一個診斷與性別、年齡等人群相關(guān)性以及與節(jié)氣相關(guān)性圖表展示。

5.2 門診伴生診斷查詢

門診伴生診斷排名是門診診斷并發(fā)癥的知識展示界面,用于展示得某一種疾病另其他疾病的可能性。

5.3 門診自動組方查詢

門診自動組方查詢,用于展示臨床最常用的用藥、治療自動組方知識,即比如最常用的0.9%氯化鈉注射液 100 ml配注射用頭孢硫咪 1g,常適用于扁桃體發(fā)炎、喘息性之氣管炎、上呼吸道感染等疾病,給以靜脈點滴方式每日一次使用。

5.4 門診診斷組方推斷

門診診斷組方推斷,用于展示臨床疾病診斷與常用藥品、治療給合方案的相關(guān)性關(guān)聯(lián),即如上圖展示上呼吸道感染常使用氨酚麻美干混懸劑1包、四季抗病毒合劑、0.9%氯化鈉注射液100ml+注射用頭孢硫咪1g、滅菌注射用水2ml+注射用重組人干擾素a1b 10ug等這樣的組合治療方案。

5.5 醫(yī)療臨床系統(tǒng)整合

為了實現(xiàn)來源于臨床系統(tǒng),并且服務(wù)于臨床系統(tǒng)的總體系統(tǒng),我們聯(lián)動了本院的HIS系統(tǒng)之中的門診醫(yī)生站,與本系統(tǒng)進行基于WebService的整合,如下圖所示的整合界面:

臨床醫(yī)生在完成基本的門診病歷之后,系統(tǒng)會自動為其體檢待選的門診疾病診斷,80%-90%的情況可以直接選擇,在少數(shù)情況下沒有推薦合適的時候大夫才會錄入,省去大夫錄入診斷的麻煩,也減少因大夫錄入的不規(guī)范而導(dǎo)致的數(shù)據(jù)的混亂。

在臨床醫(yī)生寫完門診病歷,進行開立檢驗、檢查、用藥、治療的時間,系統(tǒng)會根據(jù)當有的診斷信息進行推薦合適的治療方案選擇,臨床醫(yī)生只需求在右邊的推薦組方上雙擊即可實現(xiàn)快速的處方開方,大大的方便的臨床醫(yī)生的工作。

針對中醫(yī)院,系統(tǒng)集成了3W多個經(jīng)典成方,根據(jù)歷史數(shù)據(jù)與成方字典的組合分析對比,極大的方便中醫(yī)大夫日常工作:

 

六、實現(xiàn)細節(jié)

對于大數(shù)據(jù)技術(shù),以及大數(shù)據(jù)技術(shù)在醫(yī)療化信息行業(yè)的實踐,以及實現(xiàn)之中的思路和細節(jié),不是短短的這么一點篇幅就能介紹完成的,此文也是在我們實現(xiàn)需求,實踐之后所寫,所以總覺得東西都比較簡單,我只期望本文能達到拋轉(zhuǎn)引用的作用,能對同行做相關(guān)工作的朋友們有所參考,思路可以得到借鑒,然本文也實在沒有講清楚所有的細節(jié)。

責(zé)任編輯:趙寧寧 來源: 36大數(shù)據(jù)
相關(guān)推薦

2016-10-12 09:41:45

Hadoop+Spar大數(shù)據(jù)開發(fā)

2014-08-15 09:09:32

大數(shù)據(jù)

2016-03-07 09:57:19

Hadoop大數(shù)據(jù)開源項目

2013-04-22 10:00:53

云計算大數(shù)據(jù)

2023-10-13 13:11:26

大數(shù)據(jù)技術(shù)開源

2025-02-14 00:00:35

2016-03-21 18:56:54

物聯(lián)網(wǎng)IoTIT基礎(chǔ)架構(gòu)

2014-12-10 10:51:54

OpenStackSahara云計算

2015-06-16 11:09:44

IBM大數(shù)據(jù)開源

2021-07-20 15:37:37

數(shù)據(jù)開發(fā)大數(shù)據(jù)Spark

2022-06-30 21:08:25

大數(shù)據(jù)數(shù)據(jù)湖數(shù)據(jù)倉庫

2023-05-10 16:04:38

大數(shù)據(jù)架構(gòu)

2019-04-22 15:24:24

HadoopSuffleMap端

2017-01-04 10:29:37

Spark運維技術(shù)

2018-04-15 21:39:04

大數(shù)據(jù)項目應(yīng)用

2019-05-23 09:50:46

大數(shù)據(jù)IT人工智能

2019-02-13 14:16:44

醫(yī)療數(shù)據(jù)大數(shù)據(jù)數(shù)據(jù)中心

2017-10-19 08:28:15

大數(shù)據(jù)HadoopSpark
點贊
收藏

51CTO技術(shù)棧公眾號