吴 飞
(福建省基础地理信息中心,福建福州 350003)
基于MongoDB的LBS数据管理系统关键技术研究
吴 飞
(福建省基础地理信息中心,福建福州 350003)
首先介绍基于位置的服务(LBS)系统的主要构成,论述数据管理系统的重要意义,指出数据管理系统建设中需要重点解决的关键问题,提出采用MongoDB作为文件级别的存储来解决数据存储查询的技术瓶颈,并给出具体的设计思路,最后证明了基于该技术路线的数据管理系统的可行性。
LBS;MongoDB;数据管理
基于位置的服务(location based service,LBS)是社会信息化发展的趋势,是测绘、卫星导航、GIS和无线通信网络等技术相集成的产物。LBS近年来发展较快,在交通、购物、旅游、应急、物流等多个行业得到广泛应用。LBS系统一般由移动终端、位置服务核心子系统、数据存储管理子系统、监控管理应用端等四大部分组成。其中,数据管理系统负责存储上行的终端位置数据,并提供数据检索功能,数据管理系统关系到LBS平台的稳定性和可扩展性[1-3]。
终端位置数据典型特征是数量巨大但占用字节并不多,普通的位置数据大小不超过200 Byte。假设一个终端每10 s汇报一个报文,每个终端每天汇报超过8600个报文,假设LBS平台设计10万并发量,则每天汇报的报文数量将超过6亿条。如果每个报文都存在数据库中作为一条记录,即使按月分区来建立数据库表,10万台终端每月上传的报文也将产生每张260亿条记录的表,显然如此巨大数量的报文是不适合用关系数据库进行存储的[4]。
MongoDB是基于分布式文件存储的数据库开源项目,属于NoSQL数据库的一种。MongoDB是一个可扩展、高性能的数据库,它的主要特性有:①模式自由,支持动态查询、完全索引;②面向文档存储,易存储对象类型的数据,包括文档内嵌对象及数组,支持二进制数据及大型对象(如照片和视频);③支持复制和故障恢复,提供主—从、主—主模式的数据复制及服务器之间的数据复制;④自动分片以支持云级别的伸缩性,支持水平的数据库集群,可动态添加服务器[5-9]。
MongoDB适合实时的插入、更新与查询,并具备应用程序实时数据存储所需的复制及高度伸缩性。因此,在LBS数据管理系统设计中,终端的关键业务数据使用关系数据库来存储,而终端位置汇报产生的终端位置则采用MongoDB作为文件级别的存储,可较好解决高并发定位数据存储瓶颈问题。
1.总体存储结构设计
LBS数据管理系统由两部分组成:一部分是运行在后台采用MongoDB集群的终端位置数据存储部分,由若干台数据库服务器组成;另一部分是基于MongoDB的终端位置数据读写接口,与位置服务核心子系统部署在一起,响应各移动终端的终端位置查询与终端位置写入请求[4]。总体存储结构如图1所示。
图1 总体存储结构
2.终端位置数据存储设计
终端位置存储设计需要考虑以下3个方面[5]:
1)平衡用户的读写请求,避免单个数据库服务器的读写压力过大,影响性能。
2)提供冗余,避免一个数据库服务失效时,导致系统不可用,或是数据丢失。
3)随着移动终端的不断加入,数据不断膨胀,需要考虑整个存储系统的水平扩展功能。
为此,在进行终端位置数据存储设计时需要充分考虑到数据库集群及数据分片设计。终端位置数据存储设计主要包括以下三点:
(1)MongoDB集群配置
MongoDB的集群配置提供了负载均衡和冗余设计,包括3种服务[7]:
1)Slice Server(分片服务):用于存储实际的数据块,实际生产环境中一个分片服务角色可由几台机器组成一个复本集合,以防止主机单点故障。
2)Config Server(元数据服务):存储集群的元数据信息,包括每个块信息。
3)Route Server(路由服务):运行MongoDB实例,客户端从前端路由服务器接入,实现透明使用。根据MongoDB的数据存储结构,终端位置数据库服务器集群设计如图2所示。
图2 服务器集群设计
存储系统配置说明如下:
1)分别在3台服务器运行一个Mongod(数据库服务实例),称为分片服务11、分片服务12、分片服务13,组成一个复本集合(Replica set1),作为集群的分片1。
2)分别在3台服务器运行一个Mongod,称为分片服务21、分片服务22、分片服务23,组成一个复本集合(Replica set2),作为集群的分片2。
3)采用3台机器,每台机器运行一个Mongod,作为3个元数据服务器。同时每台机器运行一个Mongos进程(一个自动分片模块,用于数据库集群,这个集群可以并入动态增加的机器),作为3个路由服务器,用于客户端连接。
4)应用端直接连接到路由服务器,进行数据库读写操作。写入时由路由器根据相关的配置进行负载均衡。读取时,路由器根据查询请求的关键字的范围,将查询分配到各个分片,并对返回的结果进行组合,返回给应用端。
5)服务器采用虚拟服务器,随着移动终端的增加,可扩展补充新主机,组成新的分片,以分担数据库的读写压力。
(2)集群与负载均衡设计
整个存储结构采用3个路由服务器,根据应用端的接入,由路由器从配置服务器获取相关的元数据信息,自动决定分配存储至相应分片,避免单一节点读写压力过大。组成分片的复本集合的各台机器采用主从(master-slave)配置,主主机可以读也可以写,从主机只可以读,主从主机按一定的时间隔进行同步[7-8,10]。
由于采用了复本集合的方式,即使集合中有某一台机器不能正常运转时,整个存储系统仍可正常运转。当复本集合中的主机出现故障时,路由器可以检测并将写入请求分配到其他的分片中,通过将从机器切换成主机器,可以快速恢复该分片的写入能力。
(3)数据分片设计
移动终端的终端位置数据存储时,随着时间的推移,单个的集合会变得异常庞大,需要进行合理的设计,使集群路由器可以将不同的集合分配到不同的分片中,以及对集合进行分块处理,分配到不同的分片中,以更好地发挥集群的负载均衡的功能。
数据分片设计主要包括以下两点:
1)终端位置数据集合设计
将所有的终端位置数据存储在一个集合中时,会使单个集合的数据量过于庞大,不利于管理和分配,因此设计时根据移动终端的ID范围,将所有的终端位置数据划分到不同的集合中,由MongoDB的路由决定每个集合的存储分配。具体的集合划分见表1(ID以手机号码分段为例)。
表1 集合设计
2)集合分片设计
随着某一移动终端ID段的集合的数据不断增大,需要对集合进行分块处理,以更好地发挥集群的功能。将存储在MongoDB数据库中的集合进行分片需要选定分片关键字,集群利用分片关键字对文档进行分片,分配到不同的数据库服务器。对待写入的文档对于分片关键字的选定直接决定了集群中数据分布是否均衡、集群性能是否合理。分片关键字要求能够建立唯一索引。
根据移动终端位置数据的特点,分片关键字设置为由移动终端的ID与移动终端位置段起点时间共同组成。采用这种方式,可以保证关键字的唯一,并可使终端位置段记录平均分配到不同的分块中,从而更好地发挥集群的性能。
3.终端位置数据读写设计
终端位置数据读写设计主要包括以下两点:
(1)服务器端缓存
由于终端位置是逐点提交的,如果逐点即时写入数据库中,将产生大量的数据库输入/输出(I/O)操作,影响数据库的性能。为此,在服务器端建一个缓冲区。基本思想是预估(由应用层事先统计)同时在线的移动终端的数量,预先构造内存块列表和移动终端ID的列表,为各移动终端分配缓存,用于存储终端位置点串数据,将在线的移动终端上行位置数据按用户ID分组,保存在分配的内存块中,当分配的内存块满的时候,转换成MongoDB的文档。为提高内存的利用效率,采用定期刷新机制,将内存中的终端位置点写入数据库,同时回收较长时间离线的移动终端占用的缓存块。
在终端位置查询时,根据查询的ID和时间范围,除了从数据库中查询命中的记录以外,若缓存中存在满足条件的终端位置点,也要与查询结果合并计算,返回给移动终端。采用服务器端缓存设计,根据采用的缓存块的大小,采用该方法可以将数据库写操作减小到原来的几十分之一,甚至百分之一,从而有效减少数据库写操作。另外,由于终端位置读取也可以一次读取若干个终端位置点,也可在较大程度上减小数据库的读操作。服务器端缓存设计如图3所示。
图3 服务器缓存设计
(2)终端位置I/O流程
根据服务器端终端位置缓存设计,终端位置I/ O操作的流程如下:
1)终端位置点写入操作流程
当接收移动终端上传的终端位置点,使用终端位置数据写入方法。终端位置数据写入方法查找或分配新的终端位置缓存块,将终端位置点放入缓存块中。当缓存块满时,转换成 MongoDB要求的BSON格式,连接到路由服务器,写入数据库。
2)终端位置段读取操作流程
接收 LBS应用的查询请求,根据查询的终端ID,以及查询的终端位置段的时间范围,连接到路由服务器,查询满足条件的终端位置段,转换为系统定义的格式。若查询时间包括当前时间,从缓存块中查询当前的终端位置点,与数据库查询结果合并,返回给应用端。
笔者用LoadRunner测试了基于以上思路建设的数据管理系统终端位置汇报的性能,在10 000个终端并发下的测试结果见表2。
表2 压力测试
具体结果如图4、图5所示。
图4 事务平均相应时间
测试结果表明,并发操作中CPU占用率未超过60%,符合正常要求;测试结果与服务器硬件配件有一定关系,服务器配置高原则上性能更强;通过压力测试证明基于MongoDB的数据管理系统满足LBS系统运行需求。
图5 资源利用率
[1] 刘凯,林克正.基于3G网络移动设备位置服务的应用[J].信息技术,2007(12):63-65.
[2] 刘铁健,李瑞涛,吕彬,等.我国LBS产业发展的现状分析[J].测绘与空间地理信息,2006,29(3):7-8.
[3] 王春.3G时代位置服务技术研究[J].通信技术,2010 (5):167-169.
[4] 曹振臻,肖扬.分布式智能交通系统数据管理与处理平台设计[J].信息技术,2005(12):1-6.
[5] 杨磊.基于NoSQL数据库的结构化存储设计与应用[J].科技风,2011(18):103.
[6] 王光磊.MongoDB数据库的应用研究和方案优化[J].中国科技信息,2011(20):93-94.
[7] 兰小机,徐齐行,敖杰刚.MongoDB环境下SaaS多租户体系模型研究[J].测绘通报,2012(10):25-27,31.
[8] 师德清.基于MongoDB的文件服务器集群系统的设计研究[J].信息与电脑:理论版,2012(10):53-54.
[9] 谢华成,范黎林.云环境下海量非结构化信息存储技术探究[J].制造业自动化,2012,34(8):28-30.
[10] 刘艳俊,敖杰刚,徐齐行.基于 MongoDB云计算下GML分布式集群环境搭建研究[J].测绘标准化,2012,28(1):5-7.
Key Technology Research of LBS Data Management System Based on MongoDB
WU Fei
P208
B
0494-0911(2014)07-0121-04
2013-04-26
吴 飞(1981—),男,安徽太湖人,硕士,高级工程师,研究方向为GIS开发与应用。
吴飞.基于MongoDB的LBS数据管理系统关键技术研究[J].测绘通报,2014(7):121-124.
10.13474/j.cnki.11-2246.2014.0242