海量离线医学影像整体系统设计探讨

时间:2022-09-26 09:56:50

导语:海量离线医学影像整体系统设计探讨一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。

海量离线医学影像整体系统设计探讨

【摘要】为将海量离线医学影像数据一次性恢复到近线状态,使用LinuxShell脚本完成磁带调度、数据拷贝,并使用开源库MDCM解析转存医学影像文件。在不依赖于原有离线归档还原系统数据库情况下,实现了离线医学影像数据自动化、高效率的恢复,满足了日常病历回顾的影像数据调阅和科研对海量数据访问需求。

【关键词】DICOM;分级存储;磁带库

医学影像归档与传输系统(PictureArchivingandCommunicationSystems,PACS)是医院信息系统重要组成部分,也是现代数字化医院的基础系统之一。归档和传输各种医学影像设备所产生的海量数据是PACS的核心功能。大型医院PACS多采用“在线”“近线”“离线”策略的分级存储方式[1]。在大数据、人工智能研究如火如荼的今天,数据具有更大的利用价值。离线存储的医学影像数据调取困难,已成为数据利用的障碍。因此需要将离线存储影像数据一次性恢复到在线状态。

1需求分析

1.1某医院医学影像存储现状

某大型三甲医院于2006年建成包括放射科、超声科、病理科、内镜室、介入室等在内的全院PACS。早期受限于磁盘阵列单位存储空间价格高昂,采用了成本低廉的分级存储方案。“近线”存储是定期将超过在线数据保存时间的影像数据转存到性能较低的磁盘阵列中。“离线”存储使用的是归档备份软件操作磁带库将“近线”存储的影像数据转存到LTO3规格的磁带中。当磁带库中的磁带写满数据后,将存储较旧数据的磁带从磁带库退出,人工放入磁带保管柜中,再加入新磁带。2016年后,由于磁盘阵列单位存储空间价格下降,分级存储策略已改为“在线”和“近线”两级存储方式,以高性能闪存盘阵列存储“在线”数据,以磁盘阵列存储“近线”数据,不再将数据离线存储到磁带中。目前总计有255盘磁带存储“离线”数据,这部分数据的调阅仍然需要采用单个检查影像恢复的作业流程。

1.2需要解决的问题

由于磁带只能顺序读取,而磁带库的驱动器个数又很有限,机械臂更换磁带效率低等原因,“离线”影像数据的访问速度慢、效率低、人工操作繁琐[2]。实际调取1个患者的影像数据需约数分钟至十几分钟的时间。如遇存放数据的磁带存放于保管柜中,还需要人工将磁带放入磁带库中,则花费时间将更长。已完全不能满足医学影像大数据和人工智能等科研对海量影像数据的调阅需求[3]。磁盘阵列相较于磁带库具有读写性能好,数据实时可访问的优势。随着磁盘阵列单位存储空间价格下降,从硬件方面考虑将离线影像数据迁移到低性能的磁盘阵列存储,已具有较高的性价比。

2医学影像与DICOM标准

医学数字成像及通信协议(DigitalImagingandCommunicationsinMedicine,DICOM)是用于医学数字影像存档与通信的国际标准。DICOM文件是指按照DICOM标准而存储的医学影像文件,一般由一个DICOM文件头和一个DICOM数据集合组成。DICOM数据集合由DICOM数据元(dataElement)按照指定的顺序依次排列组成[4]。数据元主要由4个部分组成:TAG号、值、值长度和值域[5]。DICOM数据集合存储了患者信息、检查信息、序列信息、图像信息、设备相关信息、图像像素等内容。见表1。

3系统功能设计

离线医学影像整体恢复系统由磁带拷贝、DICOM转存和路径更新3个模块组成。其网络拓扑如图1所示。磁带库和磁带镜像存储通过光纤与磁带拷贝服务器连接,近线存储通过光纤连接到DICOM转存服务器,分别形成两个SAN存储网络。磁带拷贝服务器、DICOM转存服务器和中间数据库通过千兆以太网连接到PACS局域网中。DICOM转存服务器使用NFS协议与磁带拷贝服务器通讯,以访问磁带镜像存储中的数据。

3.1磁带拷贝

