ActiveRecord Caching?

ja hallo erstmal,…

ich habe gerade ein blaues Wunder mit Rails 1.2.6 erlebt:
Eine edit-View für Model zieht irgendwas zwischen 30 und 100 Referenzierte
Objekte, für die alle ACLs überprüft werden.
D.h. für jedes dieser Objekte werden

  • Eine Hand voll group_ids aus der ACL-Definition
    aufgelöst- Vom aktuellen User die group_ids gelesen und überprüft, wie die group_ids
    von den ACLs abgedeckt werden.

Im Grunde genommen zog dieser Code ca. 3 mal pro referenziertem Objekt:

group_id = (Group.find_by_name("#{groupname}") || Group.new).id
allowed = User.find(CURRENT_USER_DATA[:id]).group_ids.include?(group_id)

Das Laden der Seite brauchte ca. 20 Sekunden (kleinerer root-Server) im
production-Mode.
Nachdem ich das ganze in den development-Mode gesetzt habe, habe ich mal
quick-and dirty die Ergebnisse dieser Calls gecached:

unless CURRENT_USER_DATA[groupname]
group_id = (Group.find_by_name("#{groupname}") || Group.new).id
CURRENT_USER_DATA[groupname] = group_id
else
group_id = CURRENT_USER_DATA[groupname]
end
CURRENT_USER_DATA[:group_ids].include?(group_id)

Ergebnis: Das rendern braucht im development-Mode 1.9sec und im
Production-Mode 1.7sec.

Was mich dabei nur irgendwo umgehauen hat ist:
Warum schafft es ActiveRecord nicht das Abfragen der group_ids und das
Auflösen der symbolischen Group-Namen zu cachen?
Wie kann ich erreichen, dass ActiveRecord (wie z.B. Toplink das kann)
die
Datenbank nicht mehrere hundert Male damit quält, die gleichen Namen
aufzulösen und die gleichen ids herauszusuchen?

Danke,
Keep smiling
yanosz

On Sunday 04 May 2008, Jan L. wrote:

Was mich dabei nur irgendwo umgehauen hat ist:
Warum schafft es ActiveRecord nicht das Abfragen der group_ids und
das Auflösen der symbolischen Group-Namen zu cachen?
Wie kann ich erreichen, dass ActiveRecord (wie z.B. Toplink das kann)
die Datenbank nicht mehrere hundert Male damit quält, die gleichen
Namen aufzulösen und die gleichen ids herauszusuchen?

Zu Rails 2.x wechseln. Das bietet einen Query-Cache, der innerhalb eines
Request-Response-Zyklus alle Queries und ihre Ergebnisse speichert.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs