2010-03-08 126 views
5

我正在运行一个允许用户登录的Web应用程序。用户可以将内容添加到他/她的“库”中,该库显示在名为“library.php”的页面上。在每次加载“library.php”时,不需要为数据库查询用户库的内容,我希望在用户登录时将其全局存储到PHP中,以便查询只运行一次。有这样做的最佳做法吗? FX。将他们的库存储在会话中的数组中?在PHP中存储全局数据的最佳实践?

感谢您的时间

+0

“全球”通常意味着“每个人都有一个实例”。你所追求的是每个用户会话数据。 – 2010-03-08 15:21:35

回答

7

如果每个用户的库存储在$_SESSION作为数组,如你所说(这绝对是可能的),那么必须确保用户进行任何更新到库中立即反映给该会话变量。老实说,除非有一些严重的查询正在进行一个库的获取,否则你有很多流量,我只需坚持'每当用户点击library.php时执行查询'。

+1

另一件可能更好的事情是创建一个自己的缓存,当用户登录时会创建一个缓存(类似于显示该库的静态html站点),该缓存在特定时间段后会被删除(例如30分钟或用户注销),并且如果它不存在或者如果有任何UPDATE查询已经完成,它将被刷新。 – Tobias 2010-03-08 14:44:26

+1

正确 - 但会增加复杂性。作为第一步,我会将索引和查询缓存添加到库表中,以最大限度地提高查询性能。 – karim79 2010-03-08 14:50:24

0

我认为最好将它存储在会话中。
它在用户登录时,所创建的会话,并且可以使用超全局中保存数据:

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

您还可以存储阵列或其他一切存在,并且可以清除如果用户注销。

2

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

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

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

1

每个PHP脚本完成后就会死亡,因此无法像在PC应用程序中那样将数据永久保存在Web应用程序中。

一种方法可能是会话,但它取决于您想要保存的数据量。根据你的例子,你正在谈论一个图书馆,所以在我看来,需要保存大量数据,在这种情况下,数据库就是要走的路,而且每次都必须查询它。

另一种方式可能是将它们保存在一个php文件中的数组中,但是每次您都必须查询数据库时,您必须每次都包含这样的php文件。

1

由于这是一个分贝的性能优化,我建议你看一看memcached这完全符合您的问题:

memcached是[..]旨在用于加快 动态Web应用程序通过 缓解数据库负载。

0

你关心表现;请注意:

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

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