本研究比较了关系型与非关系型(NoSQL)标准化医疗信息系统。通过使用规模倍增的数据库,计算了查询此类数据库管理系统(DBMS)响应时间的计算复杂度。这些结果有助于讨论每种数据库方法在不同场景和问题中的适用性。
方法文章
本研究比较了关系型与非关系型(NoSQL)标准化医疗信息系统。通过使用规模倍增的数据库,计算了查询此类数据库管理系统(DBMS)响应时间的计算复杂度。这些结果有助于讨论每种数据库方法在不同场景和问题中的适用性。
本研究展示了一种用于评估查询关系型与非关系型(NoSQL,即不仅限于结构化查询语言)标准化电子健康记录(EHR)医疗信息数据库管理系统(DBMS)计算复杂度的实验方案。该方案采用一组包含三个规模依次倍增的数据库, 即 存储 5000、10000 和 20000 份真实标准化电子健康记录(EHR)提取数据的数据库,涵盖三种不同的数据库管理系统(DBMS):关系型 MySQL 与对象关系映射 (ORM)、基于文档的 NoSQL 数据库 MongoDB,以及原生可扩展标记语言(XML)NoSQL 数据库 eXist。
计算了对六个复杂度递增查询的平均响应时间,结果显示在 NoSQL 情况下呈线性行为。在 NoSQL 领域中,MongoDB 的线性斜率远比 eXist 更平缓。
由于医疗信息更新策略的特殊性,NoSQL 系统可能更适用于维护标准化的医疗信息系统,此类更新策略不应影响存储在 NoSQL 数据库中的数据的一致性和效率。
本方案的一个局限性在于,缺乏使用相同数据获得的改进型关系系统(如原型关系映射,ARM)的直接结果。然而,将数据库规模加倍后的插值结果与文献中报道的及其他已发表的结果进行比较表明,在许多特定场景和待解决问题中,NoSQL 系统可能更为合适。例如,在基于文档的任务中(如临床实践中使用的电子健康记录(EHR)提取、编辑与可视化),或当目标不仅是查询医学信息,还需将 EHR 完全恢复为其原始形式的情况下,NoSQL 可能更为适用。
NoSQL(不仅仅是 SQL)数据库管理系统最近已成为传统关系型数据库管理系统(RDBMS)的一种替代方案。几十年来,关系型数据库管理系统一直主导着数据在数据库系统中的存储方式。经过深入研究和充分理解的关系代数与关系演算,保证了关系型数据库管理系统的高效性与一致性1。NoSQL 系统并不会取代关系型系统,但在某些特定场景和多种条件下可能表现出优势。
在设计用于管理和存储医疗信息的电子健康记录(EHR)系统的数据库持久化时,可能会遇到上述某些特定场景和条件。为了在实践中实现互操作性和可持续性,已采用若干国际标准(如 ISO/EN 13606、openEHR 和 HL72,3,4,5)来规范 EHR 数据的提取。
诸如 ISO/EN 13606 和 openEHR 等多个标准已将信息与知识分离为两个不同层次的抽象,分别由参考模型(Reference Model, RM)和一种称为原型(archetypes)的特殊数据结构来表示。这种分离通常被称为双模型(dual model),它使得电子健康记录(EHR)系统能够实现语义上的互操作性,并允许医学知识在无需重新编程整个 EHR 系统的前提下持续演进,从而在实践中具备可维护性和可持续性6。然而,在标准化的 EHR 系统中实现的双模型要求信息的组织遵循特定的结构,这对系统数据库持久化层级的设计方式产生了深远影响7。
对象关系映射(Object Relational Mapping, ORM)8 是一种基于关系型数据库范式来实现电子健康记录(EHR)系统的方案。ORM 对系统所使用的标准化 EHR 导出 XML(eXtensible Markup Language)文件的结构进行详尽映射,并据此构建大量关系型数据表。这些关系型数据表通过多个外键相互关联,导致最终的系统可能效率较低。
人们已提出多种对对象关系映射(ORM)的改进方法。openEHR 的 Node+Path9 通过将整个提取的 XML 文件的子树序列化为 BLOB(二进制大对象)来减少关系表的数量。然而,这种简化导致了复杂的检索逻辑,损害了复杂查询的性能。模板关系映射(Archetype Relational Mapping, ARM)10 则采用由模板驱动的数据库建模方法,基于模板与关系表之间的映射关系构建新的关系模式。因此,电子健康记录(EHR)提取物中的部分非医疗信息会丢失。
许多基于文档的 NoSQL 数据库存储整个文档,将其作为完整的 BLOB 保存,并保持原始的 XML 或 JSON(JavaScript 对象表示法)格式。这意味着不会构建关系表。这些 NoSQL 数据库没有模式,也不支持连接操作或(ACID)特性11,即原子性、一致性、隔离性或持久性。因此,如果一个文档中的元素通过间接链接引用同一文档或其他文档中的元素,则此类数据库可能效率极低。这是因为为了保持一致性,必须顺序处理所有被引用的文档。然而,如果数据库管理系统执行的主要任务是基于文档的操作,则非关系型数据库仍可能是合适的。这是因为使用基于文档的 NoSQL 数据库时,数据可以保持更接近其真实表示的形式,尽管这一点也与电子健康记录(EHR)医疗文档所实现的特殊持久化策略有关(参见讨论部分)。
这些方法的目的是展示若干实验,以比较采用三种不同数据库管理系统(DBMS)实现标准化电子健康记录(EHR)系统持久层的性能:一种关系型数据库(MySQL)和两种非关系型数据库(基于文档的 MongoDB 和原生 XML 的 eXist)。通过三个规模递增的数据库以及六个复杂度逐步提高的查询,计算并比较了它们的计算复杂度。这三个数据库服务器均在同一台计算机上本地安装和配置,并在该计算机上执行所有查询。技术细节请见材料表。
为了比较关系型MySQL与非关系型MongoDB数据库管理系统的性能,也开展了并发实验。此外,还利用文献中相关的适当结果对所描述的ORM改进方法(Node+Path和ARM)进行了比较10。
数据库管理系统正在以不断加快的速度持续演进。当关系模型是唯一存在的范式时,人们并未预料到这种指数级的发展。例如,参见文献12,其中提出了一种模型,用于实现响应时间更优且保持ACID特性的关系型数据库。
1. 构建关系型 MySQL 数据库管理系统以存储三个双倍规模的标准电子健康记录提取数据库
2. 构建一个 NoSQL MongoDB 数据库管理系统以存储三个双倍规模的标准 EHR 提取数据库
3. 构建一个NoSQL eXist数据库管理系统以存储三个双倍规模的标准EHR提取数据库
4. 在3个关系型MySQL数据库中设计并执行6个复杂度递增的查询
5. 在3个NoSQL MongoDB数据库中设计并执行6个复杂度递增的查询
6. 在3个NoSQL eXist数据库中设计并执行复杂度递增的查询
7. 使用 MySQL 和 MongoDB 5,000 条提取物数据库设计并执行并发实验
注意:由于在之前的实验中 eXist 数据库性能较差,目前已从实验中移除。
在包含患者问题信息(包括患者姓名、起始日期、结束日期和严重程度)的真实标准化电子健康记录提取物上执行的六种不同查询如图所示 表1.
三种数据库规模翻倍情况下,各数据库管理系统中六个查询的平均响应时间如表2-4所示。图1-6以图形方式展示了相同的结果(请注意,这些图中的纵坐标轴使用了截然不同的量程)。
在所有NoSQL数据库查询中,计算复杂度均表现出明显的线性行为,尽管由于所使用的3个数据集规模相对较小,需谨慎对待该结论。然而,关系型ORM数据库则表现出不明确的线性行为。MongoDB数据库的斜率远比eXist数据库平缓。
在引言中讨论的改进关系系统在文献中发表的结果可参见表5。将表3中的MongoDB结果与表5中ARM结果在相似查询和数据库规模下进行插值比较,两者在Q1中表现相当,但在Q3中MongoDB更具优势。
并发实验的结果见表5和表6。在吞吐量和响应时间方面,MongoDB 均优于 MySQL。事实上,MongoDB 在并发情况下的表现优于独立运行时的表现,显示出其在并发执行中具有出色的数据库性能。