包括磁带调度、磁带读取和文件保存3个功能。磁带的调度和读取需要通过磁带库完成。磁带库由多个驱动器(Driver)、多个槽(Slot)、机械手臂(Robot)组成,并可由机械手臂抓取磁带在驱动器和槽之间调度,从而自动实现磁带的拆卸和装填。为节约成本,以原有的磁带库作为磁带读取设备,该磁带库结构见图2。离线影像数据存在于255盘磁带介质中,而使用的磁带库仅有1个驱动器和38个槽,可一次放入38盘磁带,通过脚本控制磁带库机械臂实现磁带由槽到驱动器的自动装载和由驱动器到槽的自动拆卸。Linux操作系统对磁带库支持很好,且有许多控制命令,可以控制机械臂和驱动器完成磁带调度和数据读取作业,因此磁带拷贝模块以Linuxshell编码实现。使用Linux操作系统中的dd命令可将磁带数据拷贝至磁带镜像存储。dd是Linux/UNIX下的一个命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。例如:ddif=/dev/nst0of=/data/VOL446/vol446_1.datibs=1024k语句表示从磁带驱动器st0中以1024k大小的块,拷贝一个文件到data/VOL446/vol446_1.dat文件。nst0前的n表示读取数据后不回卷磁带,不带n表示读取数据后回卷磁带到开始位置。循环使用dd命令顺序读取磁带上的所有文件,并将文件保存到磁盘中,当保存的文件大小为0,也就是读取的字节数为0时,表示整盘磁带数据已拷贝完成,退出操作。

3.2文件转存

通过解析整理DICOM文件、检查和序列描述文件,将其存储在最终的磁盘阵列中,并将每个序列的DICOM文件存储路径写入中间数据库,完成DICOM转存。为充分发挥磁盘阵列I/O吞吐率,减少时间花费,DICOM转存模块采用多线程作业方式。要完成DICOM文件转存,最重要的是要清楚了解离线备份文件结构。见图3。使用二进制查看器对磁带镜像存储中的文件进行格式分析。将一次归档备份操作写入磁带的数据称为一个备份集,则每盘磁带约有3000多个备份集。每个备份集中有3个文件,分别为备份集开始标记文件、以Tar格式打包的数据文件(Tar文件)和备份集结束标记文件。备份集开始标记文件中记录Tar文件包中的文件名。第一个备份集开始标记文件在文件最前面包含磁带开始标记,记录归档备份软件名称、版本号和磁带的编号。Tar文件中包括若干对文件,每对文件分别有一个扩展名为.xml和.dat的文件,两个文件的文件主名相同。扩展名为.xml文件记录备份时的信息,扩展名为.dat的文件(以下简称“dat文件”)分别为DICOM格式的影像文件(以下简称“DICOM文件”)、文本格式的检查描述文件(以下简称“Study文件”)和文本格式的序列描述文件(以下简称“Serie文件”)。Study文件和Serie文件中分别含有“stu”“ser”关键字。文件转存就是将DICOM文件、Study文件和Serie文件按照PACS系统路径规则保存到近线存储中。3.3路径更新为能使用原有PACS系统客户端调阅影像,需要将转存后的DICOM文件路径更新到原PACS系统数据库中。即将中间数据库中的序列DICOM文件存储路径更新到原PACS数据库中,并更新相应检查影像记录为“近线”状态。

4功能实现

4.1磁带调度

介质切换工具(MediaChangerTools)可以实现磁带的调度。例如mtx-f/dev/sg0load10表示将1号槽位的磁带装入0号驱动器,其中sg0为磁带库机械臂在系统的标识号;mtx-f/dev/sg0unload10表示将0号驱动器的磁带拆卸放回1号槽位。设置两个命令行参数slot_begin和slot_end分别表示磁带连续放置的最小槽编号和最大槽编号,脚本循环调用mtxload和mtxunload实现对slot_begin到slot_end槽磁带的调度。

4.2磁带读取

