最近在研究geohash,剛好看到和HBase 的結合,所以這邊就一併筆記一下
背景:目前網路上一些基於地理位置的服務,例如,找到目前所在地周遭500公尺的咖啡站,在巨量資料的情況下,你總不希望你的使用者等一個MapReduce跑完才會知道結果吧?!
因為HBase 有低延遲(low latency)的特性,也許我們可以使用HBase來儲存此類的地理資料並解決問題。
地理位置最簡單的結構就是大家常知道的經緯度(X,Y座標),有一些地圖資料比較詳細,甚至有高度的資料(Z軸),這邊我們先不考慮這項因素,只要先考慮X,Y座標即可。
知道了資料的格式(經緯度代表一組XY座標),那我們要怎麼存到HBase裡呢? 這個就要先知道HBase Schema和Rowkey的設計。
我們先來想想最簡單的方式:把經緯度連起來當row key,其餘資訊存在column family 的欄位裡。但這會發生下列情況:
雖然台大醫院和228公園比較近,但因為我們是先排經度再排緯度,所以在硬碟上的儲存位置點,反而是京站和台大醫院在硬碟上的儲存點會比較近。同理,就算先排緯度再排經度,也會產生一樣的問題。

所以我們希望透過HBase儲存空間點位置的目標有兩個
1.希望在空間裡彼此接近的點,在硬碟上的儲存位置點也是接近的。
2.希望在回傳查詢結果給用戶端時,可以回傳最少的點。
下一章再說明要如何達成
(本資訊由HBase-搞定big data-no sql實戰 整理而出。)
文章標籤
全站熱搜
