2013-10-30 97 views
1

我正在使用myisam表创建一个网站,因为它将主要是只读的。这就是为什么我认为myisam会更好。但是我将用户会话存储在数据库中......所以这意味着每个页面请求上的会话表的select + update。所以对于会话,我现在在桌面上有1/1次读/写,如果我需要更新会话上的某些内容,写次数可能会更高。我应该使用innodb这样的表吗?或者是1/1读/写比率仍然是myisam没有问题的东西?该应用程序将不会有高流量(虽然我什至不知道什么才算高流量针对这种情况)InnoDB或MyISAM会话?

+0

我会说'既不是':如果你担心性能,两者都太慢。使用MEMORY(引擎)或Memcached/Redis(另一个具有内存存储的RDBMS)。 – raina77ow

+0

您想要对内置PHP会话不支持的会话做什么? – RandomSeed

+0

@RandomSeed ...将它们存储在数据库中。这不是关于会话的问题,而是关于存储引擎的问题。会议就是这方面最好的例子,但它们不是唯一的情况,比如1/1。所以,我们不要在这里谈论话题。 – Marius

回答

0

的MyISAM往往快于InnoDB的原始PE方面性能(主要是因为它不是ACID)。因此访问MyISAM 比InnoDB消耗更少的资源。另一方面,MyISAM仅支持表级锁定:在高并发环境中,延迟增加。几十个简单的查询不应该导致太多麻烦,但是(假设大多数查询将是一个简单的SELECT session_data FROM session_table WHERE session_id = <some_id>)。相反,InnoDB提供了更强大的功能:InnoDB表几乎不可能被损坏,性能差异往往越来越小(例如参见this benchmark)。有些人甚至会争辩说现在没有什么理由继续使用MyISAM(InnoDB成为v5.5中的默认存储引擎)。

对于没有提供关于哪个“更快”的更确切答案,我感到抱歉。与性能优化一样,必须执行实际测试。请记住,您可以非常轻松地切换引擎(ALTER TABLE t ENGINE=[MyISAM | InnoDB]),我建议您尝试一下。

但考虑到您的预期流量,使用这一个或另一个不应该有太大的区别。

+0

这将很容易切换,但有些事情像自动增量在两个引擎中工作方式不同。更不用说innodb上的死锁检测。至于“哪一个更快” - 只要所有东西都在几秒钟而不是全部秒钟内运行,我真的不在乎。而且我担心可能会因myisam开始发生,因为太快会发生全桌锁。无论如何,感谢您的意见,我认为你的最后一句话很好地回答了我的问题:) – Marius

1

你有很多选择和MySQL是不是最好的一个:

  1. 保存到光盘的如果你有硬件RAID,不错的选择,不适合复制。
  2. Mysql - 是的,没有我以前使用的Mysql - Myisam和50个用户表崩溃。所以,如果你需要,你可以使用“MEMORY (HEAP)"
  3. 一些语言如PHP +扩展了自己的会话存储EQ WinCache Session Handler - 手动
  4. 最受欢迎Php+memcached session
  5. 可以使用甚至SQLite,让会话存储,因为你可以。我最好的选择是MongoDB的会话存储|| REDIS-SESSION-PHP
  6. 有人更改序列化引擎“igbinary”有更好的表现