tags:

views:

221

answers:

3

i am working a on a permission system. In each page it will need to check whether if the user has the permission to do so. I have two choices, store the data in a session variable (which is only updated during login) or query the database for the information every time. Which is faster?

I realized that if the permission changes, I will need to update the session variable, therefore the user needs to relogin to "see" the changes in permission, but that is not a factor in the decision, only speed is.

A: 

I would store that kind of information in session :

  • That data is specific to the current user
  • Each user has its own version of the data
  • That kind of data is not likely to change often -- which means waiting until the session expires and the user comes back is often OK
    • and if you think it'll change often, you can keep some timestamp in session, alongside that data, to keep track of "when" that was fetched from the DB for the last time ; and if it's been fetched "too long ago", just re-fecth it every couple of minutes.


I would also add that, if one day you start having several distinct web-servers, you'll be able to store the session data using memcached -- which means it scales way better than the database.

Pascal MARTIN
-true-true-true
vener
A: 

Short answer: Storing it in a session variable is probably a little faster, since you've already populated it from the database. That being said, I doubt that the speed of a single simple database query will bog you down in any real measurable way.

Xorlev
When a user may are making request at 5 per second, I think it matters. (Rapid searching)
vener
+2  A: 

Speed of SESSION vs. DB is dependent on a number of factors:

  • How much data will be stored in the session variable
  • What's the actual backing store of the session variables (if it is database backed sessions, it'll be basically the same time)

I can tell that for small amounts of data, file based session variables will be faster than DB access.

You need to measure it to obtain a relevant comparison between the two methods in your application. I personally doubt that it will make a such a difference as to not go for the session solution.

Vinko Vrsalovic
the size of the data might be around 1kb, so does that makes a difference?
vener
No, 1kb is small.
Vinko Vrsalovic