php:会话与数据库
Posted
技术标签:
【中文标题】php:会话与数据库【英文标题】:php: sessions vs. database 【发布时间】:2010-11-11 13:35:29 【问题描述】:我有一个从数据库中检索其成员(或多或少 10 个成员)的类。
我的问题是:每次从数据库(mysql)中获取它们是否更有效,只在会话的数组中留下一个 ID 或将它们直接存储在会话的数组中?
性能方面的差异这么大吗? (假设数据库有 100.000 行)
【问题讨论】:
【参考方案1】:取决于您所说的“高效”是什么意思。一个是节省时间的,一个是节省磁盘空间的。除非您的要求处于光谱的两端,否则很难对两者进行判断。抛硬币、随时间推移测量性能并根据观察到的任何问题进行调整,您可能会做得很好。
过早的优化是 万恶之源。
【讨论】:
恭喜报价 ;) 无论如何,我关心的是速度。 好吧,它们最终都来自磁盘,但两者都极有可能被缓存,一个由数据库缓存,一个由操作系统缓存(甚至可能是 Web 服务器/php 模块,具体取决于事情是如何配置的?)无论哪种方式,它都是最小的,可能完全取决于未来的硬件变化,并且可能不值得思考。我建议您选择自然的方法:对于一个小型站点,我猜这可能是会话方法;对于其他一切,数据库。如果您在共享主机上,您可能希望避免使用会话方法,具体取决于服务器配置。【参考方案2】:考虑到您在会话中存储了一个 ID,会话是最有意义的。执行 session_start() 会加载您的会话信息,因此在此之后您是否加载了 1 个或 10 个项目在很大程度上是无关紧要的(除非它们真的很大,但无论如何这都会是一个问题)。
所以坚持这次会议。
如果您真的关心速度,请使用 APC 或 memcache 等内存缓存。担心文件系统或数据库中 10 个项目的速度会让人分心。差异将非常小,以至于无关紧要。
注意:以上假设有两件事:
-
查询是高效的(从 100k 中检索 10 行应该可以在 0.1 秒内完成);和
您正在执行 1 个查询而不是 10 个。
【讨论】:
【参考方案3】:如果您的索引设置正确,您的表中是否有 100,000 行或 10,000,000 行是无关紧要的。
话虽如此,PHP 的默认基于文件的会话肯定比从数据库中检索要快,但在您的网站被大量使用(例如每秒数百或数千个查询)之前,您不会注意到差异。
【讨论】:
以上是关于php:会话与数据库的主要内容,如果未能解决你的问题,请参考以下文章