2010-02-23 89 views
3

我正在处理一个权限系统。在每个页面中,需要检查用户是否有权这样做。我有两种选择,将数据存储在会话变量(仅在登录期间更新)或每次查询数据库中的信息。 哪个更快?我认识到如果权限发生变化,我将需要更新会话变量,因此用户需要重新登录以“查看”权限的更改,但这不是决定中的一个因素,只有速度是。php会话vs mysql速度

+0

是速度为单个会话情况的重要因素在这里,还是您需要大量活动会话的速度? – 2010-02-23 07:50:08

回答

7

速度取决于很多因素:

  • 多少数据将被存储在会话变量
  • 什么是会话变量的实际后备存储(如果是数据库支持的会话,它将基本上是同一时间)

我可以告诉,对于少量的数据,基于文件的会话变量将比数据库访问更快。

您需要测量它以获得应用程序中两种方法之间的相关比较。我个人怀疑它会做出如此不同以至于不会采用会议解决方案。在会议采取

+0

数据的大小可能在1kb左右,那么这有什么区别? – vener 2010-02-23 07:59:44

+1

不,1kb很小。 – 2010-02-23 10:32:56

+0

我知道这是个老问题,但会对mysql连接时间产生什么影响?因为用mysql代码需要建立与mysql的连接,但是session不会。这会影响性能吗? – mandza 2014-09-15 10:40:43

1

我想这方面的信息存储在会话:

  • 这些数据是特定于当前用户
  • 每个用户都有自己的数据
  • 这类型的数据是不太可能的版本经常改变 - 这意味着等到会话过期和用户回来经常是OK
    • ,如果你认为它会经常变化,可以保留一些时间戳会议上,沿着该数据,以磕ep最后一次从数据库中提取的“何时”的轨道;并且如果它已被提取“太久以前”,则每隔几分钟重新进行一次。


我还想补充一点,如果有一天你开始有几个不同的网络服务器,你就可以使用memcached的存储会话数据 - 这意味着它扩展的方式优于数据库。

+0

-true -true -true – vener 2010-02-23 07:54:29

+0

感谢您提及memcached选项! – Chris 2012-05-16 17:12:20

0

简答:将它存储在会话变量中可能会更快一些,因为您已经从数据库中填充它。话虽如此,我怀疑一个单一的简单数据库查询的速度会以任何真正可衡量的方式让你失望。会议对DB的

+0

当用户可能以每秒5次的速度发出请求时,我认为它很重要。 (快速搜索) – vener 2010-02-23 07:55:24

3

设置新值:

时间:0.00062895秒

插入相同的值数据库看法:

时间:0。00000811秒

饼干

插入相同的值

时间:0.00000906秒

或者,您可以使用此代码测试:

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

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

如果这包括了获取数据的时间和数据的数量,那么这将是完美的:) – StefansArya 2017-06-15 12:24:41