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

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

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

当前,地理信息存储和处理方式,无论是传统方法把地理信息存放在二进制文件中, 还是把地理信息存放在传统的关系数据库里,都无法满足上面提到的新需求。而使用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,如下图所示:

675f2e89423077670d58587210a1822b.png

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

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

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

运行下面语句:

CREATE EXTENSION hstore;

结果如下:

628e7acf7aa7319b39fe7a761cfa37c1.png

运行下面语句:

CREATE EXTENSION postgis;

结果如下:

a8371f9a7ecf8b97fb4df09ad479e1ee.png

运行下面语句:

CREATE EXTENSION fuzzystrmatch;

结果如下:

1ef5881638131a52f28faf2f7ba8a968.png

运行下面语句:

CREATE EXTENSION postgis_tiger_geocoder;

结果如下:

b25101d8df469ff0e077d2cefb3918f9.png

运行下面语句:

CREATE EXTENSION postgis_topology;

结果如下:

92d4065833a95d91909494d8265c1419.png

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

运行下面语句:

ALTER SCHEMA tiger owner to rds_superuser;

结果如下:

4c7039aeb49cb1998a09e4e01c6a0878.png

运行下面语句:

ALTER SCHEMA tiger_data owner to rds_superuser;

结果如下:

f2bdd6874384af86be98ba83d581cfae.png

运行下面语句:

ALTER SCHEMA topology owner to rds_superuser;

结果如下:

24a15ce2f32c2f538f4a7395caf7304b.png

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

运行结果如下:

ae4a5d6f8f8c221baa5f26deede73047.png

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的导入过程截图:

39d0dd71dbb905743285adb102a7bfba.png

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

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

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

c19c0da37a680e1178e4c0dc702201b4.png

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;

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

74437ff2419d07962b0a28cb17a9b676.png

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

本篇作者

cee465ad7f292b3cbe1be1e1dc4a3f36.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库支持存储过程,存储过程是一种预先编写好的程序,可以被多次调用和执行,使得数据库应用程序的开发更加灵活和高效。下面是MySQL数据存储过程的创建和调用方法: 1. 创建存储过程 在MySQL数据库中创建存储过程需要使用“CREATE PROCEDURE”语句,语法如下: ``` CREATE PROCEDURE procedure_name([IN | OUT | INOUT] parameter_name parameter_type) BEGIN -- 存储过程体 END; ``` 其中,procedure_name 是存储过程的名称,parameter_name 是存储过程的参数名称,parameter_type 是存储过程的参数类型,可以是任意的MySQL数据类型,例如VARCHAR、INT、DOUBLE等。存储过程体可以包含SQL语句、流程控制语句、变量声明等。例如,下面是一个简单的存储过程: ``` CREATE PROCEDURE get_user_info(IN user_id INT) BEGIN SELECT * FROM users WHERE id = user_id; END; ``` 以上存储过程名为get_user_info,接受一个IN类型的参数user_id,返回对应用户的信息。 2. 调用存储过程 在MySQL数据库中调用存储过程需要使用“CALL”语句,语法如下: ``` CALL procedure_name(parameter_value); ``` 其中,procedure_name 是存储过程的名称,parameter_value 是存储过程的参数值,可以是任意的MySQL数据类型,例如字符串、整型等。例如,调用上述的get_user_info存储过程可以使用以下语句: ``` CALL get_user_info(1001); ``` 以上语句将会返回id为1001的用户信息。 综上所述,MySQL数据存储过程的创建和调用方法比较简单,可以提高数据库应用程序的开发效率和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值