【问题标题】:php: sessions vs. databasephp:会话与数据库
【发布时间】:2010-11-11 13:35:29
【问题描述】:

我有一个从数据库中检索其成员(或多或少 10 个成员)的类。

我的问题是:每次从数据库(MySQL)中获取它们是否更有效,只在会话的数组中留下一个 ID 或将它们直接存储在会话的数组中?

性能方面的差异这么大吗? (假设数据库有 100.000 行)

【问题讨论】:

    标签: php mysql performance session


    【解决方案1】:

    取决于您所说的“高效”是什么意思。一个是节省时间的,一个是节省磁盘空间的。除非您的要求处于光谱的两端,否则很难对两者进行判断。抛硬币、随时间推移测量性能并根据观察到的任何问题进行调整,您可能会做得很好。

    过早的优化是 万恶之源。

    【讨论】:

    • 恭喜报价 ;) 无论如何,我关心的是速度。
    • 好吧,它们最终都来自磁盘,但两者都极有可能被缓存,一个由数据库缓存,一个由操作系统缓存(甚至可能是 Web 服务器/PHP 模块,具体取决于事情是如何配置的?)无论哪种方式,它都是最小的,可能完全取决于未来的硬件变化,并且可能不值得思考。我建议您选择自然的方法:对于一个小型站点,我猜这可能是会话方法;对于其他一切,数据库。如果您在共享主机上,您可能希望避免使用会话方法,具体取决于服务器配置。
    【解决方案2】:

    考虑到您在会话中存储了一个 ID,会话是最有意义的。执行 session_start() 会加载您的会话信息,因此在此之后您是否加载了 1 个或 10 个项目在很大程度上是无关紧要的(除非它们真的很大,但无论如何这都会是一个问题)。

    所以坚持这次会议。

    如果您真的关心速度,请使用 APC 或 memcache 等内存缓存。担心文件系统或数据库中 10 个项目的速度会让人分心。差异将非常小,以至于无关紧要。

    注意:以上假设有两件事:

    1. 查询是高效的(从 100k 中检索 10 行应该可以在 0.1 秒内完成);和
    2. 您正在执行 1 个查询而不是 10 个。

    【讨论】:

      【解决方案3】:

      如果您的索引设置正确,您的表中是否有 100,000 行或 10,000,000 行是无关紧要的。

      话虽如此,PHP 的默认基于文件的会话肯定比从数据库中检索要快,但在您的网站被大量使用(例如每秒数百或数千个查询)之前,您不会注意到差异。

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 2011-11-05
        • 2016-10-12
        • 1970-01-01
        • 2015-10-29
        • 2012-07-01
        • 2011-07-14
        • 1970-01-01
        • 2011-01-01
        相关资源
        最近更新 更多