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

SequoiaDB發表於2016-12-02

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、事務操作、高併發、分散式、可擴充套件、與雙引擎儲存等特性,並已經作為商業化的資料庫產品開源。

enter image description here

除了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程式設計模型下的操作方式如下圖所示:

enter image description here

可以看到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 系統資料流程

enter image description here

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

3.3 資料匯入流程

enter image description here

歷史資料的採集匯入使用初期使用http://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環境,執行http://AgileEAS.NET SOA 中介軟體的SOA服務,由http://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可以說也是大大提升了整個資料系統的效能和穩定性。

本文源自巨杉資料庫社群使用者實際應用案例

SequoiaDB巨杉資料庫2.6最新版下載 SequoiaDB巨杉資料庫技術部落格 SequoiaDB巨杉資料庫社群

相關文章