海量離線醫(yī)學(xué)影像整體系統(tǒng)設(shè)計(jì)探討

時(shí)間:2022-09-26 09:56:50

導(dǎo)語:海量離線醫(yī)學(xué)影像整體系統(tǒng)設(shè)計(jì)探討一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

海量離線醫(yī)學(xué)影像整體系統(tǒng)設(shè)計(jì)探討

【摘要】為將海量離線醫(yī)學(xué)影像數(shù)據(jù)一次性恢復(fù)到近線狀態(tài),使用LinuxShell腳本完成磁帶調(diào)度、數(shù)據(jù)拷貝,并使用開源庫MDCM解析轉(zhuǎn)存醫(yī)學(xué)影像文件。在不依賴于原有離線歸檔還原系統(tǒng)數(shù)據(jù)庫情況下,實(shí)現(xiàn)了離線醫(yī)學(xué)影像數(shù)據(jù)自動(dòng)化、高效率的恢復(fù),滿足了日常病歷回顧的影像數(shù)據(jù)調(diào)閱和科研對(duì)海量數(shù)據(jù)訪問需求。

【關(guān)鍵詞】DICOM;分級(jí)存儲(chǔ);磁帶庫

醫(yī)學(xué)影像歸檔與傳輸系統(tǒng)(PictureArchivingandCommunicationSystems,PACS)是醫(yī)院信息系統(tǒng)重要組成部分,也是現(xiàn)代數(shù)字化醫(yī)院的基礎(chǔ)系統(tǒng)之一。歸檔和傳輸各種醫(yī)學(xué)影像設(shè)備所產(chǎn)生的海量數(shù)據(jù)是PACS的核心功能。大型醫(yī)院PACS多采用“在線”“近線”“離線”策略的分級(jí)存儲(chǔ)方式[1]。在大數(shù)據(jù)、人工智能研究如火如荼的今天,數(shù)據(jù)具有更大的利用價(jià)值。離線存儲(chǔ)的醫(yī)學(xué)影像數(shù)據(jù)調(diào)取困難,已成為數(shù)據(jù)利用的障礙。因此需要將離線存儲(chǔ)影像數(shù)據(jù)一次性恢復(fù)到在線狀態(tài)。

1需求分析

1.1某醫(yī)院醫(yī)學(xué)影像存儲(chǔ)現(xiàn)狀

某大型三甲醫(yī)院于2006年建成包括放射科、超聲科、病理科、內(nèi)鏡室、介入室等在內(nèi)的全院PACS。早期受限于磁盤陣列單位存儲(chǔ)空間價(jià)格高昂,采用了成本低廉的分級(jí)存儲(chǔ)方案。“近線”存儲(chǔ)是定期將超過在線數(shù)據(jù)保存時(shí)間的影像數(shù)據(jù)轉(zhuǎn)存到性能較低的磁盤陣列中。“離線”存儲(chǔ)使用的是歸檔備份軟件操作磁帶庫將“近線”存儲(chǔ)的影像數(shù)據(jù)轉(zhuǎn)存到LTO3規(guī)格的磁帶中。當(dāng)磁帶庫中的磁帶寫滿數(shù)據(jù)后,將存儲(chǔ)較舊數(shù)據(jù)的磁帶從磁帶庫退出,人工放入磁帶保管柜中,再加入新磁帶。2016年后,由于磁盤陣列單位存儲(chǔ)空間價(jià)格下降,分級(jí)存儲(chǔ)策略已改為“在線”和“近線”兩級(jí)存儲(chǔ)方式,以高性能閃存盤陣列存儲(chǔ)“在線”數(shù)據(jù),以磁盤陣列存儲(chǔ)“近線”數(shù)據(jù),不再將數(shù)據(jù)離線存儲(chǔ)到磁帶中。目前總計(jì)有255盤磁帶存儲(chǔ)“離線”數(shù)據(jù),這部分?jǐn)?shù)據(jù)的調(diào)閱仍然需要采用單個(gè)檢查影像恢復(fù)的作業(yè)流程。

1.2需要解決的問題

