6

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

哪种 MySQL 存储引擎最适合这项任务?MyISAM、InnoDB、MariaDB(我在 PHPMyAdmin 中看不到)、内存或其他完全?

4

4 回答 4

8

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

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

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

于 2012-09-16T17:46:52.717 回答
2

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

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

于 2012-09-16T17:38:57.920 回答
0

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

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

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

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

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

底线关键:INNODB。

于 2012-09-16T17:59:55.113 回答
0

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

于 2012-09-16T18:19:31.490 回答