php - 关于执行 MySQL 查询与使用 SESSION 变量的想法?

标签 php mysql session

<分区>

只是好奇其他人对此有何看法。无论你得到什么,都会欣赏意见或事实:)

我正在开发一个应用程序,其中从 MySQL 中提取大量信息并需要在多个页面上使用。

这样会更有意义吗?

  1. 一次拉取所有数据并将其存储在 SESSION 变量中以在其他页面上使用

  2. 在每个需要它的新页面上从数据库中提取数据

我假设首选方法是#1,但“过多”使用 SESSION 变量可能有一些缺点?

相关的附带问题:就 URL 而言,最好将数据存储在其中(即 domain.com/somepage.php?somedata=something&otherdata=thisdata)还是使用 SESSION 变量来存储该数据,以便URL 可以保持通用/干净(即 domain.com/somepage.php)?

这两个问题都可能是负载问题,但我们将不胜感激任何可能的见解。

谢谢!

最佳答案

你的问题无法回答到答案在任何地方都适用的地步。

原因如下:许多网络服务器架构都在同一台机器上处理 HTTP 服务器(Apache、Nginx)、服务器端语言(PHP、Ruby、Python)和 RDBMS(MySQL、PostgreSQL)。

这是您能找到的最常见的设置之一。

现在,这就是您的场景中发生的情况:

  • 您连接到 MySQL - 您从 PHP > MySQL 建立连接,这会“花费”一点
  • 你请求数据,所以 MySQL 从硬盘驱动器读取它(除非缓存在 RAM 中)
  • PHP 获取数据并分配一些内存来保存信息
  • 现在将其保存到 session 中。但默认情况下, session 是基于磁盘的,因此您只需发出一个写操作,您就花费了至少 1 个硬盘驱动器的 I/O 操作

但让我们看看发生了什么 - 您将一些数据从磁盘 (MySQL) 移动到 RAM(PHP 变量),然后这些数据再次保存在磁盘上。

在那种情况下你真的没有帮助你自己或你的系统,实际情况是你让事情变慢了。

另一方面,PHP(和其他语言)能够维护与 MySQL(和其他数据库)的连接,因此它们可以最大限度地减少打开新连接的成本(这在宏伟的计划中确实很便宜)。

如您所见,这是一个场景。有一种情况,您的 HTTP 服务器在专用机器上,PHP 在专用机器上,MySQL 在专用机器上。问题又是,将数据从 MySQL 移动到 PHP session 是否更便宜。那个session是基于磁盘的,基于redis的,基于memcache的,还是基于数据库的?建立与 MySQL 的连接的成本是多少?

在您可以想象的任何情况下,您需要问什么 - 您要权衡什么以及为了什么

因此,如果您正在运行最常见的设置(PHP 和您的数据库在同一台机器上)- 答案是否定的,在 session 中存储一些 MySQL 数据并不是更好。 如果您使用 InnoDB(您可能正在使用)并且它经过适当优化,则将一些数据保存到 session 中以避免为 reads 查询数据库带来的明显开销不会产生任何好处。情况很可能恰恰相反。

关于php - 关于执行 MySQL 查询与使用 SESSION 变量的想法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739942/

相关文章:

java - 无状态 bean 的行为类似于有状态 session bean - 为什么?

php - 为什么窗口窗体没有关闭

php - 如何访问 web root 之外的 sql 登录信息

mysql - 关闭从属服务器后出现percona复制错误

mysql - 如何将数据导入MySQL主/副本结构

c# - IStatelessSession 多对一插入对象

Java Mail 找不到类 MimeMessage

php - 如何在本地主机上配置 Laravel 应用程序?

php - 如何在(时间),在 laravel 4 中发布

javascript - AJAX 表单脚本未执行