Store a single variable / row in database

What would be the best way in rails to store a single variable and have it persist. Like a have a variable that says "total_visits" that counts the total number of page loads.

The only solution I can think of is having a table with a single row.

IMHO The biggest problem with rails is the fact that it makes working easy and fun as long as your work can follow the MVC system. If you try to do it your way it won't be the rails way (at least as far as I know).

If you want to track any more information other then number of pages views, create a page_view model and give it some logic to do the rest of your magic. If you want to track views of a specific model, add a page_views field to that model. If you just want to track the number of page views on your entire website.... use an analytics program :slight_smile:

Brian

What would be the best way in rails to store a single variable and have it persist. Like a have a variable that says "total_visits" that counts the total number of page loads.

The only solution I can think of is having a table with a single row.

One answer would be yes, pretty much if you really want to store a single data point that's accessible to a number of instances of Rails, then either a file or a database is what you'll need to use (assuming you don't trust anything RAM based).

However, your specific scenario could quickly become an extreme bottleneck. It would be better served by logging (preferably asynchronously), and then read & tally the log to create your total. Do it periodically, so you're not starting from the first log every every time.

There's probably other ways, but using a single var for something like page loads is looking for trouble as your app scales. If you know the page requests will be low enough to not be a bottleneck then using the DB with row or table locking (effectively the same for this case) might be OK.

Another option if you can tolerate the potential for a little inaccuracy is to go ahead and use RAM (with a mutex) to keep the count, and periodically write that value to disk to minimize the disk access. If you have load balanced app servers you'll need a central RAM cache like memcache.

That's what comes to my mind -- others may have better ideas.

-- gw

Well, specifically what it would be for is an app which parses / collects stats on twitter. I want to have a persistant of the ID (twitter side) of the most recent parsed tweet, so I know where to start at the next startup, or in case it gets interrupted.

I don't what to log every tweet I parse to the database (there are tens of thousands), nor do I need to.

So a single-row table would be the best way to do this?

change your question to

how can count the total number of page loads for … ?

For what?