用于PHP会话存储的最佳MySQL存储引擎



我想使用MySQL来存储会话变量。据我所知,这意味着在每个页面请求中都会有一次对表的读取和写入。

哪个MySQL存储引擎最适合执行此任务?MyISAM、InnoDB、MariaDB(我在PHPMyAdmin中没有看到)、Memory,或者其他什么?

"最佳"毫无意义。你需要表达你的约束:你需要一致性吗?耐久性高可用性?表演所有这些属性的组合?你能负担得起放松训练的费用吗?它们能进入记忆吗?您是否需要支持对相同数据的并发访问?

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

现在,如果性能真的是一个约束,我宁愿使用NoSQL引擎(即不是MySQL)。为了存储会话数据,Redis通常做得很好,并且很容易集成和部署。

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

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

这取决于您如何评估"更好":

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

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

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

MariaDB?永远不要,因为使用它的人越来越少,因此与MyISAM和InnoDB相比,您将获得更少的支持。

底线关键:INNODB。

如果您不想减少SQL连接的开销,请考虑使用MemCached会话sorage。看见http://php.net/manual/en/memcached.sessions.php

最新更新