Owain wrote in post #1015933:
> My application is gradually being refined and it is becoming necessary
> to provide some statistics.  I don't really want to add all of these
> into the main application logic since it is not critical.  I would
> like to "observe" a bunch of models and classes and increment and
> decrement counters.  So rather than have a bit of hideous AR finds to
> show me the number of orders by month I can  observe the AR callbacks
> on event and increment "August 2011 Orders".  I would also need to be
> able to reset via a Rake task or something similar.
>
> Has someone come across a Gem that provides this sort of functionality
> before I go and write it?

Unless there was a requirement for these statistics to be absolutely 
up-to-date at all times, I don't think I would track them with every 
change to the models being tracked. Instead, I would probably create a 
background process to periodically update the counts and store them in a 
separate "statistics" table. Essentially "mining" the statistical 
information rather than tracking it directly. This also provides an 
opportunity to flatten some of the relational data, which can 
dramatically improve query performance for reporting purposes.

Consider the example you mentioned; It seems likely that users would be 
interested in "August 2011 Orders" sometime in September, or later. It 
would also be likely that they would want to compare August with the 
results from August of the prior year.

Using data mining techniques these statistics could be provided 
retroactively, and it would also be possible to update the statistics on 
a completely separate process or even a separate server leaving your 
primary application servers free to serve user requests.

There are several gems that provide the infrastructure to build 
something like what I described. For example Github created their own 
solution, which they have open sourced called Resque:

https://github.com/defunkt/resque

This would also provide you the rake task for resetting, which would 
just enqueue another Resque job that you create.

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to