地理信息是一种特定的空间信息,无论在科学研究还是日常生活中都有广泛应用。我们通常使用计算机和相关软件对地理信息进行储存、管理、运算、分析、显示等操作。

我们对地理信息最常见的使用是导航,对地理信息最有前景的使用场景是自动驾驶。这两种场景都对地理信息的存储和使用有许多新的需求,这些需求包括对地理信息的实时更新、并发读写、版本控制、高可用和高可靠等。

当前,地理信息存储和处理方式,无论是传统方法把地理信息存放在二进制文件中, 还是把地理信息存放在传统的关系数据库里,都无法满足上面提到的新需求。而使用Amazon Aurora可以更好的满足这些新的需求。

Amazon Aurora 是一种与 MySQL 和 PostgreSQL 兼容的关系数据库,专为云而打造,既具有高端商用数据库的性能和可用性,又具有开源数据库的简单性和成本效益。

Aurora 的速度最高可以达到标准 MySQL 数据库的五倍、标准 PostgreSQL 数据库的三倍。它可以实现商用数据库的安全性、可用性和可靠性,而成本只有商用数据库的 1/10。Aurora 由 Amazon Relational Database Service (RDS) 完全托管,而 RDS 可以自动执行各种耗时的管理任务,例如硬件预置以及数据库设置、修补和备份。

下面,我们将逐步演示如何把OSM(Open Street Map)数据导入Amazon Aurora 数据库,并对地理数据做查询操作。

1. 创建Aurora数据库。

为了支持PostGIS 1.5+, 在创建Aurora数据库时,选择PostgreSQL-compatible,如下图所示:

2. 在创建好的Aurora数据库上启动PostGIS,Hstore等相关组件。PostGIS 是一个 PostgreSQL 扩展,用于存储和管理空间信息。步骤如下:

首先,使用创建数据库实例的主用户名连接到数据库实例;

然后加载PostGIS扩展,使用CREAT EXTENSION语句加载扩展。

运行下面语句:

CREATE EXTENSION hstore;

结果如下:

运行下面语句:

CREATE EXTENSION postgis;

结果如下:

运行下面语句:

CREATE EXTENSION fuzzystrmatch;

结果如下:

运行下面语句:

CREATE EXTENSION postgis_tiger_geocoder;

结果如下:

运行下面语句:

CREATE EXTENSION postgis_topology;

结果如下:

最后使用 ALTER SCHEMA 语句将所有权移交给 rds_superuser 角色。

运行下面语句:

ALTER SCHEMA tiger owner to rds_superuser;

结果如下:

运行下面语句:

ALTER SCHEMA tiger_data owner to rds_superuser;

结果如下:

运行下面语句:

ALTER SCHEMA topology owner to rds_superuser;

结果如下:

3. 下载中国的OSM(open street map)数据文件, 下载链接

为了把中国的OSM数据导入Aurora数据库,我们需要使用osm2pgsql工具,在本文中,我们 使用一台EC2 linux服务器运行osm2pgsql工具导入地理信息数据。

首先我们下载osm2pgsql源文件,

git clone git://github.com/openstreetmap/osm2pgsql.git

然后安装osm2pgsql需要的依赖库

yum install cmake gcc-c++ boost-devel expat-devel zlib-devel bzip2-devel postgresql-devel geos-devel proj-devel proj-epsg lua-devel -y

最后编译osm2pgsql工具

cd osm2pgsql-master

mkdir build && cd build

cmake .. && make && make install

运行结果如下:

4.  导入中国OSM数据

osm2pgsql ./china-latest.osm.bz2 -d OSMChina -U root -P 5432 -S ./default.style --hstore -H giscluster.cluster-ccnfhuymduul.rds.cn-northwest-1.amazonaws.com.cn  -W

其中文件china-latest.osm.bz2是步骤2下载的中国OSM数据

-d 指定了Aurora中数据库的名字

-S ./default.style是样式文件,在osm2pgsql的源文件目录里。

其他是连接数据库需要的参数,比如数据库的endpoint和用户名密码下图是osm2pgsql的导入过程截图:

我们可以看到,导入全部中国OSM数据用了603s

5.  检查Aurora中导入的中国OSM数据

数据导入成功后,数据库中会有3个新的表, 如下图:

planet_osm_point: 包含PoI(Point of Interet)信息;

planet_osm_lines: 包含道路和街道信息;

planet_osm_polygons: 包含湖泊,建筑,行政区等信息。

6.  查询在Aurora里存储的中国OSM信息

SELECT name, ST_AsText(ST_Transform(way,4326)) AS pt_lonlattext -- tags

FROM  planet_osm_point

WHERE tags @> 'cuisine=>sushi'::hstore;

你可以看到查询结果如下:

