【问题标题】:php session vs mysql speedphp会话与mysql速度
【发布时间】:2010-02-23 07:46:54
【问题描述】:

我正在开发一个权限系统。在每个页面中,它都需要检查用户是否有权限这样做。我有两个选择,将数据存储在会话变量中(仅在登录期间更新)或每次查询数据库以获取信息。 哪个更快?

我意识到如果权限发生变化,我将需要更新会话变量,因此用户需要重新登录才能“看到”权限的变化,但这不是决定的因素,只有速度是。

【问题讨论】:

  • 单会话案例的速度是这里的重要因素,还是您需要大量活动会话的速度?

标签: php mysql


【解决方案1】:

SESSION 与 DB 的速度取决于多种因素:

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

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

您需要对其进行测量以获得应用程序中两种方法之间的相关比较。我个人怀疑不使用会话解决方案是否会产生如此大的影响。

【讨论】:

  • 数据的大小可能在 1kb 左右,那有区别吗?
  • 我知道这是个老问题,但是对mysql连接时间有影响吗?因为 mysql 代码需要建立与 mysql 的连接,而 session 则不需要。这会影响性能吗?
  • 如果你能提供一些证据而不是凭空而来的理论。所以每个人都可以从实验本身进行比较..
【解决方案2】:

会话中设置新值:

时间: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>";

【讨论】:

  • 如果这包括获取数据所需的时间和数据的数量就完美了:)
【解决方案3】:

我会将这类信息存储在会话中:

  • 该数据特定于当前用户
  • 每个用户都有自己的数据版本
  • 那种数据不太可能经常改变——这意味着等到会话过期并且用户回来通常是可以的
    • 如果您认为它会经常更改,您可以在会话中与该数据一起保留一些时间戳,以跟踪上次从数据库中获取的“时间”;如果它是“toolong ago”获取的,只需每隔几分钟重新进行一次。


我还要补充一点,如果有一天您开始拥有多个不同的 Web 服务器,您将能够使用 memcached 存储会话数据——这意味着它的扩展性比数据库好得多。

【讨论】:

    【解决方案4】:

    简短回答:将它存储在会话变量中可能会快一点,因为您已经从数据库中填充了它。话虽如此,我怀疑单个简单数据库查询的速度是否会以任何真正可衡量的方式让您陷入困境。

    【讨论】:

    • 当用户可能以每秒 5 次的速度发出请求时,我认为这很重要。 (快速搜索)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2020-09-07
    • 2018-05-25
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多