图 1:ORM MySQL、MongoDB 和 eXist 数据库管理系统在查询 Q1 和 Q4 中的算法复杂度。本图基于7修改,采用知识共享许可协议(http://creativecommons.org/ licenses/by/4.0/),展示了每种数据库管理系统在 5,000、10,000 和 20,000 条电子健康记录提取数据集规模下,执行查询 Q1 和 Q4 的响应时间(单位:秒)。 请点击此处查看此图的高清版本。

图 2: ORM MySQL 数据库管理系统在查询 Q2 中的算法复杂度。本图展示了 ORM MySQL 数据库在查询 Q2 时,针对包含 5,000、10,000 和 20,000 条记录的电子健康记录(EHR)提取物的响应时间(单位:秒)。请点击此处查看此图的放大版本。

图 3: MongoDB 与 eXist 数据库管理系统在查询 Q2 和 Q5 上的算法复杂度。本图改编自文献7,采用知识共享许可协议(http://creativecommons.org/licenses/by/4.0),展示了两种数据库管理系统在 5,000、10,000 和 20,000 条电子健康记录提取数据库规模下,执行查询 Q2 和 Q5 的响应时间(单位:秒)。请点击此处查看此图的高清版本。

图 4:ORM MySQL 数据库管理系统在查询 Q3 和 Q5 上的算法复杂度。显示了每种数据库管理系统在包含 5,000、10,000 和 20,000 条记录的电子健康记录提取数据库上执行查询 Q3 和 Q5 的响应时间(单位:秒)。请点击此处查看该图的高清版本。

图5:eXist 与 MongoDB 数据库管理系统在查询 Q3 上的算法复杂度。本图改编自文献7,采用知识共享许可协议(http://creativecommons.org/licenses/by/4.0/),展示了两种数据库管理系统在处理包含 5,000、10,000 和 20,000 条记录的电子健康记录提取数据库时,执行查询 Q3 的响应时间(单位:秒)。请点击此处查看此图的高清版本。

图 6: ORM MySQL、eXist 和 MongoDB 数据库管理系统在查询 Q6 上的算法复杂度。该图改编自文献7,采用知识共享许可协议(http://creativecommons.org/licenses/by/4.0/),展示了每种数据库管理系统在包含 5,000、10,000 和 20,000 条记录的电子健康记录提取数据库上执行查询 Q6 时的响应时间(单位:秒)。请点击此处查看此图的高清版本。
| 查询 | |
| Q1 | 查找单个患者的所有问题 |
| Q2 | 查找所有患者的所有问题 |
| Q3 | 查找单个患者某一特定问题的 |
| 初始日期、解决日期和严重程度 | |
| Q4 | 查找单个患者所有问题的 |
| 初始日期、解决日期和严重程度 | |
| Q5 | 查找所有患者所有问题的 |
| 初始日期、解决日期和严重程度 | |
| Q6 | 查找患有“咽炎”问题、 |
| 初始日期 >= '16/10/2007'、解决日期 | |
| <= '06/05/2008' 且严重程度为“高”的所有患者 |
表1:在包含标准化患者电子健康记录(EHR)提取数据的关系型和NoSQL数据库上执行的六个查询。 本表格改编自7,采用知识共享许可协议(http://creativecommons.org/ licenses/by/4.0/),以自然语言展示了在每种数据库管理系统(DBMS)的三个规模递增的数据库上执行的六个复杂度递增的查询。
| ORM/MySQL | 5000 份文档 | 10,000 份文档 | 20,000 份文档 |
| Q1 (s) | 25.0474 | 32.6868 | 170.7342 |
| Q2 (s) | 0.0158 | 0.0147 | 0.0222 |
| Q3 (s) | 3.3849 | 6.4225 | 207.2348 |
| Q4 (s) | 33.5457 | 114.6607 | 115.4169 |
| Q5 (s) | 9.6393 | 74.3767 | 29.0993 |
| Q6 (s) | 1.4382 | 2.4844 | 183.4979 |
| 数据库大小 | 4.6GB | 9.4GB | 19.4GB |
| 总提取数 | 5000 | 10,000 | 20,000 |
表2:ORM MySQL关系型数据库管理系统在数据库规模成倍增加时,六个查询的平均响应时间(秒) 此表格 展示了使用 ORM MySQL 关系型数据库管理系统和三个数据库的内存大小时,针对每个查询在三个规模依次加倍的数据库上的六次响应时间。
| MongoDB | 5000 条文档 | 10,000 条文档 | 20,000 条文档 | 斜率 (*10exp(-6)) |
| Q1 (s) | 0.046 | 0.057 | 0.1221 | 5.07 |
| Q2 (s) | 34.5181 | 68.6945 | 136.2329 | 6,780.99 |
| Q3 (s) | 0.048 | 0.058 | 0.1201 | 4.81 |
| Q4 (s) | 0.052 | 0.061 | o.1241 | 4.81 |
| Q5 (s) | 38.0202 | 75.4376 | 149.933 | 7460.85 |
| Q6 (s) | 9.5153 | 18.5566 | 36.7805 | 1,817.68 |
| 数据库大小 | 1.95GB | 3.95GB | 7.95GB | |
| 总提取数 | 5000 | 10,000 | 20,000 |
表3:在MongoDB NoSQL数据库管理系统中,六个查询在数据量翻倍的数据库上的平均响应时间(秒)。 本表格经修改自7,采用知识共享许可协议(http://creativecommons.org/ licenses/by/4.0/),展示了使用NoSQL MongoDB数据库管理系统时,三个数据量依次翻倍的数据库中每个查询的六项响应时间,以及这三个数据库的内存占用大小。每个查询的线性斜率也一并列出。
| eXist | 5000 份文档 | 10,000 份文档 | 20,000 份文档 | 斜率 (*10exp(-6)) |
| Q1 (s) | 0.6608 | 3.7834 | 7.3022 | 442.76 |
| Q2 (s) | 60.7761 | 129.3645 | 287.362 | 15,105.73 |
| Q3 (s) | 0.6976 | 1.771 | 4.1172 | 227.96 |
| Q4 (s) | 0.6445 | 3.7604 | 7.3216 | 445.17 |
| Q5 (s) | 145.3373 | 291.2502 | 597.7216 | 30,158.93 |
| Q6 (s) | 68.3798 | 138.9987 | 475.2663 | 27,125.82 |
| 数据库大小 | 1.25GB | 2.54GB | 5.12GB | |
| 提取总数 | 5000 | 10,000 | 20,000 |
表4:在eXist NoSQL数据库管理系统上,六个查询在数据库规模逐次加倍时的平均响应时间(秒)。 本表格经7修改,采用知识共享许可协议(http://creativecommons.org/ licenses/by/4.0/),展示了使用NoSQL eXist数据库管理系统时,三个规模逐次加倍的数据库中每个查询的六项响应时间,以及这三个数据库的内存占用大小。同时列出了每个查询的线性斜率。
| ARM 论文 | ARM (秒) | 节点+路径 (秒) | |
| Q1 | 查询 2.1 | 0.191 | 24.866 |
| Q3 | 查询 3.1 | 0.27 | 294.774 |
| 数据库大小 | 2.90GB | 43.87GB | |
| 总提取数 | 29,743 | 29,743 |
表5:改进的关系型系统中与文献10中Q1和Q3查询类似的查询的平均响应时间(单位:秒)。 本表格改编自文献7,采用知识共享许可协议(http://creativecommons.org/ licenses/by/4.0/),展示了与文献10中Q1和Q3最相似的两个查询,分别对应两种改进的关系型数据库系统及其响应时间。同时列出了两个数据库的规模。
| ORM/MySQL | 吞吐量 | 响应时间 |
| Q1 (s) | 4,711.60 | 0.0793 |
| Q3 (s) | 4,711.60 | 0.1558 |
| Q4 (s) | 4,711.60 | 0.9674 |
表6:ORM MySQL关系型数据库管理系统在并发执行中查询Q1、Q3和Q4的平均吞吐量及响应时间(单位:秒)。 本表格改编自文献7,采用知识共享许可协议(http://creativecommons.org/ licenses/by/4.0/),展示了在使用ORM MySQL关系型系统进行并发执行实验时,三个单患者查询的最高平均吞吐量及其平均响应时间。
| MongoDB | 吞吐量 | 响应时间 |
| Q1 (s) | 178,672.60 | 0.003 |
| Q3 (s) | 178,672.60 | 0.0026 |
| Q4 (s) | 178,672.60 | 0.0034 |
表7:MongoDB NoSQL数据库管理系统在并发执行中查询Q1、Q3和Q4的平均吞吐量及响应时间(单位:秒)。 本表格经7修改,采用知识共享许可协议(http://creativecommons.org/ licenses/by/4.0/),展示了在使用MongoDB NoSQL系统进行并发执行实验时,三个单患者查询的最高平均吞吐量及其平均响应时间。
补充图1:截图显示了用于连接到 MySQL 服务器的软件界面。请点击此处下载该图。
补充图2:截图显示了连接到MySQL服务器的SQL界面,其中已编写第一条SQL查询语句。请点击此处下载该图。
补充图3:通过DOS系统窗口执行服务器mongod来启动MongoDB 2.6本地主机服务器。 请点击此处下载该图。
补充图4:截图显示了在查询构建器的文本框中输入的查询语句,如步骤5.7.1至5.7.4所示。本截图展示了步骤5.7.3。请点击此处下载该图。
补充图5:截图显示步骤5.7.6。 请点击此处下载该图。
补充图6:该截图展示了在对话框上半部分编写XPath查询的过程。请点击此处下载该图。
本方案表明,对于单个患者的查询(Q1、Q3 和 Q4),纯关系型 ORM 系统似乎并不实用,因其响应时间较慢,这可能是由于大量关系表执行了大量高成本的连接操作,以及特定数据库所采用的存储系统所致。NoSQL 数据库以基于文档的方式存储数据,而关系型系统则采用基于表格的方式,将每个文档分散存储在整个数据库中。NoSQL 系统呈现出线性增长趋势,其中 MongoDB 的性能明显优于 eXist DBMS。在并发处理方面,MongoDB 的表现也远优于关系型 MySQL ORM7。
本方案针对文献7中关于 ORM MySQL 数据库管理系统(DBMS)结果的故障排除提供了解决方案。MySQL 系统已更新至最新版本,相关结果也进行了小幅调整。此外,在基于文档的 NoSQL 系统(如 MongoDB)中存在一个关键点:在存储医疗信息时,此类系统可能保持数据一致性7,因为当电子健康记录(EHR)提取件被更新时,并非覆盖原有数据,而是生成并存储一个包含新数据的全新提取件,同时保留原始提取件。这是医疗信息的一项严格要求,因为某些医疗专业人员可能已基于原始数据做出了重要的医疗决策。
改进后的关系型ARM系统大幅减少了关系表的数量,并提升了关系型查询性能。然而,由于该系统修改了关系型模式,因此可以对提取物所包含的医学信息进行查询,但无法将提取物恢复为其原始的精确形式。
对于用于二次利用(研究)的大型数据库,目前尚不明确哪种数据库系统更为合适,因为全患者查询(Q2和Q5)在ORM系统中的表现优于NoSQL系统,但NoSQL系统在12中的表现又优于简化的关系型系统。我们认为Q6是一个介于临床实践与二次利用之间的特殊查询,其性能无法通过这些实验的结果来确定。
然而,该方法的一个局限性在于,目前尚无直接实验将改进的关系型 ARM 系统与 NoSQL MongoDB 在单患者、医疗实践查询方面进行对比,且使用与本方案中完全相同的数据。在包含优化 ARM 的实验完成之前,我们通过插值 表3 和 表5 中关于单患者查询的结果来维持分析。这些实验将留待未来应用中完成。本方案中的一个关键步骤是选择近年来版本相近的免费数据库和类似软件,以便我们能够准确比较这三种技术的最新状态。
这是首次尝试使用真实、合理且标准化的医学信息直接比较关系型数据库与NoSQL系统的研究之一。然而,具体应采用哪种系统在很大程度上取决于实际的应用场景和待解决的问题8。
作者无任何利益冲突需要披露。本实验所使用的数据集由多家西班牙医院在许可条件下提供,仅用于本实验,因此不公开提供。ISO/EN 13606 RM XML 模式由伦敦大学学院健康信息学与多专业教育中心(CHIME)提供。
作者谨此感谢 EHRCom 任务组负责人、定义 ISO/EN 13606 标准的 Dipak Kalra 博士及其来自伦敦大学学院的团队,感谢他们慷慨授权使用 ISO/EN 13606 W3C XML Schema。
本工作由卡洛斯三世健康研究所资助[资助编号:PI15/00321、PI15/00003、PI1500831、PI15CIII/00010 和 RD16CIII]。
| 姓名 | 公司 | 目录编号 | 评论 |
|---|---|---|---|
| MySQL 5.7.20 | MySQL 实验 | ||
| Red Hat Enterprise Linux Server release 7.4 (Maipo),2.60GHz,内存 16GB | |||
| MongoDB 2.6 | MongoDB 实验 | ||
| Windows 7,2.66GHz,内存 12GB | |||
| eXist 3.0RC1 | eXist 实验 | ||
| Windows 7,2.66GHz,内存 12GB | |||
| Studio 3T 5.5.1 | 3T Software Labs Gmbh | MongoDB 图形用户界面 |