2011-12-17 126 views
0

我試圖將解析的數據保存到MongoDB中。我想存儲每個引薦網址。目前需要花費很多時間才能插入到MongoDB中。爲什麼MongoDB緩慢插入數據?

class ReferrerDocument 
    include MongoMapper::Document 
    key :website_url, String 
    key :referrer_url, String 
    key :full_referrer_url, String 
    key :count_of_appearance, Integer, :default => 1 
    key :current_time, Time 
    timestamps! 

    def self.save_referrer_info(website_url, referrer_url, full_referrer_url, current_time) 
     referrer_document = ReferrerDocument.last(:website_url => website_url, 
               :referrer_url => referrer_url, 
               :order => :id.asc) 
     if(referrer_document.nil?) 
     ReferrerDocument.create(:website_url => website_url, 
           :referrer_url => referrer_url, 
           :full_referrer_url => full_referrer_url, 
           :last_seen_at => 0, 
           :current_time => current_time) 
     else 
     count = referrer_document.count_of_appearance += 1 
     last_seen_at = referrer_document.current_time.utc 
     ReferrerDocument.create(:website_url => website_url, 
           :referrer_url => referrer_url, 
           :full_referrer_url => full_referrer_url, 
           :last_seen_at => last_seen_at, 
           :current_time => current_time, 
           :count_of_appearance => count) 
     end 
    end 
end 

回答

0

你嘗試實際測量每個部分需要多長時間來執行呢?

從我看到的情況來看,唯一可能很慢的地方是ReferrerDocument.last調用。

您在此集合中擁有多少個文檔?你有支持指數嗎? 什麼mongodb查詢ReferrerDocument.last翻譯(你可以在development.log中看到,我自己是mongoid用戶)? 解釋這個查詢的計劃是什麼樣的?

要讓此查詢最有效率,您需要索引{website_url: 1, referrer_url: 1, _id: 1}