APP下载

分布式下MongoDB对激光点云的存储和处理研究

2017-02-27徐旭东文瑞洁

计算机应用与软件 2017年2期
关键词:分片空间数据哈希

徐旭东 郭 瑞 文瑞洁

(北京工业大学计算机学院 北京 100124)

分布式下MongoDB对激光点云的存储和处理研究

徐旭东 郭 瑞 文瑞洁

(北京工业大学计算机学院 北京 100124)

近年来,激光点云数据的应用急剧增加,如何对其进行高效存储和快速处理成为当前的一个重要研究方向。点云数据包含着丰富的地理信息,属于空间数据范畴。传统的关系型数据库对海量空间数据的存储和处理相对薄弱,分布式环境下非关系型数据库的应用为此提供了一个新的研究视角。Sharding技术是数据库水平扩展的一种解决方案,在分布式环境下搭建MongoDB的Sharding集群,通过范围分片和哈希分片对大量激光点云数据进行分布式存储、空间查询和MapReduce运算测试,充分体现了分布式下MongoDB在空间数据的存储和处理方面的巨大优势。

分布式 MongoDB 激光点云 Sharding集群 范围分片 哈希分片

0 引 言

随着信息技术的发展,数字城市的建设已成为一个势不可挡的趋势,GIS(Geographic Information System)在各行业的应用越来越广泛。近几年,激光点云数据飞速增长,通过机载、车载及地面激光扫描系统所获取的点云数据已达到了TB,甚至PB级[1],如何对其进行高效安全存储和快速简单处理已成为当前的一个重要研究方向。

激光点云数据包含着丰富的地理信息,如三维坐标、颜色、反射强度等,属于空间数据范畴。传统关系型数据库的优势表现在解决数据的完整性和一致性问题上,但其对空间数据的存储和处理相对薄弱[2]。而非关系型数据库能够在分布式环境下处理大量半结构化和非结构化数据,并在空间数据的存储和处理方面表现出巨大优势[3]。

MongoDB作为一种典型的非关系型数据库,是一个高性能、开源、模式自由的文档型数据库,它支持的数据结构是Bson,一种类似Json的二进制存储格式[4]。MongoDB的查询语言十分强大,几乎可以实现类似关系型数据库单表查询的所有功能,还对数据提供了完整的索引支持,对空间索引的原生支持使其在处理地理位置信息方面具有显著优势[5]。另外,MongoDB还提供了数据冗余、故障转移、自动分片等功能。所以,本文通过范围分片和哈希分片的Sharding集群对大量激光点云数据进行分布式存储、空间查询和MapReduce运算测试,充分体现了分布式环境下MongoDB在空间数据的存储和处理方面的巨大优势。

1 MongoDB的Sharding集群

Sharding可以将数据水平切分到不同的物理节点,突破单节点服务器的I/O能力限制,是数据库水平扩展的解决方案[6]。MongoDB拥有强大的自动分片功能,可以动态增加删除节点、平衡负载,并且提供故障转移功能[7]。MongoDB的Sharding集群主要包括三部分:Shard节点、config节点和mongos节点,每种类型的节点都可以由一个或多个计算机组成。

Shard节点用来存储实际数据,可以是单个的mongod实例,也可以是一个Replica Set(副本集配置)[8]。config节点中存放元数据,包括集群配置信息以及数据的位置。mongos节点的主要作用是数据路由,本身不保存任何数据和元数据,可以使用客户端和驱动进行访问。为了确保Sharding集群具有数据备份、自动故障转移和恢复能力,本文中的每个Shard节点都是一个Replica Set。Replica Set+Sharding的环境架构如图1所示。

图1 Replica Set+Sharding的环境架构

2 Sharding集群的性能测试

由于实验条件限制,本文借助虚拟机(Vmware Workstation 11 )搭建Sharding集群,三台服务器(Server A、Server B、Server C)统一配置,内存为1 GB,硬盘为20 GB,操作系统为Ubuntu14.04,数据库为mongodb-linux-x86_64-2.4.6。使用Shell命令和JavaScript脚本语言分别进行范围分片和哈希分片对大量激光点云数据的存储和处理性能测试。

2.1 激光点云数据的分布式存储

