2013-08-06 30 views
0

我有一個應用程序正在做一項工作,從不同的社交網絡站點彙總數據後端進程完成Java的工作很好。 其前端開發的Rails應用截止日期爲3周,對於某些分析過濾器abd報告任務還剩下幾天幾乎完成。 當我開始實施地圖縮小爲不同的國家工作了超過10萬記錄在我的本地機器工作偉大。 突然,我的同事給了我當前更新的數據庫,現在有2.7百萬條記錄,我的期望是它會運行得很好,因爲我指定日期範圍並在執行map_reduce之前過濾。我相信它會導致一組過濾器,但它不是一個例子。MongoID查詢map_reduce協會

例 我有一個查詢只顯示最後24小時裝載記錄統計

結果自帶0記錄中發現,但經過200秒,270萬的記錄談到毫秒之前.. 代碼下面的例子

filter is hash of condition expected to check before map_reduce 
map function 
reduce function 
SocialContent.where(filter).map_reduce(map, reduce).out(inline: true).entries 

請提出建議..隨着數據庫在數天內呈指數增長,在剩餘時間範圍內什麼是理想的解決方案。

回答

0

我建議你看幾個不同的事情:

  • 是否所有的數據仍然存放在內存?現在你有更多的記錄,這可能意味着MongoDB需要更頻繁地訪問磁盤。
  • M/R無法使用索引。你沒有顯示你的Map和Reduce功能,所以不可能指出錯誤。用這些函數更新問題,以及他們應該做什麼,然後我會更新答案。
  • 改爲使用聚合框架,它可以利用索引並且同時運行。這也很容易理解和調試。有關於它的信息http://docs.mongodb.org/manual/reference/aggregation/