【发布时间】:2010-02-23 07:46:54
【问题描述】:
我正在开发一个权限系统。在每个页面中,它都需要检查用户是否有权限这样做。我有两个选择,将数据存储在会话变量中(仅在登录期间更新)或每次查询数据库以获取信息。 哪个更快?
我意识到如果权限发生变化,我将需要更新会话变量,因此用户需要重新登录才能“看到”权限的变化,但这不是决定的因素,只有速度是。
【问题讨论】:
-
单会话案例的速度是这里的重要因素,还是您需要大量活动会话的速度?
我正在开发一个权限系统。在每个页面中,它都需要检查用户是否有权限这样做。我有两个选择,将数据存储在会话变量中(仅在登录期间更新)或每次查询数据库以获取信息。 哪个更快?
我意识到如果权限发生变化,我将需要更新会话变量,因此用户需要重新登录才能“看到”权限的变化,但这不是决定的因素,只有速度是。
【问题讨论】:
SESSION 与 DB 的速度取决于多种因素:
我可以看出,对于少量数据,基于文件的会话变量将比数据库访问更快。
您需要对其进行测量以获得应用程序中两种方法之间的相关比较。我个人怀疑不使用会话解决方案是否会产生如此大的影响。
【讨论】:
在会话中设置新值:
时间:0.00062895 秒
在数据库中插入相同的值:
时间:0.00000811 秒
在 Cookies
中插入相同的值时间:0.00000906 秒
或者您可以使用以下代码进行测试:
$before = microtime(true);
// Put your code here
$after = microtime(true);
$Speed = number_format(( $after - $before), 8);
echo "<h1>Time: " . $Speed . " Seconds</h1>";
【讨论】:
我会将这类信息存储在会话中:
我还要补充一点,如果有一天您开始拥有多个不同的 Web 服务器,您将能够使用 memcached 存储会话数据——这意味着它的扩展性比数据库好得多。
【讨论】:
简短回答:将它存储在会话变量中可能会快一点,因为您已经从数据库中填充了它。话虽如此,我怀疑单个简单数据库查询的速度是否会以任何真正可衡量的方式让您陷入困境。
【讨论】: