APP下载

MongoDB在城市排水中的应用研究

2020-11-18刘仪轩

电脑与电信 2020年8期
关键词:分片副本备份

刘仪轩

(东华大学计算机科学与技术学院,上海 8170003)

1 引言

随着城市智慧排水建设浪潮的不断推进,各种降雨传感器、积水位传感器的数量不断增多,大量的实时数据与历史数据在管理和存储上带来了很大的挑战,传统的关系型数据库的短板逐渐显现,如数据格式要求统一,无法存储复杂格式的数据,对于大数据的存储和管理效率低下,已无法满足智慧城市建设发展的需求。而非关系型数据库MongoDB的出现,其在存储复杂数据和大数据处理上都有很大的优势,通过搭建MongoDB 分布式数据库为排水设施的可动态扩展、高效率数据存储提供了新的解决方案。

2 排水设施数据库设计

2.1 设计原则

MongoDB 数据库由多个集合组成,而每个集合由多个文档组成,MongoDB 中的集合概念相当于传统关系型数据库中数据库的概念,而文档相当于表的概念。区别在于文档是自由模式的,没有固定的行列结构,因此是不需要对表结构进行特定的设置。虽然说集合和文档的模式存储较为灵活,但是带来的缺点是缺乏规范性,在数据管理上需要进行设计。在本文中将数据结构相近的数据存储在相同的集合中,然后将相同的几个集合分为几个大类集合,这样既能够让数据进行灵活存取,也能够将数据进行统一管理,同时还有利于提高读写效率。创建集合需要遵循以下几个原则:

(1)建立索引原则。在数据库中建立索引能够大大加速数据的查询速度,添加索引之后查找数据就不需要整张表进行查找,在建立索引的时候是以集合为基础建立的。MongoDB的索引可以根据关系型数据库中索引的建立规则来建立,具体要求如下:根据需要查询的字段来建立索引,索引不是越多越好,过多的索引会降低查询效率。索引建立后并不是一成不变的,需要根据应用场景的变化做及时的更新。

(2)方便管理和存储原则。将相似结构和类型的数据归类到相同的集合中,做好分类有利于开发人员、数据库管理人员和用户进行使用。

(3)利于扩展原则。考虑到随着城市智慧水务系统的不断扩大,传感器部署越来越多,所记录的雨量数据也越来越庞大,需要设计的集合应便于数据库的横向及纵向扩展。

2.2 数据库设计

根据系统数据库的要求,将数据库设计分为四大类:用户信息数据库、业务数据库、传感器积水量数据库和多媒体数据库。其中用户信息数据库根据权限分为巡检人员、管理人员、超级管理员三大类。业务数据库主要是用于巡检养护数据存储,包括养护里程统计、本月养护管道长度统计、当年街镇养护计划执行情况、巡检完成情况、巡检上报事件统计、当年应急处置事件总数等。传感器数据库中的数据分为防汛监控数据、污水监控数据,其中防汛监控数据包括积水情况统计、今日降雨量统计、泵站工况实时信息和雨量实时信息。数据结构示意图如图1所示。

3 数据存储层设计与实现

3.1 MongoDB集群架构设计

随着城市排水设施智能化的建设,排水设施状态监控越来越完善,排水点感知器越来越多,同时也带来了高并发和大数据存储的考验。单台服务器已经无法满足如此大的数据量和查询量,同时为了做好服务器灾备,提高系统存储查询效率,将数据库设计成集群模式,搭载多台服务器一同工作,应对大数据带来的挑战。MongoDB 在搭建集群时会自动分片,不需要考虑硬件之间的联系,同时可以在不影响当前数据库的情况下进行动态扩容,从而实现数据库的海量存储[1]。MongoDB集群中有几个重要概念:

Mongos,数据库集群请求入口。所有的请求访问MongoDB集群时都需要由Mongos来协调分发,因此,Mongos也可以看作是MongoDB集群的消息分发中心,当Mongos收到请求时,会分发到多个Shard(分片)中,在实际应用中往往有多个Mongos,防止一台Mongos出现问题导致整个系统崩溃。

Config server,存储数据库的元数据,即存储分片、路由等有关数据库的信息。每次Mongos启动时都会访问Config server 来确定配置,在实际应用中也有多个Config server,防止数据丢失。

Shard(分片)是指将数据库拆分成若干个小的数据库,分布到若干台服务器中,再由均衡器进行统一,这样提高了数据库的存储能力和计算能力。

Replica set(副本集)是通过数据冗余来实现分片数据的备份,若其中一个分片服务器宕机,可由另一台服务器提供备份数据,保证了数据的安全性。

Arbiter(仲裁者)是副本集中MongoDB 的实例,仲裁者并没有实际保存数据,需要的资源也很小。添加仲裁节点能够确保选择主节点时投票数是奇数。

当一个应用需要访问MongoDB 数据库时,首先读取配置服务器所存储的数据库相关的元数据,并备份Mongos;需要保存的数据最终是存储到Shard 分片上的;为了防止数据丢失,MongoDB 同时会给Replica set 备份数据,而仲裁者的作用是决定将数据存储到哪个节点上。

最简单的MongoDB集群模式是由1个路由服务器、1个配置服务器和3个分片数据服务器组成。由于路由服务器、配置服务器、数据服务器都是单体结构,一旦出现断电或者服务器故障,容易导致数据丢失,而没有备份数据。为了使系统更加健壮,应当为服务器建立副本集,副本集具有主从复制的功能,当一台主服务器出现故障时,副节点能够通过仲裁升级成为主节点,代替主节点继续工作。因此,为了提高系统的存储和计算效率,同时又满足稳定性要求,可以通过分片+副本集的形式来构建系统,系统架构如图2。

