Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在检查每个页面时使用会话或db查询?_Php_Mysql_Database_Session_Optimization - Fatal编程技术网

Php 在检查每个页面时使用会话或db查询?

Php 在检查每个页面时使用会话或db查询?,php,mysql,database,session,optimization,Php,Mysql,Database,Session,Optimization,我有一个应用程序,它必须检查用户表中的多个数据,以便创建页面 不仅仅是id和密码,还有其他数据,目前大约有7部分信息 每一页都要检查 我是在会话中加载所有这些数据,并从中进行检查,还是在每个页面请求上启动查询?不用说,还有其他疑问 关于优化,最好的做法是什么?MySQL将缓存查询,如果查询与上次完全相同,那么通过MySQL获取用户信息就可以了。尤其是当您通过快捷的主键获取所有信息时。访问数据库比访问会话要慢。你绝对应该使用会话。请不要忘记,如果数据库中的数据发生了更改,则也应在当前会话中进行更改

我有一个应用程序,它必须检查用户表中的多个数据,以便创建页面

不仅仅是id和密码,还有其他数据,目前大约有7部分信息

每一页都要检查

我是在会话中加载所有这些数据,并从中进行检查,还是在每个页面请求上启动查询?不用说,还有其他疑问


关于优化,最好的做法是什么?

MySQL将缓存查询,如果查询与上次完全相同,那么通过MySQL获取用户信息就可以了。尤其是当您通过快捷的主键获取所有信息时。

访问数据库比访问会话要慢。你绝对应该使用会话。请不要忘记,如果数据库中的数据发生了更改,则也应在当前会话中进行更改。

如果数据没有太多更改,则可以将其缓存到文件中。。。或者使用memcache之类的东西将其缓存到内存中


然后,您可以通过此文件包含数据,并设置从db获取数据或仅包含数据的时间。您应该从数据库调用数据一次,并将其存储在会话变量中。通常,当用户首次登录时,我会将我的用户名、用户名、电子邮件、用户名和访问级别放入会话中,然后在用户登录时,我可以在应用程序中的任何位置调用它们

不要在会话中存储密码,因为它不是必需的

您还可以创建一个名为logged_in的变量,并将其设置为true或false进行测试(即:如果用户已登录,则显示“帐户”菜单,否则显示“注册”菜单)。

[更新]

以下是MySQL缓存的正反两方面的链接。

这有点取决于您的站点,因为一个小型站点查询缓存就可以了,但是如果您想开发更具可伸缩性的应用程序,您必须记住速度


如何判断是否启用了mysql查询缓存:[]

您的问题使用“检查”-您的意思是必须验证每个页面请求上的数据吗?如果是这样,您可能无法避免访问数据库


如果您只需要为同一个用户存储页面之间不会更改的数据,那么您应该使用会话“首先在zend.com网站上

内部会话是磁盘上的文件。我不认为打开、解析和读取文件比让本地MySQL服务器从缓存中检索结果更快。尤其是一旦你考虑到他需要处理多少额外的代码来处理这项工作,这取决于他向数据库发送多少查询。在性能方面,数据传输并不是一件痛苦的事情。这是连接(除非他使用persistent,这在我的书中是不允许的)。另外,不要忘记php会话是在内部处理的,所以它们非常快。除此之外,添加memcached会话处理程序是最快的方法。不管怎样,我对此很感兴趣——本周末我将做一些基准测试:)P.S.从来没有见过一个web应用程序总是检查数据库中的用户数据而不是使用会话。本地MySQL连接非常快,比打开和读取文件快。对于远程数据库(不在同一台机器上),您是正确的。另外,如果你从未见过不使用会话的web应用程序,那么你就没有看过。MySQL有一个内置的缓存:你不需要双重缓存。至少在你变得更大之前。我们不知道他的应用程序的规模,所以提供我有经验的建议。应用程序即将启动,所以现在它没有规模,也不会在一开始,但我的立场是为规模做这件事。对于我运营的几个大型站点,我们使用memcached(以及其他工具),效果良好,但是,如果你的资源最初是有限的。。。简单地将内容缓存到文件中会有所帮助。这完全取决于您的查询有多昂贵(耗时)。还有其他选择-MongoDB、CouchDB等都用于高可用性站点。我可以拥有多少文件有什么缺点吗?例如,对于10000个用户,有10000个文件。这有关系吗?查询缓存在大多数主机上是默认打开的,还是必须打开?进入phpmyadmin>运行sql query>粘贴此>“显示变量,如'query_cache_size'”,它将显示您的查询缓存的大小,而我的查询缓存在本地主机上是默认关闭的。似乎查询缓存无法处理带有占位符的准备语句,所以我不能用这种方式caching@Marko没有任何东西可以缓存带有占位符的语句,原因很简单,没有任何东西可以缓存-占位符意味着它还没有数据。它应该如何缓存它?你可以缓存查询计划,但那是另一个问题。我必须读取数据才能创建页面,而且数据会随机更改,但可以更改,所以我需要一直检查。是的,然后你必须在每个页面上访问数据库。目前这是一个可测量的性能问题吗?目前还没有,因为应用程序尚未启动,而且这在使用上不会是一个问题,但由于编码正在进行中,我觉得最好一次做对,以后不要担心