PHP - 在$ _SESSION或数据库中存储大会话数组?

时间:2012-01-05 12:56:36

标签: php session session-variables

我需要在会话期间存储一个大数组(目前最高为几KB,我将其限制为最大0.25MB)。

在您的意见和实践中,将它存储在$ _SESSION或数据库中会更好吗?

速度很重要,但处理器/内存的使用也是如此,因为它位于共享主机上,我不希望它们关闭网站以免资源过度使用。

你会说有一个尺寸范围,其中$ _SESSION可以放心使用吗? (例如0kb-100kB或您的练习/测试显示的任何内容)。

感谢。

4 个答案:

答案 0 :(得分:4)

如果存储在会话中,具有合理数量的会话的0.25MB将使用比在数据库中更少的资源。因此会话中资源过度的可能性较低。

答案 1 :(得分:2)

这取决于您网站和服务器的并发用户数。由于它是一个共享服务器,我会使用数据库,如果(并且仅当)你有非常多的用户,但它更容易和更快与$ _SESSION,200kbs不是很多。此外,不使用数据库可以节省大量的时间来检索数据,因为它不必在每次请求时来回转发数据库服务器和Web服务器。

答案 2 :(得分:2)

会话的实际性能损失是PHP重写每个请求的会话数据。写入磁盘(它将在moste情况下执行)非常慢。它应仅用于简单的事情,如身份验证和小数据结构,例如购物车等。

根据它是什么类型的数据以及服务器上可用的软件,您应该将它存储在数据库中,或者您可以使用NoSQL解决方案,如MongoDB,Redis或CouchDB。

由于您正在考虑首先使用会话,因此我认为数据的一致性不是第一优先级。如果数据很重要,您应该使用MySQL数据库,因为它遵循ACID原则,即使在客户端与当前会话解除关联后,也会保留您的数据。

如果一致性不重要,请考虑使用Memcached(如果可用)。

摘要:使用数据库,但不一定是MySQL(取决于它是什么数据)。

答案 3 :(得分:1)

当您使用默认会话处理程序时,会话通常在存储在文件系统上的会话文件中后加载到内存中。除非您明确使用内存来存储会话,否则会话中没有持久的内存问题。在我看来,无论如何都要举行大型会议。设计中必须存在一些根本性缺陷。如果要将数据与用户关联,通常可以通过设计数据库来实现,这样数据就可以通过外键与正确的用户相关联。您可以查询此数据的一小部分,而不是将大量数据加载到内存中并对其进行过滤。会话仅对用户身份验证非常有用。 RESTful API根本不会使用会话。我应该注意到,我偏向于无国籍网络。会话在请求之间保持状态。我只接受身份验证作为有效用例,因为浏览器不提供通用且安全的替代方案