incrustar vs enlace en grandes conjuntos de MongoDB (rubí)
-
29-09-2019 - |
Pregunta
Embedded vs enlace
Estoy buscando la manera más rápida para buscar un documento Boletín de correo electrónico conectado. Hasta ahora he utilizado MongoMapper con un documento de lista de correos y otra para el correo electrónico. Esto se está poniendo muy lento con 100k + correos electrónicos.
Estaba pensando que quizá es más rápido para integrar los mensajes de correo electrónico en una matriz dentro Boletín ya que estoy realmente interesado sólo en el correo electrónico ( 'someemail@email.com') y no cualquier lógica alrededor de ella.
1) ¿Es posible en absoluto a incrustar tanto como 100k-500k mensajes de correo electrónico en un solo documento? 2) ¿Es Mongoid mejor / más rápido para esto?
Estoy agregando el correo electrónico si no está ya en la colección preguntando
email = newsletter.emails.first(:email => 'someemail@email.com')
unless email
email = Email.new(:email => 'someemail@email.com', :newsletter_id => self.id)
email.save
end
Y creo que esto es donde todo empieza a doler.
Aquí es cómo están conectados clase Boletín incluir MongoMapper :: Documento muchos mensajes de correo electrónico: ... final
Class Email
include MongoMapper::Document
key :email, String
key :newsletter_id, ObjectId
belongs_to :newsletter
end
amaría para cualquier ayuda en esto:)
Solución
Hay un tamaño máximo de documento de 16mb actualmente para MongoDB, MongoMapper o Mongoid no hará ninguna diferencia a este.
http://www.mongodb.org/display/DOCS/Documents
Los documentos insertados deben ser considerablemente más rápido, sin embargo, si te puedes adaptar todos los mensajes de correo electrónico en el plazo podría ser un apretón.
Si va a almacenar todo el correo electrónico es para tanto, ¿por qué no almacenar o una matriz o simplemente incrustados los correos electrónicos abordan en el canto boletín de noticias con una referencia al correo electrónico completa.
A continuación, puede obtener la ventaja de la velocidad que desee y mantener a los mensajes de correo electrónico accesible desde fuera del boletín de noticias.