APP下载

基于区块链的中医电子病历高效查询方法研究

2022-01-07柴凯杰丁有伟胡孔法

软件导刊 2021年12期
关键词:分片数据量病历

柴凯杰,丁有伟,胡孔法

(南京中医药大学人工智能与信息技术学院,江苏南京 210046)

0 引言

中医电子病历在医院中发挥着重要作用。随着大数据时代的到来,中医电子病历数据蕴含着巨大价值,具有重要的研究意义。当前中医电子病历查询主要是通过各种电子病历系统实现的,但系统会受到各种攻击,以及系统本身存在一些漏洞等因素,可能导致用户隐私泄露,并且系统查询结构比较单一,查询速度仍有待提高。因此,寻找一种可同时兼顾查询性能与用户隐私安全的中医电子病历查询方法是中医药信息化发展过程中亟待解决的关键问题之一。

由于中医电子病历数据具有数据量大、数据类型复杂等特性,在共享与存储方面需要提出新的架构[1]。肖勇等[2]对中医药防控救治信息化工作进行研究,并指出其中存在的信息共享不足等问题。区块链技术可以很好地解决以上问题。区块链是一种新兴的数据安全技术,具有匿名性、去中心化、防篡改等特性,且目前发展日趋成熟。很多学者对其进行了大量研究,如邵奇峰等[3]详细介绍区块链体系架构,并从区块链数据、共识机制、智能合约、可扩展性、安全性几方面阐述了区块链原理与技术;蔡晓晴等[4]提取出区块链的5 层核心架构,并就其中数据、网络、共识3层基础架构进行详细说明;潘晨等[5]对区块链的性能缺陷进行总结,并介绍了可提升区块链性能及容量的相关技术;Hung 等[6]通过分片技术提高了区块链数据交易性能;刘懿中等[7]从共识机制方面对区块链进行了详细研究;方维维等[8]对PBFT 共识算法进行优化,提高了区块链的可扩展性。

区块链技术在中医药领域的应用主要集中在中医电子病历方面。汤颖[9]分析了区块链技术在电子病历中的应用;肖勇等[10]指出中医信息化建设中存在的问题,并提出建设性意见。在安全性方面,牛淑芬等[11]提出基于聚合密钥的密文检索方案,提高了中医电子病历的安全性;侯姝言等[12]将可追踪性安全机制应用于药品防伪溯源,同时将区块链隐私保护应用于电子健康病历;张剑等[13]通过基于区块链的电子病历存储系统提高了电子病历数据的安全性。在查询性能方面,徐知海等[14]提出基于蚁群算法的区域电子病历查询方法;肖丽等[15]提出基于区块链技术的中医电子病历系统架构;郭坤等[16]为保证数据的高效访问,创建排序索引以提高检索性能;李莉等[17]通过分片技术提高了区块链的可扩展性。以上文献虽然分开考虑了中医电子病历的安全性与查询性能,但是未能将两者同时兼顾。

针对中医电子病历无法兼顾安全性与查询性能的问题,本文结合区块链分片技术[18-22],提出一个基于地理位置划分的区块链分片方案,利用区块链的去中心化、不可篡改等机制保证了中医电子病历查询的安全性;采用分片技术将全国医院按等级分片,对每个分片内节点上存储的数据增加索引,从而兼顾了中医药数据的安全性与查询性能。实验结果表明,通过对1 200 条数据进行查询并且对比了区块链分片与不分片的情况,发现分片查询效果明显优于不分片查询,同时增加索引查询效果显著优于未添加索引查询。本文的创新点如下:

(1)提出基于地理位置划分的区块链分片方案,并且按照医院级别设置全节点和轻节点,在缓解存储交易压力的同时,可提高中医药数据查询性能。

(2)通过区块链的节点分片策略及索引技术,提高了区块链查询性能,实现了对中医药数据定值查询与范围查询的快速响应。

1 模型

1.1 数据模型

中医病历历史悠久,经历了漫长的发展过程并发展为如今的中医电子病历。中医电子病历的主要记录包括:编号、标准化临床表现、标准化病机、膏方、剂量等。中医电子病历记录的数据具有较高的潜在研究价值。区块链电子病历结构表示例如表1 所示。

Table 1 Blockchain electronic medical record structure example表1 区块链电子病历结构表示例

区块链是一种去中心化、不可篡改、可追溯、可信的分布式数据库。区块链是由区块相互连接形成的一种链式存储结构,由区块头和区块体组成。区块头存储区块的头信息,包含上一个区块的哈希值、随机数、时间戳、难度值等;区块体包含其交易信息,交易信息存储在由Merkle 树根组成的叶子节点中。中医电子病历区块链结构如图1 所示。

Fig.1 Blockchain structure of traditional Chinese medicine electronic medical records图1 中医电子病历区块链结构

