m1k*_*3y3 6 php session dataset
任何人都可以解释在会话中存储大量数据或指向我阅读的缺点吗?
如果在会话中存储数据和从数据文件中读取数据之间有什么区别,我也会感兴趣吗?
如果您在会话中存储大量数据,那么输入/输出性能将会下降,因为会有大量的读/写操作。
默认情况下,PHP 中的会话存储在 /tmp 目录中的平面文件中。因此,您的会话数据被写入某种数据文件中。
PHP 允许您通过函数覆盖其默认会话处理session_set_save_handler()程序,您可以在其中重新定义会话读取/写入/维护的方式。
您还可以通过 php.ini 文件覆盖它,您可以在其中通过session.save_handler指令指定它。
现在,拥有大量会话存储大数据的含义是,将创建大量文件,并且由于硬盘驱动器的操作方式(当然是机械驱动器,这是常见的),需要一些时间才能找到它们仍然)。你拥有的越多,找到它所需的时间就越长。它们越大,阅读它所需的时间就越长。如果你有很多而且它们很大——麻烦就会加倍,需要改变方法。
那么解决办法是什么呢?
通常,当遇到性能下降时,人们会对网站进行负载平衡。不幸的是,这不适用于会话,因为负载平衡正在选择使用哪台计算机来服务当前请求。这意味着不同的计算机将为您在某个网站上浏览的页面提供服务。这意味着,如果这些计算机使用默认的会话存储机制(/tmp 目录),会话将不会跨服务器保留,因为它们无法访问彼此的 /tmp 目录。您可以通过安装 NAS 并使其对集群中的所有计算机全局可见来解决此问题,但这既昂贵又难以维护。
另一种选择是将会话存储在数据库中。数据库可以从我们虚构的集群中的任何计算机访问。通常,有专门的数据库用于处理会话,专门与存储网站内容或其他内容的数据库分开。在 NoSQL 流行的时代 - 在我看来,NoSQL 非常适合处理会话。它们可以轻松扩展,并且将数据写入存储设备的速度比 RDBMS 更快。
第三种选择是增强所有这一切,放弃硬盘驱动器作为永久存储解决方案,而仅使用服务器内存进行会话存储。您获得的是令人难以置信的性能,但您所有的 RAM 可能很快就会耗尽。您还可以创建一个计算机集群,将会话存储在其 RAM 中。Redis 和 Memcache 非常适合此任务,谷歌搜索一下将为您提供很好的资源,解释如何使用 Redis 或 Memcache 来存储会话。
所有这一切的底线是:不要在会话中存储太多数据。根据您的需求和预算 - 有 3 种选项可供选择如何存储和使用会话。