2. 西南交通大学附属医院 (成都市第三人民医院) 神经内科, 成都 610031
2. Department of Neurology, the Affiliated Hospital of Southwest Jiaotong University (the Third People’s Hospital of Chengdu), Chengdu 610031, China
目前, 中国是世界上老年人口最多, 增长最快的国家. 随着年龄的增加, 老年人身体各项功能也随之发生不同程度的衰减, 其中表现最为明显的是认知功能[1]. 因此, 设计老年认知障碍多维度评估系统对老年认知障碍进行分级评估有助于医生提前发现老年人出现认知障碍病症并及时就医. 认知障碍分级评估, 即在专业、权威的老年认知障碍诊疗经验的指导下, 利用信息技术对老年群体的精神影像数据、神经电生理数据、量表数据等多元多模态数据进行处理和分析, 进而实现初步筛查和老年认知障碍的智能化评估和分级. 随着老年认知障碍多维度数据管理系统的深入使用, 会导致图片数据、语音数据等非结构化数据的增加. 如果通过数据库存储这些非结构化数据会给该系统造成许多不利的影响, 不仅使系统的响应速度下降, 还使得数据的恢复和备份变得非常困难. 一旦保存数据的服务器发生故障, 整个系统将会崩溃无法操作, 在短时间内, 系统很难恢复正常.
老年认知障碍多维度数据管理系统的业务范围包含了录入数据、查询数据、修改数据、电子病历的excel表格的导出、病人情况初步判断等, 该系统针对这些业务实现了非结构化数据录入、文件存储等功能, 这些功能大大提高了医生的工作效率, 降低了人工整理病历和录入病历的劳动成本.
为了确保老年认知障碍多维度数据管理系统的高效稳定运行, 同时实现异地数据录入和系统数据备份, 可以使用计算机集群对系统数据进行异地存储. 本文将系统架构和业务架构相结合, 对系统的存储方式进行了重构, 提出使用FastDFS对系统中的非结构化数据分类存储和管理, 这样能够更高效地实现系统录入数据异地存储, 同时也可以保障数据的完整性和安全性.
1 系统需求分析与总体设计 1.1 需求分析随着大数据时代的到来, 患者图表数据和图片数据日益增加, 尤其是医生们需要留底的表单图片和患者的语音等非结构化数据, 通过一台主机去存储这些数据, 必定会导致用户访问数据库数据效率低, 数据的安全性和稳定性也无法得到保证, 想要去备份数据库里的数据也会十分困难. 为了解决医院医生查询和输入医疗数据效率低的问题, 本文设计了一个能便于存储医疗数据、查询医疗数据和快速筛查患者情况的老年认知障碍多维度数据管理系统.
在专业、权威的老年认知障碍诊疗经验的专家指导下, 可以将老年认知障碍多维度数据管理系统的功能分为初步筛查1 (图1)、初步筛查2 (图2)和总体筛查(图3), 根据每个筛查步骤去做相应的检查, 这样可以精准地去帮助医生解决问题, 提高诊断效率. 此外, 系统还包含录入认知障碍患者表格数据、图片数据、语音数据等各种非结构化数据的功能, 并能将医疗数据分类管理.
1.2 总体设计
老年认知障碍多维度数据管理系统是基于B/S结构开发的, 其业务流程基于医院医生所提供的筛查流程来设计, 并且通过MyBatis-plus框架调用SQL语句操作MySQL数据库实现数据调用.
系统的结构(如图4)可分为表示层(UI层)、业务服务层、系统基础架构层以及数据存储层. 首先我们通过表示层对用户进行登录认证, 认证成功之后查询出登录者的身份并确定操作权限. 业务层包含的功能有用户信息交互、用户操作、安全日志等. 该系统使用的基础框架为SpringBoot框架、SpringSecurity安全框架、MyBatis-plus框架以及Vue框架.
这个系统主要分为两大部分, 一个是FastDFS分布式模块, 另一个是多维度精准诊断模块. 多维度精准诊断模块提供一个数据存储的输入界面, 通过这个界面获取诊断数据, 最后将这些数据存储在分布式模块中.
2 FastDFS分布式模块 2.1 FastDFS文件存储目前比较实用的分布式文件系统主要包含: NFS (网络文件系统)、GFS、HDFS (Hadoop分布式文件系统)以及FastDFS. NFS是一种客户服务器模式, 在客户端上映射NFS服务器的驱动器, 一旦发生单点故障, 所有客户都不能访问共享目录, 并且在大量数据高并发的场合系统的效率会很低[2], 因此该系统的分布式模块不适合用NFS. GFS会将存入的文件分成块, 存储到块服务器上, GFS容易造成保密数据的泄露, 不利于医疗数据的安全, 因此也不适合该系统. HDFS采用主从结构, HDFS集群由一个名称结点和若干数据节点组成. HDFS是为了处理流式访问大文件提出的[3], 该文件系统在上传和下载小文件的时候, 效率很低, 并且一个文件只能有一个写, 不允许多个线程同时写, 仅支持数据追加, 不支持文件的随机修改, 这很明显会降低数据上传的效率. NFS、GFS都是通用的分布式文件系统, 这些文件系统的优点是开发体验好, 但是系统复杂性高、性能一般, 考虑数据领域已经有Spark, Redis, MongoDB等分布式存储格式, Spark主要用于基于大数据的SQL查询、流式计算, 图计算, 机器学习的场景; Redis属于内存型数据库用来存储图片不划算. MongoDB不支持事务操作, 且集群分片数据分布不均匀, 会导致内存浪费. 而FastDFS分布式文件系统虽然开发体验性差, 但是系统复杂性低而且性能高. 由于医学图片、医学图表等数据被大量访问, 所以使用FastDFS是非常合适的, 能够满足多用户访问与存储, 时序图如图5所示. FastDFS的通信速度很快, 并且对存储的文件进行加密处理, 能够满足整个系统的基本需求[4].
2.2 服务接口设计FastDFS分布式系统是基于B/S架构设计的, 用户在浏览器中通过操作按钮上传、浏览图片. 该系统后端采用SpringBoot框架, 前端采用Vue框架, 从而实现系统的前后端分离. 前后端交互接口按照Swagger框架提供的API服务进行规划, 从而实现协同设计, 降低系统的耦合性, 便于多功能开发. 系统的部分接口如表1所示.
2.3 FastDFS目录索引设计本文通过建立目录数据库实现文件索引功能, 通过拼接数据库字段的方式得到图片所在文件夹的路径. 找到该文件夹之后还需将文件名称和文件后缀名进行拼接, 找到该文件, 最后对该文件进行操作. 数据库表格字段如表2所示.
各字段的含义为: group_name表示文件所存储group分组的名称; remote_name表示文件所存储的服务器的文件地址; origin_name表示文件存储时暂存在本地的文件原始名称; file_size表示所存储的文件的大小; file_suffix表示文件的后缀名; type表示文件的类型: 01图片文件、02表格文件、03 语音文件; modifiy_time表示修改文件的时间, version表示文件的历史版本fid; sort表示文件维度类别. 为了方便对患者资料的管理, 先将所有患者资料放在统一目录下, 再在每个患者目录下对每个病历按维度做出分类, 最后以患者的唯一病历号作为标识符, 实现每个患者的目录划分.
3 多维度精准诊断模块 3.1 前端设计
前端页面设计使用Vue框架, Element-UI技术实现页面布局, 开发模式采用MVVM, 这种架构如图6所示. MVVM前端开发模式是前后端分离框架发展史上一次思想变革完全体, 其优势主要是降低系统耦合性、独立开发分工合作、可重用和测试4方面特性, 因此现在这种开发框架越来越受到开发者的追捧[5].
由图6, 我们可以看到MVVM框架主要分为3个部分, 首先是View页面视图层, 这个部分也称为用户页面, 主要是由HTML和CSS来构建, 完成与用户的交互; 其次是Model层, 后端通过Model层对接口传过来的数据进行业务上的逻辑处理和数据操控, 对于前端来说就是后端提供的API接口; 最后是ViewModel视图数据模型和逻辑展现层, 在MVVM框架中View和Model两层之间并没有直接关系, 而是将视图数据模型和逻辑展现层作为一个中转站, 对Model层的数据进行处理, 使得数据便于前端使用.
3.2 后端设计
后端的主要任务是处理前端传送的数据, 程序设计基于SpringBoot框架, 采用了Spring的3层架构(数据持久层、业务逻辑层、控制层)的形式, 3层架构如图7所示.
在控制层中先使用SpringSecurity框架对用户进行信息认证, 用户得到访问权限之后通过Controller类对前端接口进行访问, 将从前端获取到的数据进行解封装, 映射到实体类中. Swagger提供前后端接口文档服务, 便于前后端协同开发提高效率, 接口文档如图8所示. SpringBoot则提供了功能强大的IOC和AOP. 业务逻辑层则是将得到的数据进行逻辑处理, 得到业务中所需要的结果. 数据持久层则是通过Mapper接口将处理好的数据映射到数据库中.
在整个框架结构中, 基础的框架是SpringBoot框架, 它提供了AOP (面向切面编程)和IOC (控制反转), 这使得我们程序之间的耦合性大大降低, 便于后续的二次开发, 而且该框架可以集成其他优秀的组件和框架, 如控制层的Swagger组件等.
4 筛查功能逻辑设计 4.1 数据库字段设计在整个业务流程中, 初步筛查1、初步筛查2以及全面筛查是核心部分, 考虑到一些表格存在一些必要的联系, 因此不仅仅要对表格的基础字段做出定义, 还需要定义表格之间对应的中间字段、中间表格. 初步筛查1所需的AD8记忆障碍自评表由华盛顿大学编制, 是一个筛查认知障碍的简便工具[5], 该表如图9所示.
对AD8表格的结构和关联性进行研究, 最终提取出表格中的有用信息, 将这个有用信息整理后在数据库中设计出该表格[6], 该表格的字段如表3所示, 分别对表格的基本信息进行标记, 如表格中的科室、床号、姓名、性别等. 表格中ad8_id是一个创新字段, 主要用于和外部表格进行联系.
4.2 筛选功能逻辑设计在设计每一个表的时候, 都需要在表的字段中加入一个表格专属的编号字段, 这样做的好处就是可以用一条SQL语句将同一个患者的两个表的数据查出来. 关联查询只需要一条SQL语句, 这样做的好处就是极大地减少了系统和数据库之间的交互, 提高了性能, 并且可将查询出来的数据保存在本地缓存当中, 可以满足前端随时提取数据的要求. 使用该方法查询出来阳性患者的障碍自评表总分和画钟检测总分如图10所示.
每次用户使用筛查功能, 系统都需要去访问一遍数据库, 这样会产生很多重复性操作. 为了解决这个问题, 可将系统数据放入到系统缓存中, 这样每次用户使用筛查功能, 系统可以直接调用缓存中的数据, 提高系统工作效率. 根据筛查流程, 本文采用树型结构来结构化缓存中的数据. 将筛查流程的每一个阶段放入Map集合中, 其中Map集合的key存放遍历到第几层, value存放筛查结果数据.
遍历树形结构一般采用两种方法. 一种是广度优先遍历, 另一种深度优先遍历. 广度优先遍历应用场景为层序遍历, 而深度优先遍历应用场景包含前序遍历、后续遍历和中序遍历. 由于整个筛查流程的结构与广度优先遍历的结果十分契合所以采用这种方法, 再者由于筛查流程的层数比较少, 因此这种方法能够满足查询需求且比较合适.
5 系统性能测试 5.1 测试环境本系统的测试环境分为PC服务器端和数据库服务器端, PC服务器端的设备参数为CPU: Intel; (R) Core; (TM) i5-3470 CPU @ 3.20 GHz ; RAM 10.0 GB; 操作系统为Windows 10 64位, 数据库服务器的设备参数为CPU型号为Intel; (R) Core; (TM) i7.8700 CPU@ 3.20 GHz; RAM 32 GB.
5.2 性能测试系统正式使用之前需要进行系统测试, 其成功与否直接代表着该系统是否能够胜任工作, 是否能够让用户正常使用[7]. 测试工具选用的是Jmeter, Apache Jmeter应用程序是一款用于加载测试功能行为和测量性能的工具, 为测试Web应用程序而设计的纯Java开源软件[8]. Jmeter可以通过聚合报告很直观地看到系统的性能指标. 聚合报告的性能指标包含了样本数、运行平均时间、最小运行时间、最大运行时间、异常占比, 吞吐量等. 测试系统最常见的指标有: 请求响应时间、系统用户并发数、错误率、平均传输带宽、资源利用率等. 该系统测量指标根据用户并发数和响应时间 (如图11所示). 其中红线 (图最高线) 代表最大响应时间, 蓝线 (图中间线) 代表平均响应时间, 绿线 (图最低线) 代表最小响应时间. 从图中我们可以观察到并发人数从0增加到2000, 每次增加200用户数, 系统的响应时间随着用户数并发量的增加而呈递增趋势, 但是用户量到达2000人之后, 响应时间不超过2.1 s.
用户的并发数均值和峰值可以通过式(1)、式(2)求出:
$ \overline{N}=\frac{{N}_{L}\cdot{\overline{T}}_{c}}{{T}_{i}} $ | (1) |
$ {N_{\max }} = \overline N + 3\sqrt {\overline N} $ | (2) |
其中,
假设每天最多有2000个用户访问系统, 操作时间为12 h, 系统是24 h开放的, 可以计算得到用户的并发数均值和峰值分别为1000和1095. 测试并发数为2000的时候, 响应时间是小于2 s的, 因此该系统完全可以达到系统的实际性能需求.
5.3 数据库压力测试数据库压力测试是检验系统可用性的重要标准. 对数据库进行增加、修改、查询是老年认知障碍多维度评估系统的主要功能, 因此采用大量使用SQL语言操作数据库的方式对数据库进行压力测试, 测试结果如图12所示. 在10 s内对数据库进行了35532次操作数据库的异常为0%, 吞吐量886.1/sec, 基本满足系统的需求.
5.4 浏览器兼容性测试
为了确保更好的用户体验, 需要考虑各个浏览器静态资源的差异性, 使用现在3种主流浏览器(Microsoft Edge浏览器、Chrome谷歌浏览器、Firefox火狐浏览器)进行测试, 如图13–图15所示, 浏览器测试表明, 不同类型的浏览器对于系统页面的渲染大致相同, 布局上没有明显差异, 基本可以满足不同浏览器, 使用系统体验相同的效果.
经过运行与测试, 该网站能成功运行完成相关功能. 其首页部分展示如图16所示; AD8填表首页如图17所示; 经过测试图片的上传和填写功能均能正常使用, 其上传、下载和删除的速度却决于当前网络环境, 数据填写功能, 如图18所示.
6 结论与展望
本文使用FastDFS分布式文件系统、Web服务器设计开发了老年认知障碍多维度数据管理系统, 给出了整个系统的总体框架、技术选型、版本选择等设计方案. 该系统采用的系统架构为B/S架构, B/S架构的耦合性很低, 系统的升级和二次开发的开销很小, 并且系统维护起来也比较容易. 将系统部署后测试运行, 实现了系统的初步筛查1流程、初步筛查2流程、全面筛查流程、表格数据管理、文件数据上传. 将系统进行了测试, 系统的并发性满足用户的需求. 该系统功能完善, 操作简单快捷, 交互性强、轻量级对医生分析病历, 帮助患者高效诊疗提供了很大的帮助.
[1] |
Ringman JM, Medina LD, Rodriguez-Agudelo Y, et al. Current concepts of mild cognitive impairment and their applicability to persons at-risk for familial Alzheimers disease. Current Alzheimer Research, 2009, 6(4): 341-346. DOI:10.2174/156720509788929336 |
[2] |
孟冰. 基于Hadoop的小文件存储方法的研究与实现[硕士学位论文]. 上海: 华东理工大学, 2017.
|
[3] |
郭建国. 基于分布式文件系统FastDFS的图片服务器件设计与应用[硕士学位论文]. 北京: 中国科学院大学(工程管理与信息技术学院), 2015.
|
[4] |
Cai YH. Smart medical big data platform based on distributed file system. Basic & Clinical Pharmacology & Toxicology, 2020, 127(S1): 111. |
[5] |
马蔚蔚, 张晓玲. 阿尔茨海默病社区筛查和诊断的研究进展. 中国全科医学, 2021, 24(6): 643-651. DOI:10.12114/j.issn.1007-9572.2020.00.512 |
[6] |
张俊, 廖雪花, 余旭玲, 等. 关系型数据库内存化存储模型研究. 计算机工程与应用, 2021, 57(19): 123-128. DOI:10.3778/j.issn.1002-8331.2009-0508 |
[7] |
罗旭. 宜宾一医院人事管理系统的设计与实现[硕士学位论文]. 成都: 电子科技大学, 2020.
|
[8] |
李庆宇, 王松波, 林伟伟. 面向时序大数据的数据库性能研究. 广州大学学报(自然科学版), 2021, 20(3): 69-79. |