讀古今文學網 > MongoDB實戰 > 附錄E 空間索引 >

附錄E 空間索引

隨著智能移動設備的增長,對基於位置服務的需求正穩步提升。要構建這些與位置相關的應用程序,數據庫需要能索引並查詢空間數據。這些特性很早就加入了MongoDB的線路圖,雖說MongoDB的空間索引(spatial indexing)還沒有達到PostGIS這種完整的功能,但已經可以支撐許多流行站點的位置查詢了。1

1. 其中最著名的就是Foursquare(http://foursquare.com)。從http://mng.bz/rh4n可以瞭解到更多Foursquare使用MongoDB的情況。

正如其名所示,空間索引針對表示位置的數據進行了優化。在MongoDB中,這類數據通常表示為地理坐標系中的經度和緯度,其上的空間索引允許基於用戶的位置進行查詢。例如,你有一個集合,其中包含了紐約城(New York City)中每家餐廳的菜單數據和坐標,有了餐廳位置的索引,你就可以查詢數據庫,找到離布魯克林大橋(Brooklyn Bridge)最近的提供魚子醬的餐廳。

而且,空間索引器足夠通用,足以適用於地球坐標以外的場景。也就是說,你甚至可以用它來索引二維坐標平面或者是火星上的位置。2無論什麼樣的場景,空間索引都相對容易構建與查詢。此處我會描述如何構建空間索引、可執行的查詢的範圍,以及一些內部設計細節。

2. 前者有一個很好的例子——WordSquared(http://wordsquared.com),這是一個類似Scrabble的遊戲,使用了MongoDB的空間索引對棋盤上的格子進行查詢。