Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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中存储全局数据的最佳实践?_Php_Mysql_Session - Fatal编程技术网

在PHP中存储全局数据的最佳实践?

在PHP中存储全局数据的最佳实践?,php,mysql,session,Php,Mysql,Session,我正在运行一个允许用户登录的web应用程序。用户可以向他/她的“库”添加/删除内容,该库显示在名为“library.php”的页面上。我不希望每次加载“library.php”时都在数据库中查询用户库的内容,而是希望在用户登录时为php全局存储它,以便查询只运行一次。有这样做的最佳实践吗?外汇。在会话中将其库存储在阵列中 感谢您抽出时间我认为最好将其存储在会话中。 如果用户登录,正在创建会话,您可以使用superglobal在其中保存数据: $_SESSION['key'] = "value";

我正在运行一个允许用户登录的web应用程序。用户可以向他/她的“库”添加/删除内容,该库显示在名为“library.php”的页面上。我不希望每次加载“library.php”时都在数据库中查询用户库的内容,而是希望在用户登录时为php全局存储它,以便查询只运行一次。有这样做的最佳实践吗?外汇。在会话中将其库存储在阵列中


感谢您抽出时间

我认为最好将其存储在会话中。
如果用户登录,正在创建会话,您可以使用superglobal在其中保存数据:

$_SESSION['key'] = "value";

您还可以在那里存储数组或其他所有内容,如果用户注销,则可以将其清除。

当用户登录时,您可以生成一个xml文件(例如user_ID.xml),并使用xslt显示该文件


如果您将每个用户的库存储在一个
$\u会话中
作为一个数组,正如您所建议的(这是绝对可能的),您必须确保用户对库所做的任何更新都会立即反映到该会话变量中


老实说,除非有一些非常繁重的查询正在进行以获取库,或者您有大量的流量,否则我只会坚持“每当用户点击library.php时执行查询”。

考虑数据的大小。乘以最大并发用户数

然后将其与服务器上可用的内存进行比较。还考虑这是否是共享服务器;其他网站也需要资源


基于此,最好创建一个可以使用的文件(根据Remi的评论),或者保持默认的无状态形式并每次读取。我怀疑每次读取数据都会产生很大的开销。

每个PHP脚本在完成时都会消失,因此数据不能像在PC应用程序中那样永久保存在web应用程序中

一种方法可以是会话,但这取决于要保存的数据量。根据你的例子,你说的是一个库,所以在我看来,需要保存大量的数据,在这种情况下,数据库是一种方法,是的,你每次都必须查询它


另一种方法是将它们保存在php文件内的数组中,但与每次必须查询DB的方法相同,每次都必须包含此类php文件。

由于这是一种DB性能优化,我建议您查看与问题完全匹配的方法:

memcached是[…]用于超速行驶 通过 减轻数据库负载


你喜欢表演;请注意:

  • 会话可以使用数据库文件存储数据
  • 数据库是用来代替文件的,因为它的性能和能力

使用数据库,它专为在这种情况下使用而设计

另一件可能更好的事情是创建一个自己的缓存,当用户登录时(比如显示库的静态html站点)将创建该缓存,该缓存在特定时间段后(例如30分钟或用户注销时)被删除如果它不存在或任何更新查询已完成,则将刷新它。正确-但以增加复杂性为代价。作为第一步,我将向库表添加索引和查询缓存,以最大限度地提高查询性能。“全局”通常意味着“每个人都有一个实例”。您需要的是每用户会话数据。