【问题标题】:When using MySQL to store session data, is it faster to use db queries instead of session?使用 MySQL 存储 session 数据时,使用 db 查询而不是 session 是否更快?
【发布时间】:2020-06-24 18:05:07
【问题描述】:

我使用指南将会话请求重定向到数据库调用,以便我可以在前端和后端 PHP 上维护会话(本指南:来自:https://culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/),但这给我留下了一个问题。

我可以看到会话数据以 JSON 格式存储在数据库中。据我所知,这意味着每次我更新 $_SESSION 数据时,都会调用数据库并来回发送整个 $_SESSION 变量。

通常,我会将内容存储在 $_SESSION 中以简化对数据库的调用,但对于数据库会话,这似乎会使情况比正常情况更糟。还是仅在读取和不写入时使用 $_SESSION 仍然非常快/内存?

例如,通常我会得到这样的用户:

function get_user(userID) {
    if ($_SESSION['users'][userID]) return $_SESSION['users'][userID];
    $db = db_connect();
    $db->exec("SELECT * FROM users WHERE userID = ?",[userID]);
    $temp = $_SESSION['users'][userID] = $db->get_row();
    return $temp;
}

重点是,现在每次只调用 db 会更快吗?

【问题讨论】:

  • 如果你只有几千个用户,你不会注意到使用上有很大的不同。但是,如果您谈论的是数百万用户,那么会话数据到数据库表的持续获取/存储可能会开始显示(取决于您的服务器,可能会多半秒)。
  • SSD 降低了基于文件的会话和数据库会话之间的速度差异。但是,如果您正在寻找最快的会话,您可能需要查看redis / predis,它是托管在系统 RAM 上的数据库!
  • 感谢您的快速回复!所以底线:我没有错过任何东西,会话读取(无论如何都会进入数据库)肯定会更慢,但关键是它可能不重要,除非在规模上?
  • 差不多。我有一个包含 5000 万条记录的表,我经常读/写这些记录,而整个请求的每个成本不到一秒。实际上,与实际的数据库调用相比,我在解析/清理/准备数据方面浪费了更多时间;)
  • 如果有人将此作为答案,我会将其标记为正确(如果他们发布,则优先选择 SaidbakR)

标签: php session


【解决方案1】:

我接受此评论(作为答案粘贴)作为答案(归功于 IncredibleHat):


如果您只有几千名用户,您不会注意到使用上有太大差异。但是,如果您正在谈论数百万用户,那么会话数据到数据库表的持续获取/存储可能会开始显示(取决于您的服务器,可能会增加半秒)。 – 不可思议的帽子

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 2020-07-13
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2019-02-16
    相关资源
    最近更新 更多