存储在会话数据中与存储在 Sql 数据库中以获取临时数据

Posted

技术标签:

【中文标题】存储在会话数据中与存储在 Sql 数据库中以获取临时数据【英文标题】:Store in Session Data vs store in Sql Database for temporary data 【发布时间】:2010-11-01 03:47:15 【问题描述】:

我想知道使用 php 中的 $_SESSION 变量在会话中存储临时数据(与该会话相关)或从 SQL 数据库存储和检索哪个更有效?

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

更高效的方法取决于您要存储的数据量以及您打算如何处理临时数据。我有时会在文件存储中存储 5 兆的会话数据,这是一个糟糕的性能杀手。但是 5 兆的状态非常多,你真的不应该到达那里。

无论如何,您都可以将 PHP 的会话配置为 stored in a database table 并获得两全其美。

不过,如果数据不是用户会话的正确特征,那么您不应该使用会话并改用一些模型对象。

【讨论】:

我认为 5MB 和会话数据意味着某处出现了问题。 :)【参考方案2】:

PHP 会话比 DB 访问更快。但是 PHP 会话有一些 known issues。

如果您想要真正快速的访问时间,您可能需要查看 memcached,同时避免 PHP 会话管理的陷阱。

【讨论】:

【参考方案3】:

请记住,会话变量由存储机制支持,也就是说,当请求完成时,会话由会话处理程序写入,默认情况下这是一个文件。在下一个请求时,它会从该文件(或会话处理程序使用的任何其他内容)中拉回。

如果您在每次请求时都读取和写入此数据,只需使用 $_SESSION 变量,连接、查询和更新数据库的开销不会比默认的 $_SESSION 快。

如果您正在运行多个负载平衡的服务器并且需要在它们之间共享会话数据,您可能只想使用数据库支持的会话。在这种情况下,如果您发现数据库会话的开销会显着降低您的网站速度,您可能会考虑在 Web 服务器和数据库之间使用 memcached。

【讨论】:

【参考方案4】:

这实际上取决于您打算存储的数据量和您打算处理的流量。如果数据很少,并且站点不需要扩展到超过一台 Web 服务器,则一定要使用默认会话处理程序,它将会话数据写入 Web 服务器的文件系统。

如果您需要超越一个盒子,建议您将会话数据存储到内存数据库(如 memcached)或常规数据库中。使用 $_SESSION 时,您可以override the session handler in PHP 并编写自己的实现以存储到数据库。

【讨论】:

【参考方案5】:

我不太了解从数据库或文件中读取数据,但我不认为“数据库访问比其他人慢”是真的。我从学校的课程中了解到,与 I/O 访问相比,网络延迟可以忽略不计。如果我们使用数据库进行会话,我们有一些优势:

我们不必担心很多服务器,因为没有不同的文件系统。

我还认为在数据库中存储/读取内容比文件系统更容易。

此外,如果我们使用共享主机,将会话存储在数据库中是安全性的主要优势。

如果我错了,请纠正我。我还有很多东西要学。谢谢。

【讨论】:

以上是关于存储在会话数据中与存储在 Sql 数据库中以获取临时数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase Firestore 获取数据并将其存储在列表中以在颤振小部件中使用?

从 sqlitedatabase 的一行中以 name_column 获取所有数据并将其存储在 listview 中

如何让 SQL Server 表存储一个列表?

如何获取存储在数据库中的会话 ID?

将数据存储在 blob 中与存储指向文件的指针有啥区别?

将图像存储在数据库中与存储在文件系统中