On 20 Sep 2009, at 18:35, James Englert wrote:

> I feel like I'm missing a major point here.  Assuming the table is  
> correctly range partitioned and indexed, most databases should be  
> able to handle relatively large table sizes.  I agree that is a best  
> practice to archive old, unused data, but that can likely be done on  
> a monthly basis, or less often, depending on traffic.  Why would you  
> need to consider a solution that "will ramp up proportionally with  
> traffic"?

The original poster was asking for the correct way to clean the  
sessions table. Although there is no clear cut answer to that one, I  
personally feel random number generation is by no means the correct  
way to go. Yes, the database should be able to look up sessions very  
quickly, but as you pointed out, depending on traffic, it will  
eventually drain needless resources as the number of records increase,  
both in terms of server cycles and storage.

Now, until cookie-based storage became available, we used the database  
for session storage and used quite a few techniques over the years  
we've been developing Rails apps. As the number of applications  
increased, we started handling it differently. In rough lines, we used:

- First couple of applications: before_filter triggered by  
authentication (or some other action that clearly had to do with  
sessions)
- Cron tab that invokes script/runner during low traffic times (the  
problem here was that for each of the applications, a whole Rails  
instance was started and that consumed quite a bit of memory as the  
number of apps increased on the VPS we then had)
- Cron tab that invoked the mysql command line and just went through  
all of the databases deleting sessions in one session

The last solution was really quick, used very little resources and  
worked fine during the time we actually needed it. It was a little  
bash script, nothing special, along the lines of:

mysql -h localhost -u[someuser-with-necessary-privileges] <  
sql_commands_file

where sql_commands_file just had a series of commands to clean the  
sessions:

USE databasename1
DELETE FROM sessions WHERE NOW() - updated_at > 3600
USE databasename2
DELETE FROM sessions WHERE NOW() - updated_at > 3600
USE databasename3
DELETE FROM sessions WHERE NOW() - updated_at > 3600

I think we cleaned it up a bit by just generating the whole sql  
commands sequence in bash using loop script, but you get the picture.


Best regards

Peter De Berdt


--~--~---------~--~----~------------~-------~--~----~
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