通过上面六步操作,我们把中国的OSM数据导入到了Aurora 数据库,并且可以使用SQL语句查询地理信息。使用Aurora 数据库后,地理信息数据库可以支持更大的并发量和更快的查询速度,获得更好的可用性。同时,利用Aurora完全托管的特性,数据库管理员可以省去许多繁琐的操作,例如硬件预置以及数据库设置、修补和备份。我们既得到了高端商用数据库的性能和可用性,又有开源数据库的简单性和成本效益。

本篇作者

AWS解决方案架构师,负责企业级客户的架构和云上迁移等工作。

mysql 存储地理信息_使用Amazon Aurora存储和处理地理信息数据相关推荐

  1. ceph存储原理_赠书 | Linux 开源存储全栈详解——从Ceph到容器存储

    // 留言点赞赠书我有书,你有故事么?留言说出你的存储故事留言点赞前两名,免费送此书截止日期12.27号12.30号公布名单 // 内容简介 本书致力于帮助读者形成有关Linux开源存储世界的细致的拓 ...

  2. 行存储索引改换成列存储索引_如何使用列存储索引来改善数据仓库登台环境

    行存储索引改换成列存储索引 My team and I were recently tasked with refactoring older data marts, particularly tho ...

  3. 千里眼摄像头支持对象存储吗_视频监控对象存储

    一. 中东市场,国际安防厂家活跃 Milestone.Genetec.Thales.Honeywell.Bosch.Hikivision.Dahua , Tyco, Samsung, AXIS,Pec ...

  4. 马逊s3云存储接口_使用 Amazon S3 云服务轻松实现存储

    Amazon Simple Storage Service (S3) 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片.视频.音乐和文档. S3 提供一个 RESTful A ...

  5. mysql 存储视频_数据库中怎样存储视频?谢谢各位

    root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i".jp ...

  6. 服务端mysql数据存储设计_服务端开发指南与最佳实战 | 数据存储技术 | MySQL(03) 如何设计索引...

    改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. 基本索引类型 MySQL 索引可以 ...

  7. mysql中性别_在数据库中存储性别(性别)

    8 个答案: 答案 0 :(得分:164) 已经有ISO标准;无需发明自己的方案: 根据标准,该列应该被称为"Sex",而"最接近"的数据类型将是tinyint ...

  8. 树莓派存储方案_树莓派搭建seafile存储重要文件

    谈到NAS,我个人需求主要是: 下电影以及看电影 保存重要文件,例如:照片,工作文档. 然而大多数人一提到NAS,就会想上X86架构,比如最近很火的蜗牛星际. 然而X86架构功耗高,噪音大,用作NAS ...

  9. 怎么修改存储路径_修改桌面文件默认存储位置的正确方式及注意事项

    之前写了篇关于如何修改桌面文件默认存储位置,许多人在修改后出现各种问题,今天重新来讲解一下关于修改桌面文件默认存储位置的正确方式及注意事项. 第一步.在E盘下创建一个文件夹,随便取个名字,或者默认为[ ...

最新文章

  1. shell中if [ -e/d/f ..... ]的解释
  2. CORS跨域实现思路及相关解决方案
  3. AngularJS之手动加载模块app和controller
  4. 【转】语音、音频的思考
  5. python 笔记:爱因斯坦求和 einsum
  6. 经典面试题:将有序数组、有序链表转换成平衡二叉树
  7. 从壹开始 [vueAdmin后台] 之三 || 动态路由配置 项目快速开发
  8. Android Studio 项目断开SVN连接
  9. python关键词提取_python对文件中的关键词查找替换,实现自动获取配置
  10. django 引用css失效_如何使用Python中Django模板?
  11. 计算机硬件系统设计原理 pdf,C1-1计算机硬件系统设计.pdf
  12. VirtualBox安装Ubuntu教程
  13. 关于GTPv1协议解析
  14. golang知识图谱
  15. 网站实现扫描二维码关注微信公众号,实现自动登陆
  16. 3、低功耗蓝牙(BLE)配对和解绑
  17. 【网络编程开发系列】好端端的MQTT-broker重新部署后居然出现TLS握手失败了
  18. 从诚信的角度探索现代远程教育中的教与学
  19. 关于linux下的嵌入式文件系统以及flash文件系统选择(转)
  20. 下面给朋友们推荐100首可以在婚礼上使用的音乐

热门文章

  1. vue 表单验证按钮事件交由父组件触发
  2. Java5的 线程并发库
  3. Linux常用命令——paste
  4. OpenCV + python 实现人脸检测(基于照片和视频进行检测)
  5. P1338 末日的传说
  6. Android屏幕信息获取
  7. java 科学计算法
  8. js的arguments_javascript
  9. jquery 批量上下移动
  10. 如何有效利用SD-WAN改善网络性能?