InnoDB不会立即写入磁盘。问题?

时间:2015-03-23 13:15:06

标签: php symfony doctrine innodb

我正在使用Symfony和Doctrine开展一个项目。

我有以下对象:

User, Playlist, Song

我正在使用Docrine ORM和做一些很多关系。

  • 用户可以拥有多个播放列表
  • 播放列表可以有多个用户
  • 播放列表可以有多首歌曲
  • 歌曲可以包含多个播放列表

看过设置的'同事'问我为什么使用Innodb。(我猜Doctrine默认使用它......)他说:

  

“InnoDB不会立即写入磁盘。所以当mysql崩溃时,必须这样做   尝试重建它尚未写入表的数据。经常   这次失败,桌子永远丢失“

这是真的吗?

如果有,可以采取预防措施吗?

如果我不想让学说使用Innodb就像删除ORM映射中的manyTomany关系一样简单?

有没有办法将对象与Innodb以外的Doctrine相关联?

1 个答案:

答案 0 :(得分:0)

使用InnoDB。周期。

在您想要"原子地"的语句组周围使用BEGIN...COMMIT提交到磁盘。这样做(使用InnoDB)可以保证 - 即使语句中间出现电源故障 - 语句的所有都将持久保存到磁盘或 none 会的。 (是的,这种程度的一致性对于你正在做的事情可能有点过分,但是很高兴。)

这是真实的&#34;那个InnoDB会延迟写入磁盘,但是如果电源在<{em>之后 COMMIT但在它之前失效,那么上面的陈述就是真的甚至开始写作。建议你的同事&#39;获得计算机科学学位,然后阅读有关InnoDB的更多信息。

至于Symphony和Doctrine是否搞砸了,我不知道。尽管如此,即使它们很草率,也可以使用InnoDB。

使用MyISAM,您几乎可以确保在电源故障后运行REPAIR TABLE。 InnoDB不是这样。