基于MongoDB的文件存储系统的设计与实现
2016-08-12白玉杰程顺达河北省中医院信息中心河北石家庄050011
白玉杰,夏 方,程顺达(河北省中医院 信息中心,河北 石家庄 050011)
基于MongoDB的文件存储系统的设计与实现
白玉杰,夏 方,程顺达
(河北省中医院 信息中心,河北 石家庄 050011)
基于MongoDB数据库,采用复制集群与分片集群结合的方式,建立分片复制集群(本文中为3分片,每个分片为3副本),集群包括路由节点、配置节点、主副本节点、仲裁节点.这样既兼顾了集群的性能,也保证了其高可用性.可有效解决原关系型数据库的不足,提高非结构化数据的查询效率,缓解关系数据库的读写负载压力和运维压力,而且当用户访问量剧增时,可以动态增加MongoDB节点来扩展性能和提高负载能力.
MongoDB;数据库;存储系统;集群
随着信息技术的不断发展,系统集中的建设模式逐渐成为主流.系统集中不仅可按需分配计算能力,提高系统运行效率,而且大大节约硬件的投资成本.但在原有分散建设系统时,支撑业务的图片、Word、Excel、视频等文件有可能存储于传统的关系型数据库中.在系统集中后,如何将海量的非结构化文件数据统一存储又不会降低系统运行效率,是一个难题.本文引入了面向非结构化数据的NoSql数据库来解决这一难题.
1 系统架构设计
MongoDB是时下流行的NoSql数据库,其特点是高性能、易部署、易使用,存储数据非常方便,尤其适合大尺寸、低价值的文件数据的存储.MongoDB支持单机、主从、复制集群(Replica Set)及分片集群Sharding)4种模式.复制集群模式是一种进化的主从结构,在主节点失效后,仲裁节点会选出一个副本节点作为主节点,这样保证了集群的高可用性.分片集群则是通过将数据存储分布到不同机器上进行保存,使更新或查询操作也分布到不同节点进行,从而将I/O操作分布到各个机器上,从整体上提高了访问效率,防止出现性能瓶颈.因此,我们采用复制集群与分片集群结合的方式,建立分片复制集群(本文中为3分片,每个分片为3副本),这样,既兼顾了集群的性能,也保证了其高可用性.
1) 路由节点:路由节点是数据库集群请求的入口,所有的请求都通过路由节点进行协调,不需要在应用程序添加一个路由选择器,路由节点自己就是一个请求分发中心,它负责把对应的数据请求转发到对应的分片服务器上.这里用多路由节点作为请求的入口,来保障高可用性.
2) 配置节点:存储所有数据库元信息(路由、分片)的配置.路由节点本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据.路由节点第一次启动或者关掉重启就会从配置节点加载配置信息,以后如果配置服务器信息变化会通知到所有的路由节点更新自己的状态,这样路由节点就能继续准确路由.这里采用多个配置节点服务器也是为了保障高可用性.
3) 主、副本节点:两个节点互为主备,是文件数据存储的空间.默认情况下,主节点提供增删查改功能,副本节点提供查询功能,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到副本节点上.
4) 仲裁节点:仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是将副本节点在主节点挂掉之后提升为主节点.
2 管理程序设计
在程序设计和开发时,我们借助于GridFS来实现文件的存取,GridFS是MongoDB数据库之上的一个简单文件系统抽象.GridFS会为每个文件创建chunks和files信息,GridFS会将大文件对象分割成多个小的chunk(文件片段),每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中.和文件有关的元数据将会被存在files集合中.files集合的格式如下:
采用C#语言开发的存储文件函数如下:
读取文件的函数如下:
3 小结
将原有存储于关系数据库中的非结构化数据,剥离到MongoDB数据库进行存储,可有效解决原关系型数据库的不足,提高了非结构化数据的查询效率,缓解关系数据库的读写负载压力和运维压力,而且当用户访问量剧增时,可以动态增加MongoDB节点来扩展性能和提高负载能力.
(责任编校:李建明 英文校对:李玉玲)
Design and Implementation of File Storage System Based on MongoDB
BAI Yujie, XIA Fang, CHENG Shunda
(Information Centre, Hebei Hospital of Traditional Chinese Medicine, Shijiazhuang, Hebei 050011, China)
Based on MongoDB, a kind of slice replication cluster can be created by the combination of replication lusters and slice clusters (The slice replication cluster has three slices and every slice has three replicas). The creation f the slice replication cluster, which includes routing nodes, configuration nodes, primary replica nodes and arbitrition odes, not only takes into accounts the performance of the cluster but also can ensure its high availability. It can effectively olve the problem of the insufficiency of the original relational database, improve the query efficiency of the unstructured ata, alleviate the read and write load pressure and operation pressure of the relational database, but also dynamically dd mongodb nodes to extend performance and increase load capacity when the number of access users increases.
MongoDB; database; storage system; clusters
TP311.13
A
1673-2065(2016)04-0008-03
2016-05-03
白玉杰(1983-),男,河北阜平人,河北省中医院信息中心助理工程师.
夏方(1979-),男,江苏丹阳人,河北省中医院信息中心助理工程师.
10.3969/j.issn.1673-2065.2016.04.005
10.3969/j.issn.1673-2065.2016.04.004