APP下载

基于MongoDB的LBS功能-附近的人

2019-07-26谢耀辉

商品与质量 2019年4期
关键词:关系数据库数据量文档

谢耀辉

国网山东省电力公司蒙阴县供电公司 山东蒙阴 276200

基于位置服务(Locationbased Services,LBS),又称定位服务,可以通过GPS等外部方式或者电信运营商的无线通讯网络(CDMA,GSM等网络制式)获取用户的位置信息(地理坐标等),通过地理信息系统(Geographic Information System GIS)为用户提供相应服务。

位置信息数据的特点是数据庞大,但是占用空间却并不多,一个普通的GPS定位信息不到200Byte。如果某个终端每5s秒钟上传一次报文,每个终端每天上传8000次,GIS有10万并发量,那么每天将会上传超过10亿条数据。在如此大数据量的情况下,普通的关系型数据库显然是不适合做存储的,对于地理空间位置的运算,也需要更为合适的选择[1]。

1 MongoDB介绍

MongoDB是一个基于分布式文档存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

1.1 NoSQL简介

NoSQL是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

1.2 MongoDB特点

MongoDB主要有以下特点:面向集合存储,易于存储对象类型的数据、模式自由且支持动态查询、支持完全索引并包含内部对象、支持查询、支持复制和故障恢复、使用高效的二进制数据存储,包括大型对象(如视频等)、可以自动处理碎片以支持云计算层次的扩展性、支持Java,Python,C#,PHP,Ruby,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序、文件存储格式为BSON(一种JSON的扩展)、可通过网络访问等

1.3 MongoDB一些基本概念

文档:文档是一个键值(key-value)对(即BSON)。MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。

集合:集合就是MongoDB文档组,类似于 RDBMS 中的表格。集合存在于数据库中,集合没有固定的结构,这意味着你可以在集合中插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

元数据:数据库的信息是存储在集合中。

2 核心技术

2.1 整体架构设计

Lbs应用主要由两块组成:一是用于存储采集到的终端位置信息的MogoDB集群,二是响应移动终端请求的的核心子系统。总体存储结构如图1所示。

2.2 地理空间位置运算

在以亿为单位的数据量前提下,如何快速准确的根据用户位置计算出附近的人,并且按照距离排序,是一个比较复杂的问题。MongoDB提供大量的索引和查询机制,来处理地理空间信息。MongoDB提供了两种表面类型(surface types):

图1 整体架构设计

(1)球面:若要在类似地球球面上计算几何,存储球面上的地理位置数据,可以使用 2dsphere索引。根据坐标轴的顺序:经度、纬度,将你的地理位置数据存储为GeoJSON对象。GeoJSON的坐标参考系使用的是 WGS84 基准。

(2)平面:如果需要计算距离,就像在一个欧几里德平面上,你可以按照正常几何的求解思路,通过存储坐标对的形式存储地理位置数据并使用 2d 索引。

MongoDB提供下列两种地理空间索引来支持地理空间查询。

① 2dsphere:支持在球形平面上的计算、GeoJSON对象,并包括向后遗留的兼容性、复合索引。这个复合索引可以包含一个2dsphere索引字段以及一些按升序或降序建立的普通索引字段(作为 2dsphere索引的前缀或者后缀)。

② 2d:支持使用平面几何的方式计算、普通坐标对(比如,在一个平面坐标系中的点)、作为复合索引,额外索引一个键。方法是,把额外的一个键作为 2d 索引键的后缀。

对于我们的需求,在MongoDB只需一个命令即可得到所需要的结果:

db.runCommand({geoNear:"places",near:[121.4905,

31 .2646 ], num:100 })

查询结果默认将会由近到远排序,而且查询结果也包含目标点对象、距离目标点的距离等信息。

geoNear返回结果集中的dis,如果指定了spherical为true, dis的值为弧度,不指定则为度。不指定sphericial,结果中的dis需要乘以111换算为km。指定 spherical为true,结果中的dis需要乘以6371换算为km。由于geoNear是MongoDB原生支持的查询函数,所以性能上也做到了高度的优化,完全可以应付生产环境的压力。

3 结语

本文主要针对在移动终端猛增和数据量急剧增长的前提下,如何设计一个可以实时查看附近的人的功能。在用MongoDB替换传统的关系型数据库后,查询效率大大增加,而且MongoDB原生支持对地理位置信息的操作,性能上得到了很大的提升,因此做附近查询是一件很方便的事情。

猜你喜欢

关系数据库数据量文档
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
基于大数据量的初至层析成像算法优化
高刷新率不容易显示器需求与接口标准带宽
Word文档 高效分合有高招
基于单表结构的Web动态树设计与实现
探讨关系数据库设计中范式理论的教学方法
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
电力营销数据分析中的数据集成技术研究
固定资产管理系统对物流管理的促进和发展