一种面向医疗区块链数据的可验证搜索方法

文档序号:29495175发布日期:2022-04-06 14:58阅读:145来源:国知局
一种面向医疗区块链数据的可验证搜索方法

1.本发明属于信息技术领域,涉及一种面向医疗区块链数据的可验证搜索方法。


背景技术:

2.电子病历方便了医疗机构处理和记录医疗数据。最初,医疗机构由于本地服务器具有方便管理、高效安全的优点,将其存储在各自的服务器,但这造成了数据碎片化,不利于数据共享。云服务器作为一个可靠的存储中心,它既有利于节省本地存储成本,又有利于数据共享。但是以服务器为中心的云服务会不可避免的造成单点故障,因此医疗数据的正确性和可靠性无法得到保证。
3.自中本聪发明数字加密货币比特币以来,其底层区块链技术由于其分布式、防篡改、透明性以及溯源性等特点,开始进入大众视野,它在双方不可信的情况下提供了一种可信的环境。区块链已经在多个领域应用,例如能源、金融服务、供应链以及医疗。在医疗领域,利用区块链技术的这些特性很好的解决了传统的和基于云的电子医疗数据系统存在的缺点。在医疗区块链系统中,将患者医疗数据存储到区块链之后,多数工作采用访问控制策略以及加密等技术提供系统的安全性和隐私保护。那么在此基础上,有必要考虑用户如何按照自己的意愿任意搜索特定类型的医疗数据。
4.在区块链系统中,由于区块链的数据记录方式是线性结构的,使用的是按顺序依次遍历进行搜索的方法,即在搜索时需要遍历一条完整的区块链。然而,随着链的逐渐增长,每次搜索消耗的时间就会越来越长。有时,在搜索整条链之后,甚至没有符合要求的数据。以ethereum为例,由于医疗数据是通过智能合约调用相关的函数上传到区块链中的一些额外数据,这些额外数据以十六进制的形式存在交易中的“input”字段中。在搜索特定类型的医疗数据的时候,一方面,需要先按顺序依次搜索区块,然后再搜索区块里面的交易内容,最后对交易中的“input”字段进行解码才能查看相关的医疗数据,并判断是否符合自己搜索的类型,这导致了搜索效率的低下。另一方面,目前的区块链系统中,大多数都支持对块、交易以及账户余额等的查询,很少有对区块链中存入的额外数据进行特定类型的搜索。因此,设计一种能够让用户按自己的意愿快速搜索链上医疗数据的搜索机制是一项非常重要的工作。


技术实现要素:

