亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5594 | 回復(fù): 1
打印 上一主題 下一主題

[MongoDB] 圖解 MongoDB 地理位置索引的實現(xiàn)原理 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-02-21 21:35 |只看該作者 |倒序瀏覽
圖解 MongoDB 地理位置索引的實現(xiàn)原理







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

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



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

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



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

01 11
00 10

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

然后再將四個小塊每一塊進(jìn)行切割,如下:



這時[4,6]點位于右上區(qū)域,右上的值為11,這樣[4,6]點的geohash值變?yōu)椋?011

繼續(xù)往下做兩次切分:





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

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

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

db.map.ensureIndex({point : "2d"}, {min : 0, max : 16, bits : 4})其中的bits參數(shù)就是劃分幾次,默認(rèn)為26次。

相關(guān)鏈接:Mongo in Flatland

論壇徽章:
0
2 [報告]
發(fā)表于 2012-02-24 17:39 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP