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