Estoy buscando un ORM Ruby para reemplazar ActiveRecord. He estado mirando Sequel y DataMapper. Se ven bastante bien, pero ninguno de ellos parece hacer lo básico: no cargar todo en la memoria cuando no lo necesitas.¿Hay ORM de Ruby que utilizan cursores o búsqueda inteligente?
quiero decir que he intentado lo siguiente (o equivalente) en ActiveRecord y Sequel en la mesa con un montón de filas:
posts.each { |p| puts p }
Ambos se vuelven locos en la memoria. Parece que cargan todo en la memoria en lugar de ir a buscar cosas cuando es necesario. He utilizado el find_in_batches
en ActiveRecord, pero no es una solución aceptable:
- ActiveRecord no es una solución aceptable porque hemos tenido demasiados problemas con él.
¿Por qué mi código debe tener en cuenta un mecanismo de búsqueda? Me complace configurar en algún lugar el tamaño de la página, pero eso es todo. Con
find_in_batches
, debe hacer algo como:post.find_in_batches {| batch | batch.each {| p | puts p}}
Pero eso debería ser transparente.
Entonces, ¿hay algún lugar confiable de Ruby ORM que realiza la búsqueda correctamente?
Actualización:
Como se mencionó Sergio, en Rails 3 se puede utilizar find_each
cuales exactamente lo que quiero. Sin embargo, como ActiveRecord no es una opción, excepto si alguien realmente puede convencerme de usarlo, las preguntas son:
- ¿Qué ORM admiten el equivalente de find_each?
- ¿Cómo hacerlo?
- ¿Por qué necesitamos un
find_each
, mientras quefind
debería hacerlo, no?
Funciona también para MySql o es solo con Postgres? – mb14
El material de use_cursor es postgres-only. No estoy seguro de que MySQL admita cursores para devolver resultados. La documentación del cursor MySQL indica que "MySQL admite cursores dentro de programas almacenados", consulte http://dev.mysql.com/doc/refman/5.6/en/cursors.html. –
Php usa db_fetch masivamente, así que supongo que Mysql admite cursores. Sin embargo, tal vez no en el controlador de ruby predeterminado – mb14