表1 中每一条电子病历记录作为区块链中的一个交易,两两进行哈希运算,将若干条交易打包形成一个区块。区块内各交易以Merkle 树的形式进行组织,区块形成后插入到现有区块链中。

1.2 网络模型

医院网络主要由电子计算机与通信设备组成,为医院所属各部门提供用户诊断信息的存储、管理、收集、查询与数据交换等服务。但这种中心化的网络方式会造成数据隐私泄露及其他安全问题,且日益增长的数据会带来存储压力,同时内外网分离会造成数据信息孤岛问题,不利于用户信息共享。医院网络如图2 所示。

Fig.2 Hospital network图2 医院网络

使用区块链可很好地解决以上问题,区块链是一种去中心化的网络,在区块链网络体系中不存在中心化的服务器,每一个节点都是对等的,不存在客户端与服务器的区分。一方面,区块链具有的不可篡改、加密等特性可保证数据安全;另一方面,可把每个医院当作一个节点,节点之间相互对等,从而去除了医院对中心化服务器的依赖,并且少数节点被攻击崩溃并不会影响整个区块链网络的正常运行。同时,节点之间相互通信,可很好地解决数据信息孤岛问题。

本文将全国医院都当作节点,各个节点之间相互通信,构成区块链网络。为减轻存储压力、提高查询性能,对节点进行分片。根据省份地区及医院等级进行分片,将区块链分片与地理位置相关联,从而使区块链中医电子病历的理论模型映射到现实生活中。若各个分片内包含节点数量过多,可再次按市、县(镇)进行分片,从而构建基于地理位置的区块链分片网络。区块链分片如图3 所示。

Fig.3 Blockchain sharding图3 区块链分片

为充分利用各医院的存储与计算资源,提高中医电子病历查询性能,具体分片规则如下:①将中医药数据依次按照省进行分片划分;②各个省市的三甲医院为全节点,主要负责同步全国所有分片内的交易,其他医院为轻节点,负责处理各自医院的交易。该方法的优点是可以同步所有数据交易,同时减轻存储压力。

通过将医院网络映射到区块链网络,最后构建基于地理位置的区块链分片网络,一方面可缓解存储压力,另一方面可在每个分片内独立并行地处理交易。若需跨分片交易,则进行同步或异步跨分片交易。通过分片提高了交易处理性能,并通过各个节点之间的相互通信解决了孤岛问题。该方法同时兼顾了安全性与查询性能,提高了区块链的可扩展性。

2 查询方法

2.1 数据存储

目前,电子病历存储方式十分多样化,包括分科室、分阶段、分内容存储,以及基于XML 的电子病历存储等,但是这些存储方式都过于中心化。

在实际应用中,中医医院一般包括中医诊所、社区医院、县级医院、市级医院和省级医院等,医院所在地之间有明确的行政隶属关系,每个医院的规模、产生的数据量、数据存储及处理能力各不相同。将中医电子病历存储在区块链上可保证其安全性,但其查询过程需要所有医院之间进行共识,共识过程复杂且远距离的数据通信延迟较大,导致查询性能低下。因此,在保证安全性的同时,可通过分片及增加索引的方式提高区块链数据查询性能。

数据存储采用CouchDB 数据库进行键值对存储,在每个分片内,节点存储的数据相同,并且所有数据根据分片数量平均进行存储。利用CouchDB 数据库的优势,可对中医电子病历数据进行更复杂的查询。通过私有数据对中医药数据进行存储,可保护用户的隐私安全,并且对数据进行分类及增加索引。对数据进行分类可使中医药数据的管理更加动态化、合理化及规律化;通过索引可大大提高查询速度,从而保证了数据的安全性和查询性能。

2.2 数据查询

本实验查询主要分为定值查询与范围查询。

(1)定值查询:查询存储的某一条数据。例如:查询姓名为张三(或编号为HS001)的全部电子病历记录描述。

(2)范围查询:查询存储数据索引参数某一范围内的数据。例如:查询编号为HS001~HS100(或住院日期为1~5 天内)患者的全部电子病历记录描述。

使用CouchDB 数据库、增加索引的优势在于当存储大量数据时,不必按顺序遍历每一条数据进行一一对比,并且减少了磁盘的I/O 操作,可很快定位到数据所在位置。其高效查询的具体设计与实现流程如下:①以raft 方式启动网络;②启用CouchDB 数据库;③对中医药数据创建索引;④安装实例化链码;⑤选择查询条件;⑥根据查询条件选择对应链码进行查询;⑦对查询结果进行验证,多次查询并在最后进行对比的目的是为了防止恶意节点进行破坏。具体查询流程如图4 所示。

Fig.4 Query flow图4 查询流程

2.3 安全性分析

随着可信时代的到来,人们越来越重视个人的隐私安全。本文主要通过以下4 方面保证人们的隐私安全:

(1)利 用Hyperledger Fabric平台存储数据,Hyperledger Fabric 平台具有特有的许可、加密处理等机制。

