0

我們正在開發一個小工具,它允許一個人在Google Map上繪製一個多邊形,並且它會返回與所繪製的疊加層重疊的郵政編碼。我認爲這將是深入瞭解NoSQL數據庫的好時機,因爲在處理大量數據時,我已經聽到了關於性能的很棒的事情。MongoDB - 地理空間交叉表現

因此,我將美國人口普查2010年數據集中的所有ZCTA(郵政編碼製表區)形狀數據,並將其加載到MongoDB中,如下所示。示例文件:

{ "ZipCode" : 12345, 
    "Polygon" : { type : "Polygon", 
       coordinates: [[[lng1, lat1],[lng2, lat2], ... , [lngN, latN]]]}} 

我也對多邊形列設置的指標如下:最後

db.ZipCodes.ensureIndex({"Polygon" : "2dsphere"}) 

,我從谷歌多邊形點轉換成另一種GeoJSON的多邊形,並使用查詢數據$ geoIntersects如下:

db.<collection>.find({ "Polygon" : 
        { $geoIntersects : 
         { $geometry : 
         { type : "Polygon" , 
          coordinates : [[[lng1,lat1], [lng2,lat2], ... , [lngN, latN]]] 
        } } } }) 

這個偉大的工程時,覆蓋面小,但是當多跨度,比方說,一對夫婦的狀態(美國),查詢需要永遠(> 2 0分鐘!)。我怎樣才能把這個降低到更合理的響應時間?我已經索引了郵政編碼多邊形,並且因爲這就是我所要查詢的全部內容,所以我會認爲這將盡可能優化。我索引不正確?

在此先感謝!

+0

謝謝。我會研究這些選項。 – Keith

回答

2

在試圖找出在MongoDB中實現更好性能的最佳方式後,我決定嘗試使用我們現有的標準數據庫SQL Server。我想我對SQL Server的地理空間功能的低期望是沒有根據的。查詢在沒有索引的情況下在12秒鐘內運行,並且沒有像MongoDB那樣以指數方式按比例繪製更大的繪製多邊形。添加索引後,大多數查詢都在1秒範圍內。

我想我會堅持我所知道的。我真的對MongoDB抱有很高的期望,但是地理空間性能嚴重缺乏(或者如何改進它的嚴重缺乏記錄)。