Redis Geo: Redis新增位置查詢功能

轉載於:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/144.htmlhtml

 

移動互聯網增進了人與人之間的聯繫,其中基於位置信息的服務(Location Based Service,LBS)起到很重要的促進做用。在移動互聯網的大環境下,每一個手機都變成了一個位置追蹤設備,爲人們提供了很是豐富的位置服務。不管是附近的人,仍是搖一搖等耳熟能詳的應用都須要LBS在後臺的支撐。可是,目前位置信息的使用過程當中存在諸多挑戰如相鄰計算不許確等。因爲常常面對海量數據請求,一般位置服務的計算都須要數據庫來完成,Redis Geo模塊所以而生,旨在提供精準並且穩定的位置服務。程序員

在位置服務的挑戰中,常見的是計算兩個位置是否相鄰的問題。位置信息由一個四元組構成,(經度、緯度、海拔、時間),在使用過程當中比較經常使用的是經緯度。想要進行相鄰計算,須要一個二維索引。問題是現有的基於簡單的一維索引和劃範圍搜索實現的二維索引,基本只適用於整數查詢,並不適用於經緯度這種位置的類似度查詢。意識到了這個困難,且伴隨位置服務需求日益增加的狀況,2008年Gustavo Niemeyer提出了 Geohash ,簡單來講是一個32位的編碼字符串來將位置可以編碼整合成爲可範圍查找的實體。因爲大多數數據庫都支持範圍查詢,所以位置就變得可查找和計算。原始Geohash的缺點是查詢的準確度有時較低,後續開發者又創造了52位Geohash等來知足定製化的需求。redis

NoSQL中,Mongodb對位置服務的 支持較好 ,穩定地支持了foursquare等應用。而HBase也曾推出 相關教程 支持在應用中引入位置服務。做爲優秀NoSQL數據庫的典範,Redis在位置計算方面卻略顯薄弱。爲此,意大利程序員Salvatore Sanfilippo(antirez@GitHub )維護了一個專門爲Redis增長位置計算的分支。發佈以後,得到領域內的一致承認,短短几個月收穫多達1萬3千餘個星標。在 Hacker News 上,許多程序員也表示對Redis位置查詢的功能相見恨晚,你們積極討論了Redis Geo存在的必要性,以及後續應該從性能和查詢準確性上提高的若干手段,甚至有人進一步貢獻了Redis Geo的 Docker鏡像 。數據庫

更多關於Redis Geo的細節能夠參考antirez給出的 文檔頁面 ,其中包括了Redis Geo的基本使用,例如添加經緯度、計算經緯度類似度、計算城市之間的包含關係等多種位置計算功能。antirez還進一步解釋了Redis Geo的工做原理,以及該模塊在Benchmark上運行的性能表現,每秒可達近5百萬次編解碼,能知足大部分位置服務應用的需求。性能

相關文章
相關標籤/搜索