Почему MongoDB медленно вставляет данные? - PullRequest
0 голосов
/ 17 декабря 2011

Я пытаюсь сохранить проанализированные данные в MongoDB.Я хочу хранить URL каждого реферера.В настоящее время вставка в 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

1 Ответ

0 голосов
/ 18 декабря 2011

Вы пытались измерить, сколько времени занимает выполнение каждой части?

Из того, что я вижу, единственное место, которое может быть медленным, - это ReferrerDocument.last вызов.

Сколько документов у вас в этой коллекции? У вас есть поддерживающие индексы? На какой запрос mongodb ReferrerDocument.last переводится (вы можете увидеть это в development.log. Я сам пользователь mongoid )? Как выглядит план объяснения для этого запроса?

Чтобы сделать этот запрос наиболее эффективным, вам понадобится индекс {website_url: 1, referrer_url: 1, _id: 1}

...