开发者

php session vs mysql speed

开发者 https://www.devze.com 2022-12-21 11:32 出处:网络
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 updat

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 n开发者_如何学运维eeds to relogin to "see" the changes in permission, but that is not a factor in the decision, only speed is.


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.


Set new value in session take:

Time: 0.00062895 Seconds

Insert same value in database take:

Time: 0.00000811 Seconds

Insert same value in Cookies

Time: 0.00000906 Seconds

Or you can test by using this code:

$before = microtime(true);
    // Put your code here
$after = microtime(true);
$Speed = number_format(( $after - $before), 8);

echo "<h1>Time:  " . $Speed . " Seconds</h1>";


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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号