вставлять и ссылаться на больших наборах mongoDB (ruby) - PullRequest
2 голосов
/ 22 июня 2010

Внедрено и ссылка

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

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

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

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

email = newsletter.emails.first(:email => 'someemail@email.com')
unless email
    email = Email.new(:email => 'someemail@email.com', :newsletter_id => self.id)
    email.save
end

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

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

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

хотел бы получить любую помощь по этому вопросу:)

1 Ответ

0 голосов
/ 15 сентября 2011

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

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

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

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

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

...