Trouver mongoDB dossiers de lots (à l'aide de mongoid ruby adaptateur)

À l'aide de rails 3 et mongoDB avec le mongoid adaptateur, comment puis-je lot trouve à l'mongo DB? J'ai besoin de saisir tous les enregistrements dans une particulier de mongo DB collecte et l'index dans solr (index initial de données pour la recherche).

Le problème, je vais avoir, c'est que faire du Modèle.toutes les attrape tous les documents et les stocke dans la mémoire. Puis, lorsque j'ai procédé sur eux et de l'index solr, ma mémoire se mange et le processus meurt.

Ce que je suis en train de faire est de le lot le trouver dans mongo afin que je puisse effectuer une itération de plus de 1 000 enregistrements à la fois, de les transmettre à solr à l'index, puis de traiter les 1000 prochaines, etc...

Le code que j'ai actuellement ont fait ceci:

Model.all.each do |r|
  Sunspot.index(r)
end

Pour une collection qui a environ 1,5 millions de disques, ce mange jusqu'à 8 GO de mémoire et tue le processus. Dans ActiveRecord, il y a un find_in_batches méthode qui me permet de segmenter les requêtes en plusieurs lots qui garde la mémoire de devenir hors de contrôle. Cependant, je n'arrive pas à trouver quelque chose comme cela pour mongoDB/mongoid.

Je voudrais être en mesure de faire quelque chose comme ceci:

Model.all.in_batches_of(1000) do |batch|
  Sunpot.index(batch)
end

Qui permettrait d'alléger mes problèmes de mémoire et de requête de difficultés que de faire un simple problème de jeu à chaque fois. La documentation est rare, cependant, faire des lots trouve dans mongoDB. Je vois beaucoup de documentation sur lot semelles, mais pas de lot de découvertes.

  • Êtes-vous sûr que vous avez vu des problèmes de mémoire avec cela? Mongoid et le sous-jacent Mongo pilote déjà lot de requêtes avec un curseur. Cela permet de maintenir le faible empreinte mémoire.
  • Par le chemin, vous devriez changer la accepté de répondre à @RyanMcGeary un puis tous les futurs visitos de votre question sera de voir le bon et personne n'a gagné pas mettre en œuvre le manuel de l'optimisation qui est déjà fait par le pilote .
InformationsquelleAutor Dan L | 2011-08-12