【案例分享】SequoiaDB+Spark搭建醫院臨床知識庫系統

1.背景介紹

從20世紀90年代數字化醫院概念提出到至今的20多年時間,數字化醫院(Digital Hospital)在國內各大醫院飛速的普及推廣發展,並取得驕人成績。不但有數字化醫院管理信息系統(HIS)、影像存檔和通信系統(PACS)、電子病歷系統(EMR)和區域醫療衛生服務(GMIS)等成功實施與普及推廣,而且隨著日新月異的計算機技術和網路技術的革新,進一步為數字化醫院帶來新的交互渠道譬如:遠程醫療服務,網上挂號預約。

隨著IT技術的飛速發展,80%以上的三級醫院都相繼建立了自己的醫院信息系統(HIS)、電子病歷系統(EMR)、合理用藥系統(PASS)、檢驗管理系統(LIS)、醫學影像存儲與共享系統(PACS)以及移動查房、移動護理系統以及與大量的第三方介面整合應用,IT在醫療領域已經進入了一個大數據時代,隨著HIS的廣泛應用及其功能的不斷完善,HIS收集了大量的醫療數據。

進入2012年,大數據及相關的大數據處理技術越來越多地被國人提及,人們也普遍的接受大數據的概念,大數據技術也影響著我們的日常生活,互聯網行業已經得到廣泛應用,電信、銀行等行業也已經在廣泛嘗試使用大數據技術提供更穩健和優質的服務。

在目前情況下,醫療IT系統收集了這些集其有價值的數據,但是這些大量的有價值的歷史醫療數據並沒有發揮出其應有的價值,不能為一線臨床醫生提供醫療診斷輔助,也不能為醫院管理和經營決策提供必須的支持。

針對以上現狀,思考擬利用醫院現有的歷史就診記錄、處方、診斷、病曆數據,挖掘出有價值的基於統計學的醫學規則、知識,並基於這些規則、知識信息構建專業的臨床知識庫,為一線醫務人員提供專業的診斷、處方、用藥推薦功能,基於強大的關聯推薦能力,極大的提高醫療服務質量,減輕一線醫療人員的工作強度。

2.主要技術架構介紹

2.1 SequoiaDB

SequoiaDB巨杉資料庫,是一款企業級分散式NewSQL資料庫,自主研發並擁有完全自主知識產權,沒有基於任何其他外部的開源資料庫源代碼。SequoiaDB支持標準SQL、事務操作、高並發、分散式、可擴展、與雙引擎存儲等特性,並已經作為商業化的資料庫產品開源。

除了JSON存儲引擎以外,為了提高非結構化文件的讀寫性能,SequoiaDB核心引擎提供了分散式塊存儲模式,可以將非結構化大文件按照固定大小的數據塊進行切分並存放於不同分區。這一功能可以實現海量非結構化文件的存儲,可以引用於如影像存儲等場景。

2.2 Spark

Spark是UC Berkeley大學AMP實驗室開源的類似MapReduce的計算框架,它是一個基於內存的集群計算系統,最初的目標是解決MapReduce磁碟讀寫的開銷問題,當前最新的版本是1.5.0。Spark—經推出,就以它的高性能和易用性吸引著很多大數據研究人員,在眾多愛好者的努力下,Spark逐漸形成了自己的生態系統( Spark為基礎,上層包括Spark SQL,MLib,Spark Streaming和GraphX),並成為Apache的頂級項目。

Spark的核心概念是彈性分散式存儲(Resilient Distributed Datasets, RDD)間,它是Spark對分散式內存進行的抽象,使用者可以像操作本地數據集一樣操作RDD,從而可以將精力集中於業務處理。在Spark程序中,數據的操作都是基於RDD的,例如經典的WordCount程序,其在Spark編程模型下的操作方式如下圖所示:

可以看到Spark先從文件系統抽象出RDD1,然後由RDD1經過flatMap運算元轉換得到RDD2,RDD2再經過reduceByKey運算元得到RDD3,最後RDD3中的數據重新寫迴文件系統,一切操作都是基於RDD的。

3.思路與架構

經過多方面的思考,最終決定基於Spark技術進行構建和實現醫院臨床知識庫系統,採用SequoiaDB構建底層數據存儲平台,做為大數據的存儲中心,採用Spark構建大數據分析平台,基於AgileEAS.NET SOA中間件構建ETL數據抽取轉換工具(後期部分換用了Pentaho Kettle),基於AgileEAS.NET SOA中間件構建知識庫的服務門戶,通過WCF/WebService與HIS系統進行業務整合集成,使用AgileEAS.NET SOA+FineUI構建基礎字典管理以後分析結構的圖像化展示功能。

我們選擇了SequoiaDB做為大數據存儲中心,為此我還特意的為SequoiaDB完成了C#驅動,最初我們選擇了Spark1.3.1版本之上使用scala2.10開發完成了醫院臨床知識庫系統,項目後期我們把計算框架也由Spark1.3.1升級到了Spark1.6.2(Spark已經於近期發布了2.0版本,各種性能穩定性大幅提升)。

考慮到Spark都部署在Linux的情況,對於Spark分析的結果輸出存儲在也存儲在SequoiaDB巨杉資料庫之中。Spark數據分析部分的代碼使用IntelliJ IDEA 14.1.4工具進行編寫,其他部分的代碼使用VS2010進行編寫。

