встроить против ссылки на больших наборах mongoDB (рубин)

Встроенный против ссылки

Я ищу самый быстрый способ поиска связанного сообщения электронной почты в документе информационного бюллетеня. До сих пор я использовал MongoMapper с одним документом для информационного бюллетеня и другим для электронной почты. Это становится очень медленным с + 100k электронных писем.

Я подумал, что, возможно, будет быстрее встроить электронные письма в массив внутри информационного бюллетеня, поскольку меня действительно интересует только электронное письмо ('[email protected]'), а не какая-либо логика вокруг него.

1) Можно ли вообще встроить в один документ целых 100-500 тысяч писем? 2) Mongoid лучше / быстрее для этого?

Я добавляю письмо, если его еще нет в коллекции, спрашивая

email = newsletter.emails.first(:email => '[email protected]')
unless email
    email = Email.new(:email => '[email protected]', :newsletter_id => self.id)
    email.save
end

И я думаю, здесь все начинает болеть.

Вот как они связаны. Рассылка новостей класса включает MongoMapper :: Document many: emails ... end

Class Email
   include MongoMapper::Document
   key :email, String
   key :newsletter_id, ObjectId
   belongs_to :newsletter
end

был бы рад любой помощи в этом :)


person Christian    schedule 22.06.2010    source источник


Ответы (1)


В настоящее время максимальный размер документа для MongoDB составляет 16 МБ, MongoMapper или Mongoid не будет иметь никакого значения для этого.

см. http://www.mongodb.org/display/DOCS/Documents

Встроенные документы должны быть значительно быстрее, если вы можете уместить все электронные письма в пределах лимита, это может стать проблемой.

Если хранить всю электронную почту слишком много, почему бы просто не сохранить либо массив, либо просто встроить адрес электронной почты в информационный бюллетень со ссылкой на полное электронное письмо.

Затем вы можете получить желаемое преимущество в скорости и сохранить доступ к электронной почте за пределами информационного бюллетеня.

person nodrog    schedule 14.09.2011
comment
Спасибо за ответ. Я фактически закончил тем, что создал документ с массивом электронных писем для ссылки. Около 120 000 электронных писем нарушат ограничение на размер документа, поэтому есть некоторая логика для создания нового справочного документа в тех редких случаях, когда это случается. - person Christian; 15.09.2011