由于磁帶只能順序讀取,而磁帶庫的驅(qū)動(dòng)器個(gè)數(shù)又很有限,機(jī)械臂更換磁帶效率低等原因,“離線”影像數(shù)據(jù)的訪問速度慢、效率低、人工操作繁瑣[2]。實(shí)際調(diào)取1個(gè)患者的影像數(shù)據(jù)需約數(shù)分鐘至十幾分鐘的時(shí)間。如遇存放數(shù)據(jù)的磁帶存放于保管柜中,還需要人工將磁帶放入磁帶庫中,則花費(fèi)時(shí)間將更長。已完全不能滿足醫(yī)學(xué)影像大數(shù)據(jù)和人工智能等科研對(duì)海量影像數(shù)據(jù)的調(diào)閱需求[3]。磁盤陣列相較于磁帶庫具有讀寫性能好,數(shù)據(jù)實(shí)時(shí)可訪問的優(yōu)勢(shì)。隨著磁盤陣列單位存儲(chǔ)空間價(jià)格下降,從硬件方面考慮將離線影像數(shù)據(jù)遷移到低性能的磁盤陣列存儲(chǔ),已具有較高的性價(jià)比。

2醫(yī)學(xué)影像與DICOM標(biāo)準(zhǔn)

醫(yī)學(xué)數(shù)字成像及通信協(xié)議(DigitalImagingandCommunicationsinMedicine,DICOM)是用于醫(yī)學(xué)數(shù)字影像存檔與通信的國際標(biāo)準(zhǔn)。DICOM文件是指按照DICOM標(biāo)準(zhǔn)而存儲(chǔ)的醫(yī)學(xué)影像文件,一般由一個(gè)DICOM文件頭和一個(gè)DICOM數(shù)據(jù)集合組成。DICOM數(shù)據(jù)集合由DICOM數(shù)據(jù)元(dataElement)按照指定的順序依次排列組成[4]。數(shù)據(jù)元主要由4個(gè)部分組成:TAG號(hào)、值、值長度和值域[5]。DICOM數(shù)據(jù)集合存儲(chǔ)了患者信息、檢查信息、序列信息、圖像信息、設(shè)備相關(guān)信息、圖像像素等內(nèi)容。見表1。

3系統(tǒng)功能設(shè)計(jì)

離線醫(yī)學(xué)影像整體恢復(fù)系統(tǒng)由磁帶拷貝、DICOM轉(zhuǎn)存和路徑更新3個(gè)模塊組成。其網(wǎng)絡(luò)拓?fù)淙鐖D1所示。磁帶庫和磁帶鏡像存儲(chǔ)通過光纖與磁帶拷貝服務(wù)器連接,近線存儲(chǔ)通過光纖連接到DICOM轉(zhuǎn)存服務(wù)器,分別形成兩個(gè)SAN存儲(chǔ)網(wǎng)絡(luò)。磁帶拷貝服務(wù)器、DICOM轉(zhuǎn)存服務(wù)器和中間數(shù)據(jù)庫通過千兆以太網(wǎng)連接到PACS局域網(wǎng)中。DICOM轉(zhuǎn)存服務(wù)器使用NFS協(xié)議與磁帶拷貝服務(wù)器通訊,以訪問磁帶鏡像存儲(chǔ)中的數(shù)據(jù)。

3.1磁帶拷貝