3.1 總體架構

整個系統由數據採集層、存儲分析層和應用邏輯層三大部分以及本系統所選所以來的外部數據源。本系統的外部數據源目前主要是醫院信息系統所產生的臨床數據,目前主要集中在HIS系統之中,後期將采依賴於EMR、LIS、PACS系統。

數據採集層: 主要負責從臨床業務系統採集海量歷史臨床數據同,歷史記錄採集方式分為批採集和實時採集,在數據採集過程之中對原始數據進行格工檢查,並對原始數據進行清洗和轉換,並將處理後的數據存儲在大數據倉庫之中。

存儲分析層: 主要負責數據存儲以及數據分析兩大部分業務,經過清洗轉換的合理有效數據被存儲在大數據集群之中,使用JSON格式,大數據存儲引用使用SequoiaDB資料庫,數據分析部分由Spark集群來完成,大數據存儲經由Spark導入並進行分析,分析結果寫入臨床知識資料庫,臨床知識資料庫也使用SequoiaDB巨杉資料庫進行存儲。

應用邏輯層: 主要負責人機交互以及分析結構回饋臨床系統的渠道,通過WebUI的方式向臨床醫生、業務管理人員提供列表式、圖像化的知識展示,也為臨床系統的業務輔助、推薦功能提供調用的集成API,目前API主要通過WebService、WebAPI兩種方式提供。

3.2 系統數據流程

整個系統經由數據源數據採集,寫入大數據存儲SequoiaDB集群,然後由Spark進行分析計算,分析生成的臨床知識再寫入SequoiaDB知識庫,經由WebUI以及標準的API交由臨床使用。

3.3 數據導入流程

歷史數據的採集導入使用初期使用AgileEAS.NET SOA 的計劃任務配何C#腳本進行實現,由計劃任務進行協調定時執行,具體的數據導入代碼根據不同的臨床業務系統不同進行腳本代碼的調整,也可以使用Pentaho Kettle進行實現,通過Pentaho Kettle可配置的實現數據的導入。

3.4 系統物理架構

臨床數據源為本系統進行分析的數據來源,源自於臨床HIS、EMR,目前醫院的HIS使用SQL Server 2008 R2資料庫,EMR使用ORACLE 11G資料庫,運行於Windows2008操作系統之上。

SequoiaDB集群為大數據存儲數制庫集群,目前使用SequoiaDB v2.0,運行於Centos6.5操作系統之上,根據業務來規模使用2-16節點集群,其用於存儲經過清洗轉換處理的海量歷史臨床數據,供Spark集群進行分析,以及供應SOA伺服器進行歷史數據查詢和歷史相關推薦使用。

Spark集群為本系統的分析計算核心節點,用於對SequoiaDB集群之中的歷史數據進行分析,生成輔助臨床醫生使用的醫學知識,本集群根據業務來規模使用2-16節點集群,使用Centos6.5操作系統,安裝JAVA1.7.79運行環境、scala2.11.4語言,使用Spark1.3.1分析框架。

同時,SequoiaDB作為作為本系統的知識庫存儲資料庫時。Spark集群所生產的分析結構寫入本資料庫,經由SOA伺服器和Web服務處理供臨床系統集成使用和WebGUI展現。

SOA Server為本系統的對外介面應用伺服器,向臨床業務系統和Web Server提供業務運算邏輯,以及向臨床業務系統提供服務API,目前運行於Windows2008操作系統,部署有.NET Framework 4.0環境,運行AgileEAS.NET SOA 中間件的SOA服務,由AgileEAS.NET SOA 中間件SOA服務向外部系統提供標準的WebService以及WebAPI。

Web Server為系統提供基於標準的B/S瀏覽器用戶介面,供業務人員通過B/S網頁對系統進行管理,查詢使用知識庫之中的醫學知識,目前運行於Windows2008操作系統,部署有.NET Framework 4.0環境,運行於IIS7.0之中。

臨床工作站系統運行HIS、EMR系統,兩系統均使用C#語言SOA架構思路進行開發,與本系統集成改造後,使用標準WebService介面本系統,使用本系統所提供的API為臨床提供診療輔助。

4.結語

不論是NoSQL技術還是Spark技術,作為當前大數據新興的技術架構,都將是大數據應用的核心基礎。SequoiaDB的分散式架構支持了海量的數據的村存儲,同時其JSON/LOB的架構又可以滿足非結構化數據的存儲。這兩個特性可以說是醫療行業對於數據的核心需求。同時SequoiaDB作為數據源又能很好的對接Spark架構(SequoiaDB是Spark官方的全球10多家認證發行商之一),選擇SequoiaDB可以說也是大大提升了整個數據系統的性能和穩定性。

本文源自巨杉資料庫社區用戶實際應用案例

歡迎關注和加入巨杉資料庫開源社區


推薦閱讀:

從產業發展的現狀看國內大數據交易的法律問題
堆內和堆外
R語言和大數據
互聯網數據分析之道:轉化篇
FOFA小技能 看我山裡老農如何薅WordPress收費主題

TAG:資料庫 | NewSQL | 大數據 |