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

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

1收藏mysql

一直在琢磨LBS,期待能够发现更好的方案。如今纠结了。redis

简单列举一下已经了解到的方案:
1.sphinx geo索引
2.mongodb geo索引
3.MySQL sql查询
4.mysql+geohash
5.redis+geohashsql

而后列举一下需求:
1.实时性要高,有频繁的更新和读取
2.可按距离排序支持分页
3.支持多条件筛选(一个经纬度数据还包含其余属性,好比社交系统的性别、年龄)mongodb

方案简单介绍:
1.sphinx geo索引
支持按照距离排序,并支持分页。可是尝试mva+geo失败,还在找缘由。
没法知足高实时性需求。(多是不了解实时增量索引配置有误)
资源占用小,速度快segmentfault

2.mongodb geo索引
支持按照距离排序,并支持分页。支持多条件筛选。
可知足实时性需求。
资源占用大,数据量达到百万级请流量在10w左右查询速度明显降低。测试

3.mysql+geohash/ mysql sql查询
不支持按照距离排序(代价太大)。支持分页。支持多条件筛选。
可知足实时性需求。
资源占用中等,查询速度不及mongodb。
且geohash按照区块将球面转化平面并切割。暂时没有找到跨区块查询方法(不太了解)。spa

4.redis+geohash
geohash缺点再也不赘述
不支持距离排序。支持分页查询。不支持多条件筛选。
可知足实时性需求。
资源占用最小。查询速度很快。.net

------update
补充一下测试机配置:
1TB SATA硬盘。8GB RAM。I3 2350 双核四线程线程