磁带装载到驱动器后,使用dd命令读取磁带中的数据。磁带中的第一个文件也就是第一个备份集开始标记文件中的磁带开始标记字符串包含磁带编号,为了便于查对在磁盘阵列存储中创建以磁带编号命名的文件目录,用于存放整盘磁带的数据。使用n=`ddif=/dev/st0bs=1024k`语句将第一个备份集的第一个文件也就是磁带开始标记读出赋值给变量n,再使用vol=${n:22:6}将n中的第22个字符开始的6个字符截取赋值给变量vol,即磁带编号。磁带编号以VOL开头,后面接3位数数字,比如VOL446代表第446号磁带。磁带库驱动器标识号使用的是/dev/st0图2磁带库结构而不是/dev/nst0,是因为使用dd命令读取磁带的第一个文件后,需要让驱动器将磁带回卷到开头,以便下一步使用dd命令从头将文件拷贝到以磁带编号命名的目录中。磁带回卷后,循环拷贝每个备份集的文件到磁盘的对应目录。每次使用dd命令拷贝文件后需要判断生成的文件大小是否为0,如是表示已读到磁带数据结尾则退出循环。使用mt-f/dev/st0offline回卷磁带到开始位置,再使用mtxunload将磁盘放回原来槽位置,然后使用mtxload将下一盘磁带加载到驱动器继续拷贝数据。

4.3文件转存

利用.Net平台下SharpZipLib组件解包磁带镜像存储上的Tar文件。使用TarInputStreams=newTarInputStream(System.IO.File.OpenRead(“Tar文件名”))来初始化一个TarInputStream对象,TarEntrytheEntry=s.GetNextEntry()语句顺序获取Tar文件中包含的文件,跳过扩展名为.xml的备份信息文件。使用s.CopyEntryContents(ms)方法可将Tar文件中当前文件的内容拷贝到一个MemoryStream对象中,判断数据文件的类型以便采取不同的处理方法。可根据128字节的文件导言后紧跟4字节的DICM前缀(即特征字符串DICM)判断数据文件是否为DICOM文件,从文件内容是否包含“stu”或“ser”关键字判断Study描述文件和Serie描述文件。对于DICOM文件,使用mDcm开源库DicomFile对象的Open(ms)方法加载到内存中。为了便于检索数量众多的DICOM文件,需要将其分多层级目录存储。设定DICOM文件在目标存储中的存储目录结构从上到下依次为:检查日期的年份加月份、患者ID、检查ID、序列实例号。使用DicomFile对象的Save方法将DICOM文件保存到对应的序列实例号目录下,文件名为图像UID。将Study文件和Serie文件分别拷贝到对应的检查ID目录和序列实例号目录下。患者ID、检查ID、检查日期、序列实例号、图像UID等数据元的值可通过DicomFile对象的Dataset.Get<string>(newDicomTag(“组号”“元素号”))方法获取[6]。同时将检查信息、序列信息存储到中间数据库。

5结论

通过对某医院PACS系统“离线”文件数据格式的仔细分析,进行了科学合理的架构设计,以及关键技术的选用,从而构建了医学影像离线备份数据批量恢复系统,实现了离线影像数据自动化、高效率的还原。在半个月内完成约100TB“离线”影像数据还原到“近线”状态。满足了病历追踪、影像对比、医学影像AI等数据访问需求。该系统不依赖于原归档数据库,通过获取DICOM文件特定数据元信息生成DICOM文件存储目录,具有广泛的借鉴意义。

参考文献

[1]蔡雨蒙,冷锴,单红伟,等.大型医院影像分级存储架构下归档的策略及应用[J].中国数字医学,2017,12(1):48-51.

[2]刘贺.PACS存储归档备份管理系统的设计与实现[D].沈阳:东北大学,2013:32-33.

[3]余绍德.卷积神经网络和迁移学习在癌症影像分析中的研究[D].深圳:中国科学院深圳先进技术研究院,2018:1-2.

[4]丁磊.基于DICOM标准的医学文件研究与处理[D].成都:电子科技大学,2019:12-14.

[5]龙华飞,唐月华,陈泓伶.PACS系统中医学图像格式解析[J].中国数字医学,2014,9(3):29-31.

[6]纪永章,杨辉,薛淞.dcm4che在医疗大数据平台中的应用[J].中国数字医学,2016,11(10):15-17.

作者:米文军 徐川