Sharding集群是在集合(Collection)层面进行分布存储数据的,为将一个集合的数据进行分片,首先需要选择一个合适的片键(Shard Key)[9],然后使用范围分片或哈希分片将数据切分成多个数据块(Chunk)并分布在Shard节点上,MongoDB2.4以上的版本支持基于哈希的分片。激光点云数据的格式如下:

{

″_id″ : ObjectId(″56a9dc5676d3f3b90a1cf6f4″),

″X″ : 292730.639,

″Y″ : 180802.526,

″Z″ : 19.655,

″R″ : 36,

″G″ : 74,

″B″ : 145,

″Loc″ : [

178.78388,

55.05072

]

}

_id是MongoDB自动生成的,每个集合都有唯一的_id值,来确保集合里面每个文档都能被唯一标识。X、Y、Z和R、G、B分别是点云数据的三维坐标和颜色信息,Loc是由精度和纬度组成的数组对象,表示点云数据的地理位置信息。本文分别对1、5、10、50、100 万条激光点云数据进行分布式存储,选择_id字段作为片键,设置数据块大小为1 MB,范围和哈希分片的数据分布情况如图2所示。

图2 范围和哈希的数据分布情况

由图2可知,范围分片导致数据分布不均,在数据量较小的情况下,会出现某个节点不存储数据的情况。哈希分片可以保证数据在各个节点分布基本均匀,虽然每个节点的数据量不是完全相同,但其差距始终控制在一定范围内。哈希分片也是基于范围的,只是将指定的片键散列成一个长整型作为最终的片键。

2.2 激光点云数据的空间查询

近几年移动终端迅速普及,基于地理位置的服务LBS(Location Based Service)应用越来越广泛,比如查找附近的人或物(餐厅、酒店、电影院、KTV等),如何处理LBS应用中的地理位置信息成为关键的技术问题[10]。MongoDB原生地支持空间索引,可直接用于位置距离的计算和查询,在地理位置信息处理方面具有明显优势。

MongoDB的地理空间索引包括2d和2dsphere索引,分别用于查询平面和球面上的点[11]。本文使用2d索引,分别对1、5、10、50、100 万条激光点云数据进行空间查询,通过geoNear函数查询距离集合中第一个点最近的10个点。范围和哈希分片的geoNear查询时间对比情况如图3所示。

图3 范围和哈希的geoNear查询时间对比

由图3可知,Sharding集群可以在几秒内对百万条激光点云数据进行空间查询,说明MongoDB在地理位置信息处理方面具有明显优势。MongoDB通过Geohash算法将经纬度信息转换成可排序、可比较的字符串编码[12],使用常见的B+ Tree索引结构来提高空间查询效率。空间查询效率与激光点云数据在各个节点的分布情况密切相关。哈希分片中数据分布比较均匀,随着数据量的增长,其查询时间呈稳定增长趋势,范围分片中数据分布不均,导致10 万条数据查询时间比5 万条多的情况发生。在数据量较大的情况下,范围分片的查询效率比哈希分片高。

2.3 激光点云数据的MapReduce运算

MapReduce是一种便于分布式处理的计算模型,将输入的大量数据分解后,通过多台服务器进行并行运算,从而提高数据处理的效率[13]。MongoDB提供的MapReduce框架是一种强大的数据聚合工具,相当于关系型数据库中的Group By,需要实现Map和Reduce函数。本文分别对1、5、10、50、100 万条激光点云数据进行MapReduce运算,统计R属性在区间[0, 255]中的单一整数对应的数据量。JavaScript脚本语言如下:

db.runCommand(

{mapreduce: ″p10000″,

map: function () { emit(this.R, 1); },

reduce: function (key, values) { return Array.sum(values); },

out: ″mrp10000″ ,

sort:{R:1}

}

)

参数mapreduce和out的值分别代表要操作的目标集合和统计结果存放的集合。map函数调用emit(key, value)来遍历集合中的所有记录,将输出的key与value传递给reduce函数进行处理。参数sort表示对目标记录进行排序,是否进行排序对运算效率有一定的影响。哈希分片中对激光点云数据的MapReduce运算时间对比如图4所示。

图4 是否排序的MapReduce运算时间对比

