<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    圖解 MongoDB 地理位置索引的實現原理(轉)

    地理位置索引支持是MongoDB的一大亮點,這也是全球最流行的LBS服務foursquare 選擇MongoDB的原因之一。我們知道,通常的數據庫索引結構是B+ Tree,如何將地理位置轉化為可建立B+Tree的形式,下文將為你描述。

    首先假設我們將需要索引的整個地圖分成16×16的方格,如下圖(左下角為坐標0,0 右上角為坐標16,16):

     

    單純的[x,y]的數據是無法建立索引的,所以MongoDB在建立索引的時候,會根據相應字段的坐標計算一個可以用來做索引的hash值,這個值叫做geohash,下面我們以地圖上坐標為[4,6]的點(圖中紅叉位置)為例。

    我們第一步將整個地圖分成等大小的四塊,如下圖:



    劃分成四塊后我們可以定義這四塊的值,如下(左下為00,左上為01,右下為10,右上為11):

    01 11
    00 10

    這樣[4,6]點的geohash值目前為 00

    然后再將四個小塊每一塊進行切割,如下:



    這時[4,6]點位于右上區域,右上的值為11,這樣[4,6]點的geohash值變為:0011

    繼續往下做兩次切分:




    最終得到[4,6]點的geohash值為:00110100

    這樣我們用這個值來做索引,則地圖上點相近的點就可以轉化成有相同前綴的geohash值了。

    我們可以看到,這個geohash值的精確度是與劃分地圖的次數成正比的,上例對地圖劃分了四次。而MongoDB默認是進行26次劃分,這個值在建立索引時是可控的。具體建立二維地理位置索引的命令如下:

    db.map.ensureIndex({point : "2d"}, {min : 0, max : 16, bits : 4})

    其中的bits參數就是劃分幾次,默認為26次。










     

    posted on 2011-11-25 17:19 胡鵬 閱讀(574) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2011年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV噜噜一区二区三区| 亚洲一区二区三区AV无码| 亚洲国产av美女网站| 永久黄色免费网站| 亚洲欧洲日本精品| 最新欧洲大片免费在线| 成人区精品一区二区不卡亚洲| 免费无码精品黄AV电影| 亚洲无吗在线视频| 国产高清视频在线免费观看| 最近最新高清免费中文字幕| 亚洲电影免费在线观看| 美女视频黄a视频全免费网站色窝| 亚洲成a人片在线观看无码| 日韩中文字幕免费视频| 日本久久久久亚洲中字幕| 免费人成在线观看69式小视频| 精品亚洲国产成人| 免费A级毛片无码A| 免费无码又爽又刺激网站直播 | 亚洲精品一级无码中文字幕 | 精品一区二区三区免费毛片爱| 久久久久亚洲av无码专区导航| 波多野结衣免费在线| 亚洲av无码日韩av无码网站冲| 国内精品99亚洲免费高清| 51精品视频免费国产专区| 亚洲性无码AV中文字幕| 外国成人网在线观看免费视频| 亚洲卡一卡2卡三卡4麻豆| 国产成人免费手机在线观看视频 | 日本免费网站观看| aa毛片免费全部播放完整| 97se亚洲综合在线| 国产美女被遭强高潮免费网站| 99免费在线视频| 亚洲成av人片在www鸭子| 国产av无码专区亚洲国产精品 | 国产禁女女网站免费看| 中文成人久久久久影院免费观看| 亚洲精品国产福利在线观看|