mysql空間資料庫、矩形演算法、geohash
geo演算法
參考文件:
一直在琢磨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 雙核四執行緒
mysql 根據當前經緯度查詢附近門店
根據當前經緯度查詢附近門店距離 latitude 緯度 longitude 經度 為資料表欄位名 latitude 當前緯度 替換為傳入的引數即可 longitude 當前經度 替換為傳入的引數即可 計算出的 distance 距離單位為km select id,name,address,latit...
java經緯度格式轉換
在數學中,表示角度的度 分 秒分別使用 符號進行表示。1 60 1 60 1 3600 由上述可知度分秒轉換度的計算公式為 dd mm ss dd mm 60 ss 3600 如 113 30 10.25 113 30 60 10.25 3600 113.502847 經緯度轉換 度分秒轉度 par...
按經緯度搜尋附近的人,並按距離排序的簡單實現。
這是一種簡單的實現,資料量不大的情況下還是能滿足需求的,寫在這裡做乙份記錄。當然也希望有其他更好的方案。主要思路就是 先以自己的經緯度為中心,計算一定半徑內的方形經緯度邊界,然後用此方形經緯度邊界過濾使用者,並使用乙個計算兩點經緯度之間距離的自定義資料庫函式計算距離,然後按計算得到的距離倒序 lon...