[ruby-it] Alleggerire estrazione dati da tabella

Daneel Olivaw daneel.olivaw.r a gmail.com
Lun 5 Ott 2009 14:13:42 CEST


Salve lista.
Ritorno su un'applicazione di cui avevo già parlato tempo fa per
chiedere aiuto su altri aspetti.

Tanto per capire un po' cos'è 'sta roba: ho un elenco di circa 20000
elementi gestiti da degli operatori (una decina); per semplicità le
caratteristiche che l'operatore modifica sono salvate nella tabella
dell'elemento, quindi la tabella degli elementi è una cosa del genere:
tabella objects (quella degli elementi in questione):

|id|user_id|nomeoggetto|caratteristica1|caratt2|caratt3|....|carattn|

con legame 1 a molti tra la tabella users e objects.

Devo visualizzare delle statistiche di lavoro e in una delle quali devo
mostrare quanti oggetti ha gestito ogni operatore e divisi oper
caratteristica, quindi ho fatto una tabella del genere:

|--------------|                      oggetti              |
|nome_operatore|caratt1|caratt2|caratt3|....|carattn|totale|
|operatore1    |  10   |  23   |  131  |....|  3422 | 5335 |
|operatore2    |  345  |  76   |  678  |....|  4321 | 6742 |
...

La costruisco facendo nella vista una cosa del genere:

<% for user in @user %>
  <td><%= user.login %></td>
  <% car1 = Objects.count(:conditions => "caratt1= '1'and user.id =
'#{user.id}'") %>
  <% car2 = Objects.count(:conditions => "caratt2= '1'and user.id =
'#{user.id}'") %>
ecc.

(sì, i campi sono quasi tutti booleani, o se non lo sono comunque mi
serve la quantità degli oggetti con quella caratteristica)

Prima al posto del count direttamente sulla tabella facevo così:

<% car1 = @objects.map{|c| c if c.caratt1 == true c.user.id ==
user.id}.compact.length %>
ecc.

in cui @objects era definito nel controller così: @objects =
Object.find(:all)

Tra i due sistemi il primo mi genera la pagina in circa 8 secondi,
mentre i secondo dai 18 ai 20.

C'è un sistema più veloce e leggero per fare questa estrazione? E' un
po' una seccatura trovarsi con la macchina che fa da serverino che
rallenta di brutto ogni volta che il capogruppo va a vedersi le
statistiche...

Grazie e a presto :-)
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list