ActiveRecord Curseurs?

Hello,

#mamoulinette.rb
dataset=Client.find(:all)
dataset.each do enreg
fait_le_boulot_avec(enreg)
end

Ce code peut-devenir génant sur des tables de plusieurs centaines de
milliers d’enregistrements, puisque toute la table “monte” en mémoire.

Vous savez si en ActiveRecord on peut plutôt travailler avec un
curseur, ou un système de “pagination” automatique ?

Peut-être que AR::paginate peut convenir, mais je ne vois pas comment
faire un truc du style :

if we_are_on_last_record_of_pagination_set
dataset=paginate(_la_suite)
end

merci de vos lumières.

La méthode “paginate” de ActiveRecord prend automatiquement en compte un
paramètre donné à la page qui s’appelle “page” (précisément params[:page]).
A partir de là, la méthode “paginate” sait reconstruire un nombre de
lignes à prendre dans la base et un “offset”.

Pour bien comprendre ce mécanisme, je te conseille de lancer le
scaffolding et d’observer le code de la méthode “list” autogénérer
(ainsi que la vue associée, ce qui te permettra de voir comment
construire les liens “page précédente” et “page suivante”).

++

yk

Mathieu C. a écrit :

Mathieu :

curseur, ou un système de “pagination” automatique ?
Oui, tu peux utiliser un système de pagination, sauf que celui
d’ActiveRecord va te faire “monter” toute ta table en mémoire.
Il suffit alors de choisir un de ses remplaçants comme le plugin
paginating_find :

Autre chose, pour un traitement en tâche de fond, Starfish peut être
intéressant pour faire facilement du MapReduce en distribué.

http://www.rufy.com/starfish/doc/

– Jean-François.

Hi!

Oui, tu peux utiliser un système de pagination, sauf que celui
d’ActiveRecord va te faire “monter” toute ta table en mémoire.
Il suffit alors de choisir un de ses remplaçants comme le plugin
paginating_find :

http://cardboardrocket.com/2006/05/17/lots-of-records-on-a-memory-budget/

Merci Jean-François, exactement ce dont j’ai besoin…

Yann: Mon code n’a pas d’utilisateur, c’est juste une moulinette en
ActiveRecord.