(2)通过建立通道保证数据的隐私性,各分片内的各个节点都可相互建立通道。只有通道内的节点可以查看该部分数据,而其他加入通道内的节点无法查看。

(3)采用私有数据,在保证安全性的同时,可减少建立通道时的管理开销,一定程度上提高了可扩展性。

(4)Fabric1.4 版本的raft 协议具有“崩溃容错”的特性,在安全性方面具有一定保障。

通过以上4 个方面,利用区块链本身较强的安全性以及平台的独特优势,可实现中医药数据的安全保障及隐私保护等。同时利用区块链去中心化的特性以及平台“崩溃容错”等特性,使基于区块链的中医电子病历相比普通中心化的中医电子病历具有不可比拟的优势。

3 实验及分析

3.1 实验环境

实验环境为VMware® Workstation 14 Pro,Hyperledger Fabric1.4 版本,ubuntu 虚拟机内存为2GB。在此虚拟机上搭建Fabric1.4,以raft 方式启动网络,选择CouchDB 数据库,在不分片单solo 模式下以及两个分片以raft 方式启动网络多个order 的情况下,比较传输交易时间及不同数据量的查询时间,存储数据使用私有数据的方式以保证安全性,同时添加了索引功能以实现范围查询,可大大提高查询速度。

Hyperledger Fabric 是一个开源的企业级许可分布式账本平台,具有高度模块化与可配置的架构,支持可插拔共识协议及多种通用编程语言等,并通过MSP(成员服务提供商)、PKI(公钥基础设施)、数字证书等保证安全性与隐私性。

3.2 实验结果分析

本实验在目前比较流行的Hyperledger Fabric 平台上进行部署,设置了10 个节点,其中有4 个全节点、6 个轻节点。首先,以raft 方式启动网络,该方式的优点是可以在每个分片内分配一个order 节点,从而加快每个分片内的交易处理性能,提高了可扩展性。通过Org1 和Org2 两个组织模拟分片,在每个组织内分配两个节点,并通过安装调用实例化链码实现对中医药数据的查询。

为测试本文算法的性能,在具有1 200 条真实数据的电子病历数据集上对区块链各方面查询性能进行比较。不分片是在单solo 模式下进行的,而分片是以raft 模式启动网络,可在每个分片内分配一个order,从而大大提高分片对交易的处理性能。

如图5 所示,按数据量等值递增设置6 组实验,分别测试在分片和不分片情况下不同数据交易量的查询时间对比。实验结果表明,在相同数据量下,分片的查询速度明显优于不分片的查询速度,这是分片的必然结果。同时随着数据量的增大,分片查询交易时间的增长速率明显慢于不分片的情况,这是由于在大量数据下,每个分片独立并行进行查询,因此体现出分片的查询优势。

Fig.5 Comparison of query time for different transaction volumes图5 不同数据交易量查询时间对比

如图6 所示,按数据量等值递增设置6 组实验,分别测试在分片和不分片情况下不同数据交易量的传输交易时间对比。实验结果表明,在相同数据量下,分片传输交易速度大于不分片的情况,并且随着数据量的增大,分片传输交易时间的增长速率慢于不分片的情况,这是分片带来的必然结果。

Fig.6 Comparison of different data transaction volume transmission time图6 不同数据交易量传输时间对比

如图7 所示,设置6 组实验,在对中医药数据增加索引后,分片测试不同数据量下范围查询与无索引查询时间对比。实验结果表明,在相同数据量下,增加索引可很快地提高查询速度,并且随着数据量的增大,增加索引的时间波动不大且趋于稳定,而无索引查询时间则与数据量的增加成正比,可显著体现增加索引带来的优势。

Fig.7 Time comparison between range query and non-indexed query图7 范围查询与无索引查询时间对比

不同数据交易量传输时间对比如图8 所示,数据量1的存储量是数据量2 的30 倍。实验结果表明,不同存储量的交易不会影响其查询速度,总体来说查询时间趋于稳定,波动不大。

Fig.8 Comparison of query time for different data transaction volumes图8 不同数据交易量传输时间对比

4 结语

本文对基于区块链的中医电子病历高效查询方法进行研究,通过分片及增加索引提高了查询性能,使得中医药数据管理更加规范化与动态化。但是本文方法在跨分片交易方面还存在不足,这将是下一步研究的重点。区块链“不可能三角”一直是需要攻克的难点,相信在不久的将来,区块链的应用将会越来越普遍。

猜你喜欢

分片数据量病历
上下分片與詞的時空佈局
强迫症病历簿
基于大数据量的初至层析成像算法优化
计算Lyapunov指数的模糊C均值聚类小数据量法
分片光滑边值问题的再生核方法
“大数的认识”的诊断病历
CDN存量MP4视频播放优化方法
高刷新率不容易显示器需求与接口标准带宽
宽带信号采集与大数据量传输系统设计与研究
基于模糊二分查找的帧分片算法设计与实现