3.2 MongoDB集群部署与实现

从图2 的副本集+分片的架构可以看出,需要15 台服务器来部署这套系统,这样的成本很高,而且会造成资源浪费。由于路由服务器和配置服务器不需要存储大量数据,因此不需要单独的一台服务器来作为路由服务器和配置服务器,只需要将他们与数据节点服务器放在一起即可,而主节点、副节点以及仲裁节点不能放在同一硬件服务器中,否则会导致数据丢失。该数据库集群部署的参数如下:

(1)3台硬件服务器配置数据:

操作系统:Windows 7,64位操作系统;处理器i7;

安装内存:16.00GB 硬盘1000G。

(2)数据库以及GUI可视化工具

MongoDB数据库:3.6.0;GUI可视化工具:robomongo

以下演示在服务器上操作过程,由于3台服务器操作类似,现仅演示1台服务器操作命令:

(1)创建文件夹

md E:mongodatashard1masterdb

md E:mongodatashard1masterlog

md E:mongodatashard2slavedb

md E:mongodatashard2slavelog

md E:mongodatashard3arbiterdb

md E:mongodatashard3arbiterlog

(2)启动数据库

mongod --shardsvr --replSet shard1--port 28000

--dbpath E:mongodatashard1masterdb

--logpath E:mongodatashard1masterlogshard1.log

参数解释:--dbpath 数据库路径,--shardsvr 使用分片模式启动,--replSet 复制集模式启动,复制集名称为shard1。

4 MongoDB-GriFSs多媒体存储

4.1 GridFS分析

GridFS属于MongoDB的一个子模块,弥补了MongoDB存储大文件附件的短板。因为MongoDB对于文件的大小限制为16M,而实际使用中有许多业务需求会用到视频图片等附件,通常会大于16M,而GridFS就不受到文件大小的限制,下面说明其原理[2]:

GridFS分别使用两个集合来存储文件,一个集合用于存储文件的元数据,如文件名、文件类型、文件大小等信息,另一个集合存储文件的chunks,存储原理如图3所示。

传统的文件系统是将文件存储于磁盘中,在数据库中保存文件地址,而本存储系统是将文件存储在MongoDBGridFS模块中。这种做法有以下几点优势:

(1)实现restAPI使用方便;

(2)便于管理,便于备份;

(3)克服磁盘对文件存放数量的限制,存储量大;

(4)可搭建分布式存储,实现自动备份、故障迁移、负载均衡。

鉴于这些优势,GridFS在以下几个场景中进行应用:

(1)由于GridFS对于文件的大小和数量没有限制,并且可以通过增加服务器的方式来扩容服务器,因此不用当心随着城市排水设备的增多和积水点位感应器的增多所带来的照片和视频数量的限制问题。同时在拍摄视频的时候也可以不用受限于拍摄时长。

(2)对某个点位进行长时间的监控记录下的视频,使用GridFS 后,可以只访问其中的部分内容,而不需要将全部内容加载到内存中,有利于提高访问速度和内存利用率。

(3)因为GridFS是分布式的文件存储系统,所以可以使用GridFS在多个排水和应急抢险部门同时更新视频和照片,大大提高急救抢险效率。

4.2 GridFS分布式+高可用的设计

GridFS 可通过MongoDB 自身的特点搭建副本集,这是一种高可用的方案。搭建方式有以下两种:

(1)奇数个数据节点。以3个为例,即一主两从。当一个主节点宕机了,另外两个从节点会自己选出一个作为主节点。

(2)偶数个数据节点+一个仲裁节点。以3 个为例,即1主1从1仲裁。仲裁只负责推选主节点而不存放数据。如果主节点宕机了,仲裁节点会选出主节点。

GridFS可通过MongoDB自身的特点搭建分片+副本集,这是一种负载均衡+高可用的方案,可以用于大数据的存储和抗击高并发访问。分片通过Mongos进行路由。值得注意的是查询时应尽量避免跨分片查询,使用分片的情况有以下几种:

(1)当机器磁盘不够用,可以使用分片来很好地解决磁盘空间不足的问题。

(2)当单个MongoDB 不能满足写数据的性能要求,可以使用多个分片分布在不同的服务器上,从而提高整体的读写速度。

(3)使用分片还可以提高内存的存储性能,可以将大量数据存在多个分片的内存中。通过分片使用分片服务器自身的资源。

5 结语

随着城市建设越来越智能化,数据量与日俱增,应不断加强对于大数据和数据库方面的研究。本文分析了排水设备的各类数据,分析了MongoDB的建库原则,结合采集到的数据结构特点构建了排水设备数据库,并分析研究了MongoDB 的GridFS 文件存储模块,用于存储和管理积水点现场拍摄的多媒体数据,最后根据系统需要实现了MongoDB 和GridFS的集群分布式部署。

猜你喜欢

分片副本备份
上下分片與詞的時空佈局
利用状态归约处理跨分片交易的多轮验证方案①
物联网区块链中基于演化博弈的分片算法
利用云备份微信聊天记录
如何只备份有用数据而不备份垃圾数据
一种基于3 阶段实现的高性能云存储计算*
Windows10应用信息备份与恢复
面向流媒体基于蚁群的副本选择算法①
基于模糊二分查找的帧分片算法设计与实现
旧瓶装新酒天宫二号从备份变实验室