我正在将myisam表用于我正在构建的网站,因为它将主要是只读的 . 这就是为什么我认为myisam会更好 . 但我将用户会话存储在数据库中...这意味着对每个页面请求的会话表进行选择更新 . 因此,对于会话,我现在在表上有1/1读/写,如果我需要在会话上更新某些内容,那么写入可能会更高 . 我应该用innodb这样的 table 吗?或者1/1读/写比仍然是myisam没有问题的东西?该应用程序将没有高流量(虽然我甚至不确定什么定义了这种情况下的高流量)
在原始性能方面,MyISAM通常比InnoDB快(主要是因为它不是ACID) . 因此,访问MyISAM比InnoDB消耗更少的资源 .
另一方面,MyISAM仅支持表级锁定:在高度并发的环境中,延迟增加 . 然而,几十个简单查询不应该造成太多麻烦(假设您的大多数查询都是直截了当的 SELECT session_data FROM session_table WHERE session_id = <some_id> ) .
SELECT session_data FROM session_table WHERE session_id = <some_id>
相反,InnoDB提供了更强大的功能:InnoDB表几乎不可能被破坏,并且性能方面的差异往往越来越不重要(例如参见this benchmark) . 有些人甚至认为现在没有理由继续使用MyISAM(InnoDB成为v5.5中的默认存储引擎) .
我很抱歉没有提供更明确的答案"faster" . 与性能优化一样,必须进行实际测试 . 请记住,您可以非常轻松地切换引擎( ALTER TABLE t ENGINE=[MyISAM | InnoDB] ),我建议您试试看 .
ALTER TABLE t ENGINE=[MyISAM | InnoDB]
但考虑到您的预期流量,使用其中一个或那个不应该产生太大的差异 .
你有很多选择,Mysql不是最好的选择:
如果您有硬件Raid,那么在光盘上保存它的好选项,不适合复制 .
Mysql - 是的,没有我以前使用Mysql - Myisam和50个用户表崩溃 . 所以如果你需要,你可以使用“MEMORY (HEAP)"表
像PHP扩展这样的语言有自己的Session storage eq WinCache Session Handler - Manual
最受欢迎Php+memcached session
你甚至可以使用Sqlite进行会话存储,因为你可以 . 对我来说,最好的选择是Mongodb Session storage || REDIS-SESSION-PHP
有些人将序列化引擎更改为“igbinary”以获得更好的性能
2 回答
在原始性能方面,MyISAM通常比InnoDB快(主要是因为它不是ACID) . 因此,访问MyISAM比InnoDB消耗更少的资源 .
另一方面,MyISAM仅支持表级锁定:在高度并发的环境中,延迟增加 . 然而,几十个简单查询不应该造成太多麻烦(假设您的大多数查询都是直截了当的
SELECT session_data FROM session_table WHERE session_id = <some_id>
) .相反,InnoDB提供了更强大的功能:InnoDB表几乎不可能被破坏,并且性能方面的差异往往越来越不重要(例如参见this benchmark) . 有些人甚至认为现在没有理由继续使用MyISAM(InnoDB成为v5.5中的默认存储引擎) .
我很抱歉没有提供更明确的答案"faster" . 与性能优化一样,必须进行实际测试 . 请记住,您可以非常轻松地切换引擎(
ALTER TABLE t ENGINE=[MyISAM | InnoDB]
),我建议您试试看 .但考虑到您的预期流量,使用其中一个或那个不应该产生太大的差异 .
你有很多选择,Mysql不是最好的选择:
如果您有硬件Raid,那么在光盘上保存它的好选项,不适合复制 .
Mysql - 是的,没有我以前使用Mysql - Myisam和50个用户表崩溃 . 所以如果你需要,你可以使用“MEMORY (HEAP)"表
像PHP扩展这样的语言有自己的Session storage eq WinCache Session Handler - Manual
最受欢迎Php+memcached session
你甚至可以使用Sqlite进行会话存储,因为你可以 . 对我来说,最好的选择是Mongodb Session storage || REDIS-SESSION-PHP
有些人将序列化引擎更改为“igbinary”以获得更好的性能