Py学习  »  NoSql

基于NoSQL的中医药数据存储方法研究

中国数字医学 • 6 年前 • 1092 次点击  

数据类型多样、数据量大、异构是中医药数据的典型特征。目前,对中医药数据信息的存储和管理,主要依赖于关系数据库(RDBMS)。然而,面对海量异构的中医药数据如何实现高并发读写、高可扩展性以及异源数据间的互操作等一系列问题,RDBMS由于其自身的局限遇到了困境,难以满足中医药大数据高效存储和访问的迫切需求。因此,亟需研究新的数据管理模型来解决中医药数据的管理问题,而非关系型数据库 (NoSQL)的出现有效地弥补了RDBMS的不足。


不同于RDBMS,NoSQL是一种分布式、非关系型数据库系统,不仅能够实现各类型数据的高并发读写,而且支持键值(Key-Value)、图、列族、文档等常见数据类型。NoSQL可以高效管理海量数据,并且具有较好的可扩展性和灵活性。MongoDB属于NoSQL的范畴,在NoSQL领域占有举足轻重的地位。本文以MongoDB为代表,研究基于NoSQL的中医药大数据存储方法。采用全国各省中医院在线公开的大量药方数据库资源,通过研究存储系统的体系结构和关键技术,与传统关系型数据库在相同的大数据条件下进行实验对比,验证了本文提出的方法在存储和访问海量中医药数据时具有更高的性能。


MongoDB介绍


MongoDB是一个模式灵活、开源、高性能、可扩展的文档型数据库。主要特性包括:存储模式自由,面向集合存储;支持动态查询和完全索引,查询表达式丰富;自动分片机制,支持动态添加机器;支持数据复制和自动故障恢复。MongoDB的以上特性为海量、异构、多元的中医药大数据的存储和访问提供了支持。


中医药数据管理系统设计


中医药数据管理系统的设计需考虑以下因素:负载均衡性、数据冗余性和水平扩展性。因此,主要进行以下三方面设计。


2.1 MongoDB分布式集群设计 由于单机节点无法满足大数据高效存储和访问的要求,因此需要建立分布式集群环境来解决。一个MongoDB集群通常由三个部分组成。


2.1.1 分片节点(Shard) 分片节点用于存储实际的数据块,一个分片节点可以由多个服务器组成副本集合,每个服务器存储的数据相同,实现数据冗余和系统扩展。


2.1.2 路由服务(Route Server) 主要功能是处理终端请求和返回执行结果,即MongoDB把不同的请求分发给不同的Shard,最后把所有相关分片结果整合后返回。


2.1.3 配置服务器(Config Server) 主要负责存储集群上元数据信息。


本文设计的MongoDB分布式集群架构如图1所示。

图1 MongoDB分布式集群架构


其中,图1中的Mongos属于控制服务器,提供路由服务。其根据Config Servers存储的每个块数据记录确定Client的不同请求要路由到哪个分片服务器,把结果融合后返回给Client终端。对于分片节点Shard来讲,两台以上的mongod服务器为一组,即一个分片,一组里mongod数据相同,每个分片上存放的是一定范围的数据,当一个分片的数据量过多时,为保持负载平衡,会迁移到另外的分片,这样的分片机制提高了系统的访问能力和扩展能力。


2.2 分片设计 所谓数据分片是指把数据分散地存储于多个分片服务器上,减小单个服务器的负担,进而使系统性能得到提高。本文设计的存储系统选择基于ID特征的分片策略。比如对记录ID进行取模运算,结果为n,则该记录被分配到编号为n的分片服务器(数据分区)上。数据分片流程如图2所示。



图2 数据分片流程图


根据图2流程,以数据文件作为分片对象,基本分片原理是把整个数据文件根据所获取的分片大小进行分片计算。因此,分片流程的第一步就是获取需要分片的数据源文件,并计算数据源文件的总大小。基于chunksize的值,如果当前数据源文件总大小大于chunksize,则重复执行与chunksize取模的运算,得到相应的分片号。分片的大小等于分片的长度,一直到当前总大小减去chunksize大小小于chunksize时,把最后剩余的未分片部分分配给下一个分片服务器。


