Je suis à la recherche d'un ORM Ruby pour remplacer ActiveRecord. J'ai regardé Sequel et DataMapper. Ils ont l'air plutôt bien mais aucun d'entre eux ne semble faire la base: ne pas charger tout en mémoire quand vous n'en avez pas besoin.Y a-t-il des ORM Ruby qui utilisent des curseurs ou des récupérations intelligentes?
Je veux dire que je l'ai essayé ce qui suit (ou équivalent) sur ActiveRecord et Sequel sur la table avec beaucoup de lignes:
posts.each { |p| puts p }
Les deux deviennent fous sur la mémoire. Ils semblent charger tout en mémoire plutôt que d'aller chercher des choses quand c'est nécessaire. J'ai utilisé le find_in_batches
ActiveRecord, mais ce n'est pas une solution acceptable:
- ActiveRecord n'est pas une solution acceptable parce que nous avions trop de problèmes avec elle.
Pourquoi mon code doit-il être informé d'un mécanisme de pagination? Je suis heureux de configurer quelque part la taille de la page mais c'est tout. Avec
find_in_batches
vous devez faire quelque chose comme:post.find_in_batches {| batch.each {| p | met p}}
Mais cela devrait être transparent.
Alors, y a-t-il quelque part un ORM Ruby fiable qui effectue l'extraction correctement?
Mise à jour:
Comme Sergio mentionné, dans Rails 3, vous pouvez utiliser find_each
qui exactement ce que je veux. Cependant, comme ActiveRecord n'est pas une option, sauf si quelqu'un peut vraiment me convaincre de l'utiliser, les questions sont les suivantes:
- Quels ORM supportent l'équivalent de find_each?
- Comment le faire?
- Pourquoi avons-nous besoin d'un
find_each
, alors quefind
devrait le faire, n'est-ce pas?
Ça marche aussi pour MySql ou est-ce seulement avec Postgres? – mb14
Le contenu de use_cursor est postgres-only. Je ne suis pas sûr que MySQL supporte les curseurs pour retourner les résultats. La documentation du curseur MySQL indique que "MySQL supporte les curseurs dans les programmes stockés", voir http://dev.mysql.com/doc/refman/5.6/en/cursors.html. –
PHP utilise massivement db_fetch, donc je suppose que MySQL supporte les curseurs. Cependant peut-être pas dans le pilote ruby par défaut – mb14