Sto cercando un Ruby ORM per sostituire ActiveRecord. Ho guardato Sequel e DataMapper. Sembrano abbastanza buoni, ma nessuno di loro sembra fare le cose di base: non caricare tutto in memoria quando non ne hai bisogno.Esistono ORM ruby che usano cursori o smart fetch?
voglio dire che ho provato quanto segue (o equivalente) su ActiveRecord e Sequel sul tavolo con un sacco di righe:
posts.each { |p| puts p }
Entrambi impazzire sulla memoria. Sembrano caricare tutto in memoria piuttosto che prendere roba quando necessario. Ho usato il find_in_batches
in ActiveRecord, ma non è una soluzione accettabile:
- ActiveRecord non è una soluzione accettabile perché abbiamo avuto troppi problemi con esso.
Perché il mio codice dovrebbe essere a conoscenza di un meccanismo di paging? Sono felice di configurare da qualche parte la dimensione della pagina, ma questo è tutto. Con
find_in_batches
devi fare qualcosa del tipo:post.find_in_batches {| batch | batch.each {| p | mette p}}
ma che dovrebbe essere trasparente.
Quindi c'è da qualche parte un Ruby ORM affidabile che esegue il recupero in modo corretto?
Aggiornamento:
Come detto Sergio, in Rails 3 è possibile utilizzare find_each
che esattamente quello che voglio. Tuttavia, poiché ActiveRecord non è un'opzione, eccetto se qualcuno può davvero convincermi a usarlo, le domande sono:
- Quali ORM supportano l'equivalente di find_each?
- Come si fa?
- Perché abbiamo bisogno di uno
find_each
, mentre lofind
dovrebbe farlo, non dovrebbe?
Funziona anche per MySql o è solo con Postgres? – mb14
L'elemento use_cursor è solo postgres. Non sono sicuro che MySQL supporti i cursori per la restituzione dei risultati. La documentazione del cursore MySQL indica "MySQL supporta i cursori all'interno dei programmi memorizzati", vedere http://dev.mysql.com/doc/refman/5.6/en/cursors.html. –
Php usa db_fetch in modo massiccio, quindi suppongo che Mysql supporti i cursori. Comunque forse non nel driver ruby predefinito – mb14