一、前言
本平臺(tái)技術(shù)選型充分參考信息資源規(guī)劃和數(shù)據(jù)庫(kù)建設(shè),符合國(guó)家及行業(yè)相關(guān)信息資源標(biāo)準(zhǔn)規(guī)范要求[1,包含大數(shù)據(jù)建設(shè)CAP原則、三范式規(guī)范、指標(biāo)體系分類編碼標(biāo)準(zhǔn)、信息資源目錄標(biāo)準(zhǔn)、元數(shù)據(jù)標(biāo)準(zhǔn)、代碼標(biāo)準(zhǔn)以及數(shù)據(jù)交換格式標(biāo)準(zhǔn)等。為充分滿足現(xiàn)有及將來(lái)醫(yī)療業(yè)務(wù)發(fā)展要求,考慮涵蓋所有類型的數(shù)據(jù),包括接口數(shù)據(jù)、結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)以及影像數(shù)據(jù)等,全面納入數(shù)據(jù)治理范圍,支持批處理、流處理、接口實(shí)時(shí)處理,滿足醫(yī)院海量數(shù)據(jù)處理效率、時(shí)效及性能要求,可支撐醫(yī)院科研、DRG/DIP、運(yùn)營(yíng)管理等多方業(yè)務(wù)[2]。
二、整體概述
數(shù)據(jù)湖沿用了HDFS(分布式文件系統(tǒng))的底層架構(gòu),以分布式多節(jié)點(diǎn)并行運(yùn)算為基礎(chǔ),保留了大數(shù)據(jù)平臺(tái)PB級(jí)的數(shù)據(jù)運(yùn)算能力,并擴(kuò)展出了Index(索引)和timeline(時(shí)間線)兩個(gè)特性,從而使數(shù)據(jù)湖既擁有HDFS的分布式運(yùn)算能力,又利用Index和timeline的特性,可以像結(jié)構(gòu)化數(shù)據(jù)庫(kù)一樣,擁有ACID級(jí)別數(shù)據(jù)寫人能力,從而實(shí)現(xiàn)同時(shí)兼顧OLAP(聯(lián)機(jī)分析處理)和OLTP(聯(lián)機(jī)事務(wù)處理)[3]。
相較于傳統(tǒng)結(jié)構(gòu)化數(shù)據(jù)庫(kù),先用三范式建表建模然后再存儲(chǔ)的方式,其數(shù)據(jù)湖是開(kāi)放式的存儲(chǔ)模型,各類數(shù)據(jù)都以FileGroup(數(shù)據(jù)文件)格式進(jìn)行存儲(chǔ),并不需要固定的數(shù)據(jù)表規(guī)范,可以兼容各類數(shù)據(jù)源,容納各類數(shù)據(jù)庫(kù)的數(shù)據(jù)字段,并且提供彈性的容量和吞吐能力,數(shù)據(jù)存儲(chǔ)不夠時(shí),只要有足夠硬件資源可以動(dòng)態(tài)擴(kuò)容,就不需要手動(dòng)處理。
技術(shù)架構(gòu)主體分為數(shù)據(jù)生產(chǎn)層和數(shù)據(jù)應(yīng)用層。
數(shù)據(jù)生產(chǎn)層:用來(lái)支撐數(shù)據(jù)處理的分布式計(jì)算平臺(tái)。以ApacheHadoop生態(tài)系統(tǒng)開(kāi)源軟件為主,通過(guò)大數(shù)據(jù)相關(guān)技術(shù),生產(chǎn)、提供各上層應(yīng)用數(shù)據(jù)(如CDM庫(kù)和專病庫(kù)等各基礎(chǔ)數(shù)據(jù)倉(cāng)庫(kù)[4。數(shù)據(jù)采集和交互使用Flume、Sqoop、Kafka等組件將異構(gòu)的數(shù)據(jù)進(jìn)行采集發(fā)送。數(shù)據(jù)存儲(chǔ)采用Hbase、ElasticSearch等組件來(lái)給不同的應(yīng)用及使用場(chǎng)景提供存儲(chǔ)。平臺(tái)采用Hive、Presto、Spark、Flink、ClickHouse等分布式計(jì)算機(jī)OLAP組件進(jìn)行不同業(yè)務(wù)和應(yīng)用的數(shù)據(jù)計(jì)算[5]。
數(shù)據(jù)應(yīng)用層:主要是通過(guò)服務(wù)、接口、展現(xiàn)等方式來(lái)進(jìn)行數(shù)據(jù)處理和功能展示等,其醫(yī)學(xué)數(shù)據(jù)來(lái)源于數(shù)據(jù)生產(chǎn)層治理結(jié)果數(shù)據(jù)。這部分主體分為基礎(chǔ)服務(wù)層、網(wǎng)關(guān)層、接入層及展示層。基礎(chǔ)服務(wù)層主要提供平臺(tái)的任務(wù)分布式調(diào)用、報(bào)表服務(wù)、審批服務(wù)等公共底層服務(wù),服務(wù)層通過(guò)不同的應(yīng)用進(jìn)行數(shù)據(jù)的采集、處理。網(wǎng)關(guān)層通過(guò)ApiGateway、WebGateway等進(jìn)行后端接口的統(tǒng)一配置,在網(wǎng)關(guān)層的統(tǒng)一鑒權(quán)進(jìn)行用戶認(rèn)證,提供友好可測(cè)試的接口文檔SwaggerApi。接人層通過(guò)高性能的HTTP和反向代理Web服務(wù)器將平臺(tái)服務(wù)對(duì)外提供。展示層用戶可以通過(guò)客戶端(瀏覽器)進(jìn)行相應(yīng)的操作和數(shù)據(jù)展示。
三、數(shù)據(jù)匯聚
(一)全量數(shù)據(jù)匯聚
將臨床系統(tǒng)的數(shù)據(jù)進(jìn)行匯聚,包括:住院醫(yī)護(hù)工作站、ICU重癥監(jiān)護(hù)系統(tǒng)、急診搶救系統(tǒng)、住院登記系統(tǒng)、醫(yī)療設(shè)備管理系統(tǒng)等臨床數(shù)據(jù)系統(tǒng),以及呼吸機(jī)、心電監(jiān)護(hù)儀、輸液泵、CT、核磁、DR等醫(yī)療設(shè)備,全量地收集、匯聚數(shù)據(jù)。
全量數(shù)據(jù)的匯聚采用批式處理的方式,針對(duì)醫(yī)院系統(tǒng)的備份庫(kù)/鏡像庫(kù)進(jìn)行處理,不直接作用于醫(yī)院的主庫(kù),不影響醫(yī)院業(yè)務(wù)。將鏡像庫(kù)的數(shù)據(jù)通過(guò)Spark定時(shí)任務(wù),定時(shí)抽取數(shù)據(jù)進(jìn)入數(shù)據(jù)湖之中,形成數(shù)據(jù)匯聚,具體結(jié)構(gòu)如圖1所示。
匯聚時(shí)根據(jù)數(shù)據(jù)庫(kù)類型的不同建立多種形式,MySQL采取Binlog同步方式,SQLServer采取消息訂閱方式,Oracle采用OGG工具,Caché采用CacheMirror或者CachéShadow的方式。
(二)增量數(shù)據(jù)匯聚
增量數(shù)據(jù)采用流式匯聚的方式,通過(guò)對(duì)同步日志的實(shí)時(shí)監(jiān)控,實(shí)時(shí)獲取同步日志,然后由Flink抓取實(shí)時(shí)日志,進(jìn)行處理,將同步日志流人數(shù)據(jù)湖之中,并更新數(shù)據(jù)湖內(nèi)的數(shù)據(jù),從而達(dá)到增量匯聚的目的,具體結(jié)構(gòu)如圖2所示。
全量數(shù)據(jù)提取以后,增量數(shù)據(jù)只需要建立起實(shí)時(shí)管道,數(shù)據(jù)湖就如同備份/鏡像庫(kù)一樣,可以與業(yè)務(wù)系統(tǒng)數(shù)據(jù)同步更新。
四、多模態(tài)數(shù)據(jù)
影像原文件如果是標(biāo)準(zhǔn)化的Dicom文件,通過(guò)Dicom3.0協(xié)議進(jìn)行數(shù)據(jù)采集,非標(biāo)準(zhǔn)化(如JPG、BMP)的Dicom文件通過(guò)FTP采集原文件。病理原文件通過(guò)FTP或者HTTP采集原文件。基因測(cè)序的原文件FSATQ文件通過(guò)FTP或者HTTP采集。
臨床數(shù)據(jù)依然按照上面說(shuō)的全量數(shù)據(jù)匯聚、增量數(shù)據(jù)匯聚、接口數(shù)據(jù)匯聚的形式進(jìn)行,依照標(biāo)準(zhǔn)的DHCDM模型,將病理、影像、基因文件與臨床數(shù)據(jù)進(jìn)行關(guān)聯(lián)整合,具體結(jié)構(gòu)如圖3所示。
如果是全量的病理、影像、基因文件與臨床數(shù)據(jù)關(guān)聯(lián),依然使用Spark定時(shí)執(zhí)行即可,如果新增的病理、影像、基因文件與臨床數(shù)據(jù)關(guān)聯(lián),使用Flink實(shí)時(shí)處理進(jìn)行關(guān)聯(lián)。
(一)多模態(tài)數(shù)據(jù)模型
患者信息和就診信息為核心信息。
檢查信息與患者信息通過(guò)患者ID和就診ID關(guān)聯(lián),檢查的影像序列通過(guò)檢查業(yè)務(wù)記錄ID與檢查信息關(guān)聯(lián),標(biāo)注過(guò)程通過(guò)影像序列ID與檢查的影像序列關(guān)聯(lián),標(biāo)注以后提取的影像組學(xué)通過(guò)影像序列ID與檢查的影像序列關(guān)聯(lián)。一份檢查序列因?yàn)镽OI的不同,可能會(huì)有多份不同的組學(xué)。
病理標(biāo)本信息與患者信息通過(guò)患者ID和就診ID關(guān)聯(lián),病理切片掃描以后的WSI文件,通過(guò)病理業(yè)務(wù)記錄ID與病理標(biāo)本信息關(guān)聯(lián),存放病理組學(xué)的病理分析結(jié)果,通過(guò)WSI文件ID與病理文件信息關(guān)聯(lián)。
基因原始測(cè)序文件FASTQ信息和存放測(cè)序設(shè)備信息的基因信息,通過(guò)病理樣本編碼與臨床相關(guān)聯(lián),這里的病理標(biāo)本是作為生物樣本的,涵蓋范圍不只是組織切片和血液,還有毛發(fā)等其他生物樣本信息。通過(guò)中間表分析記錄樣本關(guān)聯(lián),將樣本ID和分析ID進(jìn)行關(guān)聯(lián),分析結(jié)果記錄分析軟件、基因組版本等,通過(guò)分析ID關(guān)聯(lián)具體的分析結(jié)果(如突變分析結(jié)果、拷貝數(shù)變異分析結(jié)果、融合分析結(jié)果、RNA表達(dá)譜分析結(jié)果、可變剪切分析結(jié)果)。
(二)影像和病理數(shù)據(jù)
和影像相關(guān)聯(lián)的臨床數(shù)據(jù)(如就診和檢查信息等)依然適用全量數(shù)據(jù)匯聚的方式,具體根據(jù)不同類型的臨床庫(kù)進(jìn)行匯聚。影像文件分兩種情況:對(duì)于標(biāo)準(zhǔn)的Dicom文件,基于已有的服務(wù)為基礎(chǔ)作SCP(ServiceClassProvider),直接使用dcm4chee作SCU(ServiceClassUser)進(jìn)行對(duì)接拉取數(shù)據(jù);對(duì)于非標(biāo)準(zhǔn)Dicom文件(如JGP/BMP等),基于已有的FTP服務(wù),直接使用FTPCLIENT連接,如果沒(méi)有,可在服務(wù)器臨時(shí)搭建ApacheFtpServer,管理這些影像文件,并抓取數(shù)據(jù),同時(shí)利用患者ID、就診ID、檢查ID,用SPARK腳本將臨床與影像相關(guān)聯(lián)。
病理相關(guān)聯(lián)的臨床數(shù)據(jù)(如樣本信息、病理報(bào)告等),依然使用全量數(shù)據(jù)匯聚的方式,具體根據(jù)不同類型的臨床庫(kù)進(jìn)行匯聚。病理文件分兩種情況:病理掃描文件TIFF、SVS,通過(guò)HTTP服務(wù),將文件轉(zhuǎn)成IO書流,然后進(jìn)行對(duì)接存儲(chǔ),或是FTP服務(wù),平臺(tái)直接作為FTPCLIENT連接;如果沒(méi)有,可在服務(wù)器搭建ApacheFtpServer,管理這些文件,自己連接FTP服務(wù)器抓取數(shù)據(jù),同時(shí)利用患者ID、就診ID、病理ID,用SPARK腳本將臨床與病理相關(guān)聯(lián)。
影像和病理的增量匯聚沒(méi)有區(qū)別,無(wú)法做到實(shí)時(shí),只能做到T+1",然后通過(guò)序列號(hào)或ID號(hào)進(jìn)行文件的覆蓋。檢查信息和報(bào)告信息按照臨床數(shù)據(jù)增量的方式匯聚,數(shù)據(jù)有更新以后,影像和臨床數(shù)據(jù)T+1進(jìn)行關(guān)聯(lián)更新。
五、數(shù)據(jù)讀寫
相較于結(jié)構(gòu)化數(shù)據(jù)庫(kù),平臺(tái)采用的數(shù)據(jù)湖在運(yùn)算和海量數(shù)據(jù)查詢方面速度要快很多,對(duì)于千萬(wàn)級(jí)別的數(shù)據(jù)級(jí)聯(lián)運(yùn)算,結(jié)構(gòu)化數(shù)據(jù)庫(kù)只能單一節(jié)點(diǎn)、單一任務(wù)執(zhí)行,運(yùn)算時(shí)間非常長(zhǎng),而數(shù)據(jù)湖是利用分布式存儲(chǔ)技術(shù)底層的HDFS進(jìn)行多數(shù)據(jù)節(jié)點(diǎn)的并行運(yùn)算,任務(wù)可以拆分到不同的節(jié)點(diǎn)同時(shí)進(jìn)行,極大提高了數(shù)據(jù)運(yùn)算的速度[]。
傳統(tǒng)的Hadoop大數(shù)據(jù)體系,HIVE數(shù)倉(cāng)同樣也可以提供并行運(yùn)算,但是傳統(tǒng)大數(shù)據(jù)體系有一個(gè)致命問(wèn)題,就是無(wú)法支持ACID級(jí)別的事務(wù)處理,也就是說(shuō)無(wú)法進(jìn)行少量數(shù)據(jù)的新增和更新,這個(gè)與大數(shù)據(jù)體系的原理有關(guān)。大數(shù)據(jù)將所有的數(shù)據(jù)分節(jié)點(diǎn)、分塊存儲(chǔ),當(dāng)數(shù)據(jù)有變更時(shí),需要將全節(jié)點(diǎn)的數(shù)據(jù)全部取出,然后進(jìn)行遍歷更新,將所有節(jié)點(diǎn)的數(shù)據(jù)重新寫回,這樣每次數(shù)據(jù)更新的損耗是極其巨大的,每次更新都是一次批量的過(guò)程,無(wú)法達(dá)到實(shí)時(shí)更新的目的。
而大數(shù)據(jù)湖則是在保留支持并行運(yùn)算的同時(shí),支持ACID級(jí)別的處理。同樣的新增/修改任務(wù),數(shù)據(jù)湖的不同數(shù)據(jù)節(jié)點(diǎn)會(huì)有不同的數(shù)據(jù)版本,并且數(shù)據(jù)湖有索引機(jī)制,可以通過(guò)索引定位到要更新的幾個(gè)具體的數(shù)據(jù),然后進(jìn)行更新。更新以后的數(shù)據(jù)與原版本中不做更新的數(shù)據(jù)合并以后就形成了新的版本,新的版本數(shù)據(jù)直接存放下來(lái),給其他應(yīng)用,沒(méi)有了整個(gè)數(shù)據(jù)回寫的流程,從而實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)更新的能力。
數(shù)據(jù)湖為了進(jìn)一步提供效能,在數(shù)據(jù)合并的時(shí)候提供了兩種模式:一種是COW寫時(shí)合并,也就是少量數(shù)據(jù)有了新增或者更新就馬上與原版本中不做更新的數(shù)據(jù)合并;另外一種就是MOR讀時(shí)合并,也就是說(shuō)少量數(shù)據(jù)有了更新先記錄下來(lái),不直接更新,等讀取到這些數(shù)據(jù)的時(shí)候,才將相關(guān)聯(lián)的更新數(shù)據(jù)與原版本的數(shù)據(jù)進(jìn)行合并,這樣就進(jìn)一步釋放了性能,將讀寫完全異步化。
六、數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)湖的存儲(chǔ)模式沿用了HDFS的存儲(chǔ)底層架構(gòu),并且基于此擴(kuò)展出了Index和timeline兩個(gè)特性,從而使數(shù)據(jù)湖既擁有HDFS的分布式運(yùn)算能力,又利用Index和timeline的特性擁有了少量數(shù)據(jù)的新增和更新的能力,從而實(shí)現(xiàn)同時(shí)兼顧OLAP和OLTP。
相較于傳統(tǒng)結(jié)構(gòu)化數(shù)據(jù)庫(kù),先用三范式建表建模,然后再存儲(chǔ)的方式,數(shù)據(jù)湖是開(kāi)放式的存儲(chǔ)模型,各類數(shù)據(jù)都以數(shù)據(jù)文件格式進(jìn)行存儲(chǔ),并不需要固定的數(shù)據(jù)表規(guī)范,可以兼容各類數(shù)據(jù)源,容納各類數(shù)據(jù)庫(kù)的數(shù)據(jù)字段。
數(shù)據(jù)索引支持在記錄key存在的情況下將新記錄的key快速映射到對(duì)應(yīng)的fileId,默認(rèn)是bloomfilter,但是選擇HbaseIndex可以更快速檢索,同時(shí)因?yàn)閠imeline的存在,所有的數(shù)據(jù)都是多版本的,支持按照版本獲取數(shù)據(jù)文件,同時(shí)支持rollback、clean、savepoint等操作。可以通過(guò)savepoint、rollback將數(shù)據(jù)進(jìn)行版本還原,同時(shí)clean可以清理不需要的版本。
七、結(jié)語(yǔ)
隨著各家醫(yī)療機(jī)構(gòu)信息化程度的不斷提升,以及對(duì)于臨床科研的更高要求,數(shù)據(jù)中臺(tái)的作用會(huì)愈發(fā)顯著。本文介紹了一個(gè)基于數(shù)據(jù)湖的大數(shù)據(jù)科研平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn),以滿足不斷變化的政策和業(yè)務(wù)需求,同時(shí)支持多種開(kāi)發(fā)語(yǔ)言及框架,便于跨平臺(tái)移植,支持國(guó)產(chǎn)化系統(tǒng)及常見(jiàn)系統(tǒng)運(yùn)行。
參考文獻(xiàn)
[1]劉輝,蔡宏偉,高娟娟,等.大型綜合性醫(yī)院生物樣本信息資源大數(shù)據(jù)科研平臺(tái)的建設(shè)與應(yīng)用[J].醫(yī)學(xué)信息學(xué)雜志,2024,45(01):77-82.
[2]張澤丹,王斌,陳婷,等.基于區(qū)塊鏈的中醫(yī)消化領(lǐng)域臨床科研一體化數(shù)據(jù)共享平臺(tái)的研究與設(shè)計(jì)[J].中華中醫(yī)藥學(xué)刊,2024,42(06):29-33+265.
[3]張俊祥,李傳富,呂維富.人工智能在醫(yī)學(xué)教育,科研和臨床實(shí)踐中的應(yīng)用前景與挑戰(zhàn)[J].中華全科醫(yī)學(xué),2024,22(07):1085-1089.
[4]宋雪,王覓也,鄭濤,等.醫(yī)院大數(shù)據(jù)平臺(tái)建設(shè)難點(diǎn)及關(guān)鍵技術(shù)研究[J].中國(guó)衛(wèi)生信息管理雜志,2024,21(02):286-290+324.
[5]陳友瓊,師慶科,王覓也,等.臨床科研大數(shù)據(jù)共享平臺(tái)建設(shè)與應(yīng)用[J].醫(yī)療衛(wèi)生裝備,2024,45(04):27-31.
[6]杜青,孫曉瑋,冷金昌,等.跨院區(qū)分布式醫(yī)療數(shù)據(jù)采集融合平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)衛(wèi)生信息管理雜志,2024,21(04):518-525+533.
作者單位:福建省兒童醫(yī)院
責(zé)任編輯:王穎振鄭凱津