再提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 雙核四線程線程

相關文章
相關標籤/搜索