Rails 2.1 e ottimizzazione Active Record

Fra le novità introdotte nella prossima versione del nostro amato framework web un numero considerevole di ottimizzazioni per Active Record indirizzate al miglioramento delle performance. Se con l’attuale versione di Ruby on Rails sono state introdotte delle migliorie a livello di caching e di connessione, i miglioramenti della prossima versione daranno sicuramente una marcia in più a Rails dal momento che interessano come Active Record genera le query SQL vere e proprie.

Un esempio per tutti il miglioramento introdotto per la generazione del cosiddetto “Eager Loading”. Poniamo il caso di avere una istrizione del codice come Person.find(:all, :include => [:friends]); con l’attuale versione di Ruby on Rails il codice SQL generato sarebbe del tipo:

SELECT `people`.`id` AS t0_r0, `people`.`name` AS t0_r1,
`people`.`surname` AS t0_r2, `friends`.`id` AS t1_r0,
`friends`.`nickname` AS t1_r1 FROM `people`
LEFT OUTER JOIN `friends` ON friends.person_id = friends.id

Una sola query, ma che si risolve nell’annoso problema 1+N che da sempre pesa su Active Record. Con la nuova versione la parola chiave :include genererà due o più query SQL, che hanno però un peso molto minore sul database:

SELECT `people`.`id`, `people`.`name`, `people`.`surname` FROM `people`
SELECT `friends`.`id`, `friends`.`nickname` FROM `friends` WHERE (`friends`.person_id IN (5,8,27,42))

Al momento dell’esecuzione questa seconda soluzione risulta decisamente più performante

Perché le performance di Active Record sono importanti

In una classica applicazione Ruby on Rails ad ogni interazione dell’utente corrisponde una o più interazione con il database; quando ad esempio vogliamo visualizzare una pagina contenente un post del blog, l’applicazione quantomeno eseguirà una query sul database per estrarre i dati relativi a quel post.

La situazione più frequente è però che per visualizzare una singola pagina, e quindi all’interno di una sola particolare action, vengano eseguite due o più query, magari con relazioni esterne così come nell’esempio sopra.

Un milgioramento delle performance di Active Record influirà quindi positivamente e in modo significativo sulle performance generali dell’applicazione e sulla percezione che l’utente avrà dell’applicazione.

Se è necessario ed auspicabile ottimizzare sempre il proprio codice per alleggerire il più possibile la propria applicazione, poter contare su un ORM dalle prestazioni in costante miglioramento offre sicuramente un ottima base per lo sviluppo.

28 Maggio 2008
Categorie: Ruby on Rails 2.0, Ruby on Rails, Ruby

AddThis Social Bookmark Button

Articoli simili

Commenti

Comments are closed.