5.有鉴于此,本发明的目的在于提供一种面向医疗区块链数据的可验证搜索方法,能够使用户搜索任意类型的医疗数据并提高医疗区块链数据的搜索效率,同时兼顾数据的正确性和可靠性。
6.为达到上述目的,本发明提供如下技术方案:
7.一种面向医疗区块链数据的可验证搜索方法,具体包括以下步骤:
8.s1:医疗机构负责将患者的电子医疗数据上传到区块链;
9.s2:根据区块链中海量数据的特点选取非关系型数据库mongodb存储,并根据区块
链中存储的医疗数据对mongodb设计相应的数据结构;
10.s3:医疗区块链系统将区块中的医疗数据经过处理后存储到非关系型数据库中;
11.s4:用户向搜索方请求搜索医疗记录,其搜索过程包括客户端缓存,数据库搜索,以及链上搜索;即首先从本地客户端缓存查找有无相关的数据,接着通过智能合约请求医疗区块链系统,进行数据库搜索以及区块链搜索。
12.利用数据库的高效查询以及客户端缓存来提升区块链上医疗数据的搜索速度,并支持从链上搜索未处理区块的医疗数据,从而保证搜到更加全面的医疗数据;
13.s5:为了保证医疗数据的完整性和可靠性,对医疗区块链系统进行数据验证,包括数据库定期验证阶段和搜索结果验证阶段。
14.进一步,步骤s1中,医疗数据上传到区块链的规则是:首先判断数据的敏感性,并对敏感数据进行加密;其次判断数据的大小,对占用空间大或小的数据进行对应处理;最后将处理后的医疗数据作为附加的额外数据通过智能合约上传到区块链,生成一笔不可变的交易记录,医疗数据最终以十六进制的形式存储在交易的input字段中。
15.进一步,步骤s1中,所述对占用空间大或小的数据进行对应处理,具体包括:把占用空间大的数据(如ct图像)存储在医疗机构的本地云中,只将占用空间比较小的数据(如ct图像)的哈希值和存储位置保存在链中;其中,哈希值是由上传到区块链中的医疗数据拼接并进行哈希得到的。
16.进一步,步骤s2具体包括:将区块链中的医疗数据导入数据库之后,为了后期方便验证,将每份医疗数据对应的能够定位区块交易的信息也提取到数据库中。本发明使用一对一内嵌文档模型,一份电子医疗数据只对应一位患者,通过内嵌文档模型将四种信息作为单个文档内嵌在主文档中;添加、删除、修改、查询只需要操作一个集合即可。这样更易于管理,消除了因关联四个集合而带来的影响性能的操作。其中,四种信息包括患者个人信息(patientinfo)、医院的信息(hospitalinfo)、患者病历信息(emrinfo)和区块信息(blockinfo)。
17.进一步,步骤s3具体包括:医疗区块链系统负责对区块链进行监听维护并充当搜索方;同时对区块链每个块中每笔交易包含的医疗数据经过处理后存储到设计好的非关系型数据库中;在此阶段,为了避免某些原因需要暂停工作导致需要从头处理区块的情况,本发明增加了一个持久化处理。
18.进一步,步骤s4中,用户向搜索方请求搜索医疗记录,其搜索请求是以s={[t1,t2],w}的形式存在,其中,[t1,t2]表示要搜索医疗数据生成的时间段,可以为空;w表示要搜索的关键词集;最终,由搜索方返回搜索结果集resultset为:
[0019]
resultset={idk,ti,{patientinfok,hospitalinfok,emrinfok,blockinfok}}
[0020]
其中,ti∈[t1,t2],k∈1,2,

,n表示第k份医疗数据,n表示搜索的医疗数据的数量;idk表示第k份医疗数据的id,patientinfok表示第k份医疗数据中包含的个人信息,hospitalinfok表示第k份医疗数据中患者所住医院的信息,emrinfok表示第k份医疗数据的患者病历信息,blockinfok表示第k份医疗数据所在区块信息。
[0021]
用户通过智能合约输入搜索请求s并请求搜索方,搜索过程分三种情形:
[0022]
客户端缓存:用户每次搜索都会优先查找本地缓存有无要查询的数据;
[0023]
数据库搜索:搜索方根据s中的条件通过数据库进行查询,并返回相应结果集;
[0024]
链上搜索:由于链上数据入库操作过程发生故障或网络延迟等原因,区块链数据会持续更新,从而导致更新后的数据没有及时处理。搜索方会保留处理的最终区块高度he,当接收用户的查询请求时,执行完数据库查询之后,会从高度为he+1的区块开始进行链上搜索。
[0025]
进一步,步骤s5中,所述数据库定期验证阶段:医疗区块链系统通过存储在数据库中的区块信息,定期(比如:每隔1个月)对数据库中的数据进行验证;
[0026]
所述搜索结果验证阶段:医疗区块链系统将搜索结果进行分页供用户浏览查看,与此同时对所有结果进行分页验证,从而节省用户等待时间。
[0027]
进一步,步骤s5中,两个阶段的验证具体包括以下步骤:
[0028]

从数据库获取每条医疗数据对应的字段信息,并将其拼接,然后计算其哈希值h(m);
[0029]

根据每份医疗数据对应的区块信息定位对应的交易位置;
[0030]