包括磁帶調(diào)度、磁帶讀取和文件保存3個(gè)功能。磁帶的調(diào)度和讀取需要通過磁帶庫完成。磁帶庫由多個(gè)驅(qū)動(dòng)器(Driver)、多個(gè)槽(Slot)、機(jī)械手臂(Robot)組成,并可由機(jī)械手臂抓取磁帶在驅(qū)動(dòng)器和槽之間調(diào)度,從而自動(dòng)實(shí)現(xiàn)磁帶的拆卸和裝填。為節(jié)約成本,以原有的磁帶庫作為磁帶讀取設(shè)備,該磁帶庫結(jié)構(gòu)見圖2。離線影像數(shù)據(jù)存在于255盤磁帶介質(zhì)中,而使用的磁帶庫僅有1個(gè)驅(qū)動(dòng)器和38個(gè)槽,可一次放入38盤磁帶,通過腳本控制磁帶庫機(jī)械臂實(shí)現(xiàn)磁帶由槽到驅(qū)動(dòng)器的自動(dòng)裝載和由驅(qū)動(dòng)器到槽的自動(dòng)拆卸。Linux操作系統(tǒng)對(duì)磁帶庫支持很好,且有許多控制命令,可以控制機(jī)械臂和驅(qū)動(dòng)器完成磁帶調(diào)度和數(shù)據(jù)讀取作業(yè),因此磁帶拷貝模塊以Linuxshell編碼實(shí)現(xiàn)。使用Linux操作系統(tǒng)中的dd命令可將磁帶數(shù)據(jù)拷貝至磁帶鏡像存儲(chǔ)。dd是Linux/UNIX下的一個(gè)命令,作用是用指定大小的塊拷貝一個(gè)文件,并在拷貝的同時(shí)進(jìn)行指定的轉(zhuǎn)換。例如:ddif=/dev/nst0of=/data/VOL446/vol446_1.datibs=1024k語句表示從磁帶驅(qū)動(dòng)器st0中以1024k大小的塊,拷貝一個(gè)文件到data/VOL446/vol446_1.dat文件。nst0前的n表示讀取數(shù)據(jù)后不回卷磁帶,不帶n表示讀取數(shù)據(jù)后回卷磁帶到開始位置。循環(huán)使用dd命令順序讀取磁帶上的所有文件,并將文件保存到磁盤中,當(dāng)保存的文件大小為0,也就是讀取的字節(jié)數(shù)為0時(shí),表示整盤磁帶數(shù)據(jù)已拷貝完成,退出操作。

3.2文件轉(zhuǎn)存

通過解析整理DICOM文件、檢查和序列描述文件,將其存儲(chǔ)在最終的磁盤陣列中,并將每個(gè)序列的DICOM文件存儲(chǔ)路徑寫入中間數(shù)據(jù)庫,完成DICOM轉(zhuǎn)存。為充分發(fā)揮磁盤陣列I/O吞吐率,減少時(shí)間花費(fèi),DICOM轉(zhuǎn)存模塊采用多線程作業(yè)方式。要完成DICOM文件轉(zhuǎn)存,最重要的是要清楚了解離線備份文件結(jié)構(gòu)。見圖3。使用二進(jìn)制查看器對(duì)磁帶鏡像存儲(chǔ)中的文件進(jìn)行格式分析。將一次歸檔備份操作寫入磁帶的數(shù)據(jù)稱為一個(gè)備份集,則每盤磁帶約有3000多個(gè)備份集。每個(gè)備份集中有3個(gè)文件,分別為備份集開始標(biāo)記文件、以Tar格式打包的數(shù)據(jù)文件(Tar文件)和備份集結(jié)束標(biāo)記文件。備份集開始標(biāo)記文件中記錄Tar文件包中的文件名。第一個(gè)備份集開始標(biāo)記文件在文件最前面包含磁帶開始標(biāo)記,記錄歸檔備份軟件名稱、版本號(hào)和磁帶的編號(hào)。Tar文件中包括若干對(duì)文件,每對(duì)文件分別有一個(gè)擴(kuò)展名為.xml和.dat的文件,兩個(gè)文件的文件主名相同。擴(kuò)展名為.xml文件記錄備份時(shí)的信息,擴(kuò)展名為.dat的文件(以下簡(jiǎn)稱“dat文件”)分別為DICOM格式的影像文件(以下簡(jiǎn)稱“DICOM文件”)、文本格式的檢查描述文件(以下簡(jiǎn)稱“Study文件”)和文本格式的序列描述文件(以下簡(jiǎn)稱“Serie文件”)。Study文件和Serie文件中分別含有“stu”“ser”關(guān)鍵字。文件轉(zhuǎn)存就是將DICOM文件、Study文件和Serie文件按照PACS系統(tǒng)路徑規(guī)則保存到近線存儲(chǔ)中。3.3路徑更新為能使用原有PACS系統(tǒng)客戶端調(diào)閱影像,需要將轉(zhuǎn)存后的DICOM文件路徑更新到原PACS系統(tǒng)數(shù)據(jù)庫中。即將中間數(shù)據(jù)庫中的序列DICOM文件存儲(chǔ)路徑更新到原PACS數(shù)據(jù)庫中,并更新相應(yīng)檢查影像記錄為“近線”狀態(tài)。

