geohash java 距离排序_再提LBS经纬度搜索和距离排序,求更优方案

看到最近有好多人陆续收藏、关注这个问题,特来更新一下

建议使用ElasticSearch(https://elastic.co)进行LBS业务功能开发

PostGIS也是不错的

Redis新版有提供Geocoding,可以尝试一下

一直在琢磨LBS,期待可以发现更好的方案。现在纠结了。

简单列举一下已经了解到的方案:

1.sphinx geo索引

2.mongodb geo索引

3.mysql sql查询

4.mysql+geohash

5.redis+geohash

然后列举一下需求:

1.实时性要高,有频繁的更新和读取

2.可按距离排序支持分页

3.支持多条件筛选(一个经纬度数据还包含其他属性,比如社交系统的性别、年龄)

方案简单介绍:

1.sphinx geo索引

支持按照距离排序,并支持分页。但是尝试mva+geo失败,还在找原因。

无法满足高实时性需求。(可能是不了解实时增量索引配置有误)

资源占用小,速度快

2.mongodb geo索引

支持按照距离排序,并支持分页。支持多条件筛选。

可满足实时性需求。

资源占用大,数据量达到百万级请流量在10w左右查询速度明显下降。

3.mysql+geohash/ mysql sql查询

不支持按照距离排序(代价太大)。支持分页。支持多条件筛选。

可满足实时性需求。

资源占用中等,查询速度不及mongodb。

且geohash按照区块将球面转化平面并切割。暂时没有找到跨区块查询方法(不太了解)。

4.redis+geohash

geohash缺点不再赘述

不支持距离排序。支持分页查询。不支持多条件筛选。

可满足实时性需求。

资源占用最小。查询速度很快。

------update

补充一下测试机配置:

1TB SATA硬盘。8GB RAM。I3 2350 双核四线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值