PostGis安装部署,对比geohash

一、描述

公司现获取最近楼栋信息用的是mongdb的geohash,想对比一下postgis和geohash的性能,
首先假设我们安装好了PostgreSQL 9.5.2和Mongodb 3.0,mongodb的配置就不多少了,
他本身集成geohash功能,安装配置也很简单,解压启动就OK了,postgis 相对比较麻烦,
文献比较少,它依赖于很多插件(geos, proj,GDAL, libxml2, json-c,postgresql)

二、安装Postgis及插件

安装geos
tar -jxvf geos-3.5.0.tar.bz2

cd geos-3.5.0

./configure

make

make install
安装proj
tar -zxvf proj.4-4.9.1.tar.gz

cd proj.4-4.9.1

./configure

make

make install
安装gdal
tar -zxvf gdal-1.10.0.tar.gz

cd gdal-1.10.0

./configure

make

make install
安装libxml2
tar -zxvf libxml2-2.9.2.tar.gz

cd libxml2-2.9.2

./configure

make

make install
安装json-c
tar -zxvf json-c-json-c-0.11-20130402.tar.gz

cd json-c-json-c-0.11-20130402

./configure

make

make install
安装postgis
tar -zxvf postgis-2.1.8.tar.gz

cd postgis-2.1.8

这里要把前面装的插件全部配置上

./configure --prefix=/usr/local/postgis --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-xml2config=/usr/local/bin/xml2-config --with-geosconfig=/usr/local/bin/geos-config --with-gdalconfig=/usr/local/bin/gdal-config

make

make install

三、配置postgresql支持postgis

postgresql 创建用户
create user luhuijun with password 'xxxxxx';

grant all privileges on database customer to luhuijun;
修改配置文件,因为postgresql的权限是文件/usr/local/pgsql/data/pg_hba.conf控制的,

md5 密码认证,trust 免密码认证,这里跟mongodb又不一样,mongodb绑定的是自己的ip,内网,外网,回环(127.0.0.1),权限粒度大,内网段访问,外网段访问,本机访问, postgresql pg_hba.conf 配置文件host是访问者的ip,这个配置文件就能指定你只能访问那个数据库.加上role可以控制列的粒度,你只能访问一张表的某几个列.

把权限放大
alter role luhuijun SUPERUSER;
开启postgresql对postgis的支持
create database custome;

\c customer

CREATE EXTENSION postgis;

CREATE EXTENSION postgis_topology;

现在就可以使用postgis 了.

查询脚本

mongodb:db.runCommand({geoNear: "gps_info", spherical: true, distanceMultiplier: 6378137, near: [120.6945, 27.998], num: 1, query: {createdAt: {$gt: "2016-04-28"}}});

postgresql:select *,ST_Distance(jwd, ST_Transform(ST_GeomFromText('POINT(121.41011 31.17185)', 4326), 2163)) from building_gps_info order by jwd <-> ST_Transform(ST_GeomFromText('POINT(121.41011 31.17185)', 4326), 2163) limit 1;

Jmeter只读场景性能压测对比

在1核1GB的机器上,这是10个并发轮训100次对比结果,记录下来了平均响应时间,最小响应时间和最大响应时间.
可以看到postgresql的平均响应时间比mongodb的平均响应时间快了28倍.
在1核1GB的机器上,这是100个并发轮训100次得到的对比结果.
可以看到伴随着并发量的增长,mongodb表现出来有些疲软,有些连接的最大响应时间达到了23.385秒,
这应用应该已经慢到不能容忍了.并不像postgresql那么平稳.

应用上的优势

酒后代驾,沿黄浦江画一条不规则的线,浦东的醉汉叫车时检索不到浦西的代驾司机,因为代驾司机的小电驴穿过江隧道比较吃力;
每30秒更新一次在线司机的经纬度信息,这是mongodb和mysql的myisam引擎做不到的,因为他们锁的最小粒度是表锁,更新的这段时间用户是无法下单的,能及时反馈你叫的司机离你有多远;
精准的分析,内环中环外环,某一片区域下了多少单,及时做推广;
业务员获取订单配送距离和推荐路线,需求点到点的距离计算、路径计算;
相似路径的多个订单的批量配送,需求位置和大量传统数据符合运算;
实时配送,位置跟踪。大量位置相关信息的存取,需要有较好的性能。

把经纬度转换为Geo脚本

创建空间索引
CREATE INDEX "clean_cinema_data_idx" ON "public"."clean_cinema_data" USING gist(jwd);
–动态修改经纬度脚本
select 'update clean_cinema_data set jwd=ST_GeomFromText(''point('||longitude||' '||latitude||')'',4326) where id='''||ID||''';' from clean_cinema_data ;
查看效果
select count(1) from clean_cinema_data where jwd is not null;

 

转载于:https://my.oschina.net/u/2603867/blog/1842574

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值