Frage

Embedded vs Link

Ich bin auf der Suche nach dem schnellsten Weg, um ein Newsletter Dokument für eine angeschlossene E-Mail zu suchen. Bisher habe ich MongoMapper mit einem Dokument für Newsletter und eine andere für E-Mail verwendet. Dies ist immer sehr langsam mit + 100k E-Mail.

Ich dachte, vielleicht ist es schneller einzubetten die E-Mails in einem Array innerhalb Newsletter da ich wirklich nur bin interessiert an der E-Mail ( ‚someemail@email.com‘) und keine Logik um ihn herum.

1) Ist es möglich, überhaupt einbetten, so viel wie 100k-500k E-Mails in einem Dokument? 2) Ist Mongoid besser / schneller für das?

Ich füge die E-Mail, wenn es nicht bereits in der Sammlung ist mit der Frage

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

Und ich denke, das ist alles beginnt zu schmerzen, wo.

Hier ist, wie sie miteinander verbunden sind     Klasse Newsletter        umfassen MongoMapper :: Document        viele: E-Mails        ...      Ende

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

wäre für jede Hilfe zu diesem Thema Liebe:)

War es hilfreich?

Lösung

Es gibt eine maximale Dokumentgröße von 16 MB zur Zeit für MongoDB, MongoMapper oder Mongoid keinen Unterschied leisten.

finden Sie unter http://www.mongodb.org/display/DOCS/Documents

Eingebettete Dokumente sollten jedoch wesentlich schneller sein, wenn Sie alle E-Mails passen innerhalb der Grenze ein Squeeze sein könnte.

Wenn die gesamte E-Mail-Speicherung zu viel ist, warum speichern nicht nur entweder ein Array oder eingebettet nur die E-Mails richten Sie den Newsletter mit einem Verweis auf die vollständige E-Mail withing.

Sie können dann den Geschwindigkeitsvorteil erhalten Sie wollen, und halten Sie die E-Mails zugänglich außerhalb des Newsletters.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top