【问题标题】:Should a forum posts table use MyISAM or InnoDB论坛帖子表应该使用 MyISAM 还是 InnoDB
【发布时间】:2011-04-20 09:48:51
【问题描述】:

对于论坛,我应该使用 MyISAM 还是 InnoDB 作为存储文本的表?

我知道 MyISAM 支持全文搜索,这听起来像是我应该做的,但是在阅读时,我遇到了这个非常混乱的句子。

您应该在以下情况下使用 InnoDB 交易很重要,例如 对于 INSERT 和 SELECT 被交错,例如 在线留言板或论坛。

好吧,但是对于“在线留言板或论坛”,我需要很好的搜索来搜索每个帖子的文本,所以使用 MyISAM 不是更有意义吗?有人能澄清一下最常用的是什么吗?

【问题讨论】:

    标签: php mysql innodb forum myisam


    【解决方案1】:

    除了 MySQL 的原生全文搜索解决方案(您已经确定需要 MyISAM 存储引擎)之外,您可能还需要考虑流行的第三方搜索引擎 SphinxApache Lucene,您可以使用 InnoDB表格。

    您也可以坚持 MySQL 的解决方案,并为所有表使用 InnoDB 存储,除了一张表将简单地保存 post_idtext_body。这是假设您只需要全文搜索论坛帖子的内容。

    另外请注意,虽然 MyISAM 的主要缺陷是缺乏事务支持,但对于生产系统而言,还有其他重要问题。您可能需要查看以下文章以进一步阅读:

    【讨论】:

    • 当数据很大时,MyISAM 的长时间崩溃恢复(论坛中就是这种情况)。
    • @racetrack,你的意思是 InnoDB 从崩溃中恢复的速度比 MyISAM 快?
    • @dave 如果数据文件很大,速度会更快。当 InnoDB 通过重放日志文件进行恢复时,MyISAM 需要全面扫描和修复/重建索引。
    【解决方案2】:

    一般来说,对于非关键数据,我会使用 InnoDB 以提高速度。 (例如,我不会在每次提交时刷新二进制日志。)我只会将 MyISAM 用于记录表之类的事情。

    正如其他人所提到的,如果您需要进行全文搜索,可以使用外部搜索索引。它们比 MySQL 更强大、更快速。

    关于交易的部分,有点谎言。您可以通过为 WRITE 锁定表来对 MyISAM 做同样的事情。例如,如果您在发布消息时插入三个表,您可以锁定所有三个表以进行 WRITE,并且数据看起来一致(假设所有三个 INSERTS 都成功)。

    但这样做的问题是您锁定了整个表,这会减慢并发使用速度。事实上,这是 InnoDB 相对于 MyISAM 的主要优势之一:它具有行级锁定。

    简而言之:如果您无法设置外部索引器,并且您的网站没有遇到太多流量,那么 MyISAM 将可以正常工作,尽管它不太健壮。您可以使用表锁模拟事务的一致性。 (我并不是说表锁定在某种程度上等同于事务。)

    否则,我会将 InnoDB 与外部索引服务一起使用。

    【讨论】:

    【解决方案3】:

    对于任何大量文本,我会使用 InnoDB 来存储它并使用Sphinx 来索引它。它提供了比 mysql 内置的更多的搜索功能。

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 2011-05-29
      • 2011-04-24
      相关资源
      最近更新 更多