【问题标题】:Best MySQL storage engine to use for PHP session storage用于 PHP 会话存储的最佳 MySQL 存储引擎
【发布时间】:2012-09-09 01:40:13
【问题描述】:

我想使用 MySQL 来存储会话变量。据我了解,这意味着在每个页面请求上都会对表进行一次读取和一次写入。

哪种 MySQL 存储引擎最适合这项任务? MyISAM、InnoDB、MariaDB(我在 PHPMyAdmin 中没有看到)、Memory 或其他什么?

【问题讨论】:

    标签: php mysql session storage-engines


    【解决方案1】:

    “最佳”没有任何意义。你需要表达你的约束:你需要一致性吗?耐用性?高可用性?表现?所有这些属性的组合?你能负担得起放松你的会话吗?它们能适应记忆吗?是否需要支持对同一数据的并发访问?

    如果没有更多上下文,我会选择最平衡的存储引擎 InnoDB。它为 OLTP 应用程序、ACID 事务、良好的可靠性和明智的并发管理提供了正确的性能。会话变量的访问可能会使用主键来完成,而这个操作对于 InnoDB 来说非常有效。

    现在,如果性能确实是一个限制因素,我宁愿使用 NoSQL 引擎(即不是 MySQL)。对于存储会话数据,Redis 通常做得很好,并且很容易集成和部署。

    【讨论】:

      【解决方案2】:

      内存存储引擎听起来是最好的选择。请记住,这适用于临时会话。

      http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

      【讨论】:

      • 如果我有一个负载平衡器,因为引擎不将数据写入磁盘并且服务器不共享内存,这不是问题吗?另外,如果服务器崩溃或重新启动,我会丢失所有数据吗?
      【解决方案3】:

      这取决于你如何评价“更好”:

      MyISAM 是最常见的(许多共享主机包只允许您使用 MyISAM)。加上它在关系控制方面相当有限,所以你设置它非常快速和容易。如果您想要跨多个托管场景的可移植性和快速实施,MYISAM 是最好的。

      InnoDB 允许您通过链接不同表中的键来创建关系并保存数据完整性,这意味着更多的工作,但更专业的数据库设计。许多共享主机包没有实现 InnoDB,因此在将表结构从一个环境导出到另一个环境时,您可能需要做一些额外的工作。如果你想要关系管理和控制,INNODB 是最好的。

      就数据可移植性而言,MyISAM 将完全接受 InnoDB 数据库(因为 MyISAM 不检查数据完整性:“当我在 user_car 中插入新记录时,用户数据库中是否存在用户号 4,对于例子”)。如果您从 MyISAM 开始,导出到成熟的 InnoDB 数据库将是一场噩梦,即使您的数据具有所有键,表数据也必须以正确的顺序导入(用户和汽车,在 user_car 之前)。

      玛丽亚数据库?永远不会,仅仅因为使用它的人少,因此与 MyISAM 和 InnoDB 相比,您将获得更少的支持。

      底线敲门砖:INNODB。

      【讨论】:

      • 如果你强烈反对玛丽亚,可能值得说明原因——否则这句话不是很有用!你会编辑你的帖子并在这一点上稍微扩展一下吗?
      • @quertymk 和 halfer,按照您的要求进行了编辑。谢谢! :)
      【解决方案4】:

      如果您不希望 SQL 连接产生开销,请考虑使用 MemCached 会话存储。见http://php.net/manual/en/memcached.sessions.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-25
        • 2011-05-13
        • 2010-12-14
        • 1970-01-01
        • 2013-07-12
        • 2011-10-24
        • 1970-01-01
        • 2023-04-05
        相关资源
        最近更新 更多