2017-01-11 22 views
2

查詢地理空間數據的方式目前我有以這種格式存儲我的GeoJSON的數據:最快MongoDB中

coord: [long, lat], 
    time: unix timestamp, 
    property: some property 

我想找到最接近的時間戳(LTE)最近的位置。我現在這樣做的方式是:

collection.ensureIndex({loc: "2d"}) 
    collection.find(
      {coord : { 
        $near: [xval, yval], 
        $maxDistance: 200 
        }, 
      time: { 
        $lte: time 
      } 
      }).sort({time: -1}).limit(1).toArray(function(err, queryResult) { 
    (did some return 404 and 200 here) 
} 

當數據量很小時,這是有效的。但是,隨着我的數據庫已經增加到50G +,這失敗了(總是返回404,說沒有發現任何東西),我想這是因爲我查詢數據的方式導致性能下降。我應該如何改變我的查詢/數據結構以改進並讓它再次運行?

+0

我不認爲你的查詢有什麼問題。如果你有50G以上的數據,你可能需要擴展你的後端...... – Eric

+0

@Eric你會介意擴展我的後端嗎? – acbh

+0

要麼放更多的內存和CPU或碎片你的數據庫 – Eric

回答

0

你應該首先垂直擴展你的mongodb,通過增加更多的RAM和CPU的能力,直到你到達你的下一個高原。您的下一步是通過讓MongoDB的多個實例處理數據集來水平(或分片)擴展數據庫。當然,分片可以提高數據庫的性能。你可以閱讀this article其中描述了幾乎所有的步驟來縮放mongo。