4功能實(shí)現(xiàn)

4.1磁帶調(diào)度

介質(zhì)切換工具(MediaChangerTools)可以實(shí)現(xiàn)磁帶的調(diào)度。例如mtx-f/dev/sg0load10表示將1號(hào)槽位的磁帶裝入0號(hào)驅(qū)動(dòng)器,其中sg0為磁帶庫機(jī)械臂在系統(tǒng)的標(biāo)識(shí)號(hào);mtx-f/dev/sg0unload10表示將0號(hào)驅(qū)動(dòng)器的磁帶拆卸放回1號(hào)槽位。設(shè)置兩個(gè)命令行參數(shù)slot_begin和slot_end分別表示磁帶連續(xù)放置的最小槽編號(hào)和最大槽編號(hào),腳本循環(huán)調(diào)用mtxload和mtxunload實(shí)現(xiàn)對(duì)slot_begin到slot_end槽磁帶的調(diào)度。

4.2磁帶讀取

磁帶裝載到驅(qū)動(dòng)器后,使用dd命令讀取磁帶中的數(shù)據(jù)。磁帶中的第一個(gè)文件也就是第一個(gè)備份集開始標(biāo)記文件中的磁帶開始標(biāo)記字符串包含磁帶編號(hào),為了便于查對(duì)在磁盤陣列存儲(chǔ)中創(chuàng)建以磁帶編號(hào)命名的文件目錄,用于存放整盤磁帶的數(shù)據(jù)。使用n=`ddif=/dev/st0bs=1024k`語句將第一個(gè)備份集的第一個(gè)文件也就是磁帶開始標(biāo)記讀出賦值給變量n,再使用vol=${n:22:6}將n中的第22個(gè)字符開始的6個(gè)字符截取賦值給變量vol,即磁帶編號(hào)。磁帶編號(hào)以VOL開頭,后面接3位數(shù)數(shù)字,比如VOL446代表第446號(hào)磁帶。磁帶庫驅(qū)動(dòng)器標(biāo)識(shí)號(hào)使用的是/dev/st0圖2磁帶庫結(jié)構(gòu)而不是/dev/nst0,是因?yàn)槭褂胐d命令讀取磁帶的第一個(gè)文件后,需要讓驅(qū)動(dòng)器將磁帶回卷到開頭,以便下一步使用dd命令從頭將文件拷貝到以磁帶編號(hào)命名的目錄中。磁帶回卷后,循環(huán)拷貝每個(gè)備份集的文件到磁盤的對(duì)應(yīng)目錄。每次使用dd命令拷貝文件后需要判斷生成的文件大小是否為0,如是表示已讀到磁帶數(shù)據(jù)結(jié)尾則退出循環(huán)。使用mt-f/dev/st0offline回卷磁帶到開始位置,再使用mtxunload將磁盤放回原來槽位置,然后使用mtxload將下一盤磁帶加載到驅(qū)動(dòng)器繼續(xù)拷貝數(shù)據(jù)。

4.3文件轉(zhuǎn)存