获取交易中存储的并将h(m)与进行对比,并判断结果是否相同,其中,表示上传到区块链交易中的医疗数据拼接并进行哈希而得到的值;如果不同,医疗区块链系统会根据医疗数据对应的id,替换数据库中被篡改过的数据,在搜索结果验证阶段,还会从交易中获取原始数据返回给用户;
[0031]
当用户查看像ct这种占有较大空间的医疗数据时,还需要根据患者病历信息中的图像存储位置,从相应的医疗机构进行下载并生成哈希值,然后与患者病历信息中的图像哈希值进行对比,并判断是否被修改过。
[0032]
本发明的有益效果在于:本发明能够使用户搜索任意类型的医疗数据并提高医疗区块链数据的搜索效率,同时兼顾数据的正确性和可靠性。
[0033]
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
[0034]
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:
[0035]
图1为本发明面向医疗区块链数据的可验证搜索方法的流程图;
[0036]
图2为本发明面向医疗区块链数据的可验证搜索机制系统模型;
[0037]
图3为区块交易结构;
[0038]
图4为数据库的结构设计;
[0039]
图5为可验证搜索工作框图。
具体实施方式
[0040]
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实
施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
[0041]
请参阅图1~图5,本发明提供一种面向医疗区块链数据的可验证搜索方法,包括以下几个阶段:
[0042]
阶段一:医疗机构负责将患者的电子医疗数据上传到区块链;
[0043]
阶段二:根据区块链中海量数据的特点选取非关系型数据库mongodb存储,并根据区块链中存储的医疗数据对mongodb设计相应的数据结构;
[0044]
阶段三:医疗区块链系统将区块中的医疗数据经过处理后存储到非关系型数据库中;
[0045]
阶段四:利用数据库的高效查询以及客户端缓存来提升区块链上医疗数据的搜索速度,并支持从链上搜索未处理区块的医疗数据,从而保证搜到更加全面的医疗数据;
[0046]
阶段五:提出了一种数据验证机制,定期对数据库中的医疗数据进行验证,并对查询的结果进行分页验证。
[0047]
作为一种可选的实施例,阶段一具体包括:医疗数据上传阶段。
[0048]
在医疗机构中,医生负责对前来就医的患者进行诊断和治疗,生成的医疗数据将由医疗机构上传到区块链中。由于加入到医疗区块链系统的所有用户都可以获取链上医疗数据,因此,为了保护患者的个人隐私,需要在医疗数据上链前确定是否有敏感的数据(例如,姓名、电话等),如果有则对其加密。其次,由于区块链存储容量限制,本发明把占用空间大的数据(例如,ct图像)存储在医疗机构的本地云中,只将占用空间比较小的ct图像哈希值和存储位置保存在链中。然后对要上传到区块链中的医疗数据拼接并进行哈希,生成一个哈希值即
[0049]
(id||患者姓名||...||医生id)
[0050]
其中,||表示拼接符,sha-256表示长度为256位的哈希函数。
[0051]
最后,医疗机构将电子医疗数据以及所有数据拼接而成的哈希值作为额外数据通过智能合约上传到区块链中,并以十六进制的形式存储在交易的input字段中。本实施例以以太坊为例在图3中描述了其区块交易结构以及input字段的组成部分。
[0052]
作为一种可选的实施例,阶段二具体包括:数据库设计阶段。
[0053]
在一份电子医疗数据中包含了患者个人信息(patientinfo),医院的信息(hospitalinfo),患者病历信息(emrinfo)。将医疗数据从区块链经过处理存储到数据库后,为了验证医疗数据的正确性和完整性,需要提取区块信息(blockinfo),用于定位医疗数据存在于哪笔交易里面。通常情况下,这四部分数据分别存储在四个集合中,并通过绑定id关联在一起。当查询一份满足条件的电子医疗数据时需要通过关联的id将四个集合中关联的数据都显示出来。在这种情况下,查询性能会比较慢,且在更新或者添加数据时四个集合都需要操作。故本发明使用一对一内嵌文档模型,一份电子医疗数据只对应一个患者,通过内嵌文档模型将四种信息作为单个文档内嵌在主文档中。添加、删除、修改、查询只需要操作一个集合即可。这样更易于管理,消除了因关联四个集合而带来的影响性能的操作,其
设计结构如图4所示。
[0054]
作为一种可选的实施例,阶段三具体包括:
[0055]
医疗区块链系统充当搜索方,负责对区块链进行监听维护并处理链上的医疗数据,其链上医疗数据入库处理的步骤如下所示:
[0056]
(1)医疗区块链系统获取要处理的区块号n,然后将块中的交易存储在一个列表里面。
[0057]
(2)判断交易列表是否为空列表,如果为空则返回步骤(1),否则执行步骤(3)。
[0058]
(3)获取列表中的所有交易,并以每笔交易作为一个单元执行步骤(4)~(5)。
[0059]
(4)获取交易中的交易哈希值h、input字段和交易在区块中的序号n,并对input字段解码成json格式的明文数据。
[0060]
(5)将n、n、h以及json中的键值对按设计的文档格式存入到非关系型数据库中,接着判断是否还有未处理的交易,如果有则执行步骤(4),否则返回步骤(1)。
[0061]
为了避免因发生故障或更新需要暂停工作导致需要从头处理区块的情况,本实施例还增加了一个持久化处理,保证了系统在下一次工作时可以继续从上一次暂停的地方进行处理。
[0062]
作为一种可选的实施例,阶段四具体包括:搜索阶段。用户希望通过向搜索方请求搜索医疗记录。其搜索请求是以s={[t1,t2],w}的形式存在。其中,[t1,t2]表示要搜索医疗数据生成的时间段,可以为空。w表示要搜索的关键词集。最终,由搜索方返回搜索结果集resultset:
[0063]
resultset={idk,ti,{patientinfok,hospitalinfok,emrinfok,blockinfok}}
[0064]
其中,ti∈[t1,t2],k∈1,2,

