"scrooge" lässt SELECTs abnehmen 0

Posted by fwoeck
on Tuesday, March 17

scrooge optimiert SELECT-Statements dadurch, dass es nach einer adaptiven Phase nur solche Attribute aus der Datrenbank holt, die später auch wirklich benötigt werden.

Dazu wird ein transparenter Proxy vor das AR-Modell geschoben, und es sind keine Anpassungen des Quellcodes nötig.

Die Installation wollte anfänglich nicht so recht mit den vorhandenen Plugins meines laufenden Projekts harmonieren – nachdem jetzt allerdings ein Rewrite (von scrooge) stattgefunden hat, klappt’s.

Das Plugin wird nur installiert, bzw. als gem eingebunden:


config.gem 'methodmissing-scrooge', :lib => 'scrooge'

und läuft. Ein konkreter Nachweis anhand von Benchmarks oder Logauswertungen steht hier noch aus.

Jedenfalls trifft die Beschleunigung für diese Fälle in Kraft:

  1. Select-Statements, die
  2. keine JOINS enthalten aber
  3. einen Primärschlüssel besitzen

Asynchroner DB-Zugriff mit mysqlplus

Neverblock hat u.a. einen Mysql-Treiber herausgebracht, der threaded und asynchron arbeitet. Für vielbesuchte Seiten dürfte das eine merkliche Entlastung bringen. Die Installation:

gem install oldmoe-mysqlplus

Danach ruft man den Treiber direkt als ersten in der environment.rb auf – er ersetzt die nativen Rails-query-Aufrufe durch async-query.


require 'mysqlplus'

Weblinks:

Gotcha: AR "find" und "find_by_id" 0

Posted by fwoeck
on Wednesday, November 19

Der kleine Unterschied zwischen ActiveRecords find und find_by_id kann manchmal ein großer sein: find wirft eine Exception, falls die Ergebnismenge leer ist:

>> Project.unarchived.find(40)
ActiveRecord::RecordNotFound: Couldn't find Project with ID=40
...

>> Project.unarchived.find_by_id(40)
=> nil

Neues in ActiveRecord von Rails 2.1 0

Posted by fwoeck
on Saturday, September 06

unter anderen…

User.all, Item.first

Anstelle von

User.find(:all)

kann man

User.all

sagen. Andere Beispiele:

Item.all(:conditions => 'author like "%av%"')

Item.first

Item.last

Guide.find(6).questions.last