每个已分片的数据用来作为一个记录的值和关键字,并且在每个记录里面添加分片号、数据文件名、数据文件大小、分片大小等键值对。


2.3 负载均衡和冗余设计 本文设计的存储系统采用副本集的方式来实现数据冗余。即在一个分片节点中包含两个以上存储相同数据的mongod服务器,在写数据文件时,把该数据分片写入到多个mongod上,保持备份mongod之间的更新。那么即使其中某一台mongod服务器出现故障,也可以立即启用分片中的其他副本提供数据,避免数据丢失,保障存储系统的正常工作,增强系统的安全性、可靠性、稳定性。


3    实验结果与分析


3.1 实验环境搭建 由于基于NoSQL的中医药大数据存储系统依赖于一定的大数据平台。选择1台计算机做为主机,另外8台计算机作为从机,搭建实际的集群节点。逐步配置大数据平台,具体步骤在此不做赘述。


3.2 数据来源 采用数据源来自全国各省中医院在线公开的大量药方数据库资源,数据总大小达280GB。该数据源记录了自2006年起至今的多所中医院公开的药方数据。例如:复方藿香洗剂治疗手足癣(克白醋500克,黄精、明矾各10克,生大黄2克,藿香25),熏洗法治足癣感染(黄柏、黄芩、白鲜皮、百部、防风各15克,萆薢20克,枯矾12克,广丹3克)等。


采用的药方对象具有数据量大、关系复杂、数据异构等特点, RDBMS针对这类数据通常很难达到预期效果。因此通过基于NoSQL的大数据存储技术进行管理,对大量公开的药方进行收集、整理,探究其内在规律,以期把实验结果提供给临床进行检验。


3.3 MongoDB数据存储系统与传统RDBMS性能对比


3.3.1 存储性能对比 分别对基于MongoDB数据存储系统与RDBMS各进行1,20,100,500,1000次文件存储,其中每个文件所占空间大小为40KB。MongoDB与RDBMS在数据存储性能方面的比较如图3所示。

图3 存储性能对比


由图3可以看出,处理的文件数量越多,两种方式所需的处理时间越长,另一方面,数据量超过某一“阈值”时,RDBMS所需时间急剧增加,而MongoDB的时间增长率一直比较平稳,甚至趋近于线性增加。由此可以看出,数据量越大MongoDB数据存储系统的性能优势越明显,更适用于大数据的存储。


3.3.2 查询性能对比 分别对基于MongoDB数据存储系统和RDBMS各进行数据量为500,1000,3000,6000,10000查询操作,MongoDB与RDBMS数据查询性能的对比如图4所示。

图4 查询性能对比


由图4不难看出,基于MongoDB数据存储系统的查询过程耗时非常少,几乎可以忽略不计,在数据量大幅增多的情况下,其耗时增幅没有明显变化。而RDBMS查询耗时较大,随着数据量的增加,其耗时增幅会有明显增加。


因此,与RDBMS相比,基于NoSQL的数据存储系统具有更好的数据读写性能、扩展性和灵活性。


4    结论


本文首先研究了MongoDB的特性和关键技术,设计了基于MongoDB的中医药大数据存储系统架构,包括集群设计、数据分片设计、负载均衡和冗余设计等关键方面,具有较强的可扩展性、负载均衡性和可靠性。实验结果表明,基于NoSQL的中医药大数据存储方法从系统架构层面进行的设计与改进,使得对海量非结构化、半结构化中医药数据的读写效率大幅提高。


不断扩大中医药数据量和集群规模,从更广的层面检验系统性能并完善系统,以加强数据检索能力,进一步提高中医药数据存储和访问性能是下一步的研究方向。


(来源:《中国数字医学》杂志2017年第6期,作者及单位:梁杨 黄辛迪 湖南中医药大学管理与信息工程学院)


《中国数字医学》微店,点击以下阅读原文进入


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/mOXiNaShFc
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2585
 
1092 次点击