,n表示第k份医疗数据,n表示搜索的医疗数据的数量。
[0065]
用户通过智能合约输入s并请求搜索方。搜索过程分三种情形:
[0066]
客户端缓存:用户每次搜索都会优先查找本地缓存有无要查询的数据。
[0067]
数据库搜索:搜索方根据s中的条件通过数据库进行查询,并返回相应结果集。
[0068]
链上搜索:由于链上数据入库操作过程发生故障或网络延迟等原因,区块链数据会持续更新,从而导致更新后的数据没有及时处理。搜索方会保留处理的最终区块高度he,当接收用户的查询请求时,执行完数据库查询之后,会从高度为he+1的区块开始进行链上搜索。
[0069]
作为一种可选的实施例,阶段五具体包括:验证阶段。
[0070]
在该机制中,为了保证医疗数据的完整性和可靠性区块链系统包含两方面验证。一方面是定期验证数据库,另一方面是验证搜索结果。该机制支持返回正确的验证结果并对数据库中被篡改过的医疗数据进行更正。
[0071]
在数据库定期验证阶段,医疗区块链系统会定期(比如:每隔1个月)对数据库中的数据进行验证。在搜索结果验证阶段,医疗区块链系统将搜索结果进行分页供用户浏览查看,与此同时对所有结果进行分页验证,从而节省用户等待时间。其两个阶段的验证步骤如下:
[0072]

从数据库获取每条医疗数据对应的字段信息,并将其拼接,然后计算其哈希值,即h(m)=sha-256(id||患者姓名||...||医生id)。
[0073]

根据每份医疗数据对应的blockinfo部分定位对应的交易位置。
[0074]

获取交易中存储的并将h(m)与进行对比,并判断结果是否相同。如果不同,医疗区块链系统会根据医疗数据对应的id,替换数据库中被篡改过的数据,在搜索结果验证阶段,还会从交易中获取原始数据返回给用户。
[0075]
当用户查看像ct这种占有较大空间的医疗数据时,还需要根据emrinfo中的图像存储位置,从相应的医疗机构进行下载并生成哈希值,然后与emrinfo中的图像哈希值进行对比,并判断是否被修改过。
[0076]
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1