由图4可知,Sharding集群在十几秒内实现了对百万条激光点云数据的MapReduce运算,说明分布式环境下MongoDB可以对大量激光点云数据进行高效处理。对点云数据进行排序可以在一定程度上提高MapReduce的运算效率,优化数据分析的性能。如果处理未排序的输入数据,MR引擎几乎没有机会在RAM中进行reduce运算,它只能通过一个临时的集合将数据写回磁盘,然后顺序读取并进行reduce运算。

3 结 语

激光点云数据包含着丰富的地理信息,属于空间数据范畴。分布式环境下非关系型数据库的应用为海量空间数据的高效存储和快速处理提供了解决方案。本文通过范围分片和哈希分片的Sharding集群对大量激光点云数据进行分布式存储、空间查询和MapReduce运算测试,充分体现了分布式环境下MongoDB在空间数据的存储和处理方面的巨大优势。下一步工作将通过机器学习算法,结合MongoDB的高效存储优势和Hadoop强大的并行计算能力来挖掘海量激光点云数据的实用价值和社会价值。

[1] 张蕊,李广云,王力,等.基于HDFS的海量激光点云数据分块存储方法研究[J].测绘通报,2014(3):21-24.

[2] 陈锦伟.基于MySQL的空间数据库关键技术研究[D].江苏:南京邮电大学,2013.

[3] 卢冬海,何先波.浅析NoSQL数据库[J].中国西部科技,2011,10(2):14-16.

[4] 王光磊.MongoDB数据库的应用研究和方案优化[J].中国科技信息,2011(20):93-96.

[5] 张恩,张广弟,兰磊.基于MongoDB的海量空间数据存储和并行[J].地理空间信息,2014,12(1):46-49.

[6] 冯大辉.开源数据库Sharding技术[J].程序员,2008(7):92-93.

[7] 周炜.云环境下提升MongoDB自动分片性能研究[J].科技创新导报,2013(29):22-23.

[8] 梁海.MongoDB数据库中Sharding技术应用研究[J].计算机技术与发展,2014,24(7):60-67.

[9] 姚林,张永库.NoSQL的分布式存储与扩展解决方法[J].计算机工程,2012,38(6):40-42.

[10] 庄逸众.基于LBS移动服务框架设计与实现[D].北京:北京邮电大学,2013.

[11] 张广弟.分布式环境下海量空间数据的存储和并行查询技术研究[D].江西:江西理工大学,2012.

[12] 金安,程承旗,宋树华,等.基于Geohash的面数据区域查询[J].地理与地理信息科学,2013,29(5):31-35.

[13] 李成华,张新访,金海,等.MapReduce:新型的分布式并行计算编程模型[J].计算机工程与科学,2011,33(3):129-135.

RESEARCH ON STORAGE AND PROCESSING OF MONGODB FOR LASER POINT CLOUD UNDER DISTRIBUTED ENVIRONMENT

Xu Xudong Guo Rui Wen Ruijie

(CollegeofComputerScience,BeijingUniversityofTechnology,Beijing100124,China)

In recent years, the application of laser point cloud data has increased drastically. How to efficiently store and fast process the data becomes an important research direction at present. Point cloud data contains a wealth of geographic information, belonging to the spatial data category. Since traditional relational databases are relatively weak in storage and processing of massive spatial data, the application of non-relational databases provides a new perspective of study. Sharding technology is a solution for database level extension. In this paper, Sharding cluster for MongoDB is established under distributed environment, while distributed storage, spatial query and MapReduce operation test for numerous laser point cloud data will be implemented through range-based sharding and Hash-based sharding. The results completely reflect huge advantages of MongoDB under distributed environment in storage and processing for spatial data.

Distribution MongoDB Laser point cloud Sharding cluster Range-based sharding Hash-based sharding

2016-02-20。国家自然科学基金项目(41371434)。徐旭东,副教授,主研领域:数据挖掘,大数据的组织和处理。郭瑞,硕士生。文瑞洁,硕士生。

TP3

A

10.3969/j.issn.1000-386x.2017.02.012

猜你喜欢

分片空间数据哈希
上下分片與詞的時空佈局
降低跨分片交易回滚概率的多轮验证方案
基于特征选择的局部敏感哈希位选择算法
哈希值处理 功能全面更易用
文件哈希值处理一条龙
GIS空间数据与地图制图融合技术
基于模糊二分查找的帧分片算法设计与实现
通用导弹雷达罩曲面分片展开系统的开发
巧用哈希数值传递文件
网格化存储的几项关键技术分析