利用.Net平臺(tái)下SharpZipLib組件解包磁帶鏡像存儲(chǔ)上的Tar文件。使用TarInputStreams=newTarInputStream(System.IO.File.OpenRead(“Tar文件名”))來初始化一個(gè)TarInputStream對(duì)象,TarEntrytheEntry=s.GetNextEntry()語句順序獲取Tar文件中包含的文件,跳過擴(kuò)展名為.xml的備份信息文件。使用s.CopyEntryContents(ms)方法可將Tar文件中當(dāng)前文件的內(nèi)容拷貝到一個(gè)MemoryStream對(duì)象中,判斷數(shù)據(jù)文件的類型以便采取不同的處理方法。可根據(jù)128字節(jié)的文件導(dǎo)言后緊跟4字節(jié)的DICM前綴(即特征字符串DICM)判斷數(shù)據(jù)文件是否為DICOM文件,從文件內(nèi)容是否包含“stu”或“ser”關(guān)鍵字判斷Study描述文件和Serie描述文件。對(duì)于DICOM文件,使用mDcm開源庫DicomFile對(duì)象的Open(ms)方法加載到內(nèi)存中。為了便于檢索數(shù)量眾多的DICOM文件,需要將其分多層級(jí)目錄存儲(chǔ)。設(shè)定DICOM文件在目標(biāo)存儲(chǔ)中的存儲(chǔ)目錄結(jié)構(gòu)從上到下依次為:檢查日期的年份加月份、患者ID、檢查ID、序列實(shí)例號(hào)。使用DicomFile對(duì)象的Save方法將DICOM文件保存到對(duì)應(yīng)的序列實(shí)例號(hào)目錄下,文件名為圖像UID。將Study文件和Serie文件分別拷貝到對(duì)應(yīng)的檢查ID目錄和序列實(shí)例號(hào)目錄下。患者ID、檢查ID、檢查日期、序列實(shí)例號(hào)、圖像UID等數(shù)據(jù)元的值可通過DicomFile對(duì)象的Dataset.Get<string>(newDicomTag(“組號(hào)”“元素號(hào)”))方法獲取[6]。同時(shí)將檢查信息、序列信息存儲(chǔ)到中間數(shù)據(jù)庫。

5結(jié)論

通過對(duì)某醫(yī)院PACS系統(tǒng)“離線”文件數(shù)據(jù)格式的仔細(xì)分析,進(jìn)行了科學(xué)合理的架構(gòu)設(shè)計(jì),以及關(guān)鍵技術(shù)的選用,從而構(gòu)建了醫(yī)學(xué)影像離線備份數(shù)據(jù)批量恢復(fù)系統(tǒng),實(shí)現(xiàn)了離線影像數(shù)據(jù)自動(dòng)化、高效率的還原。在半個(gè)月內(nèi)完成約100TB“離線”影像數(shù)據(jù)還原到“近線”狀態(tài)。滿足了病歷追蹤、影像對(duì)比、醫(yī)學(xué)影像AI等數(shù)據(jù)訪問需求。該系統(tǒng)不依賴于原歸檔數(shù)據(jù)庫,通過獲取DICOM文件特定數(shù)據(jù)元信息生成DICOM文件存儲(chǔ)目錄,具有廣泛的借鑒意義。

參考文獻(xiàn)

[1]蔡雨蒙,冷鍇,單紅偉,等.大型醫(yī)院影像分級(jí)存儲(chǔ)架構(gòu)下歸檔的策略及應(yīng)用[J].中國數(shù)字醫(yī)學(xué),2017,12(1):48-51.

[2]劉賀.PACS存儲(chǔ)歸檔備份管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].沈陽:東北大學(xué),2013:32-33.

[3]余紹德.卷積神經(jīng)網(wǎng)絡(luò)和遷移學(xué)習(xí)在癌癥影像分析中的研究[D].深圳:中國科學(xué)院深圳先進(jìn)技術(shù)研究院,2018:1-2.

[4]丁磊.基于DICOM標(biāo)準(zhǔn)的醫(yī)學(xué)文件研究與處理[D].成都:電子科技大學(xué),2019:12-14.

[5]龍華飛,唐月華,陳泓伶.PACS系統(tǒng)中醫(yī)學(xué)圖像格式解析[J].中國數(shù)字醫(yī)學(xué),2014,9(3):29-31.

[6]紀(jì)永章,楊輝,薛淞.dcm4che在醫(yī)療大數(shù)據(jù)平臺(tái)中的應(yīng)用[J].中國數(shù)字醫(yī)學(xué),2016,11(10):15-17.

作者:米文軍 徐川