我正在使用Symfony和Doctrine开展一个项目。
我有以下对象:
User, Playlist, Song
我正在使用Docrine ORM和做一些很多关系。
看过设置的'同事'问我为什么使用Innodb。(我猜Doctrine默认使用它......)他说:
“InnoDB不会立即写入磁盘。所以当mysql崩溃时,必须这样做 尝试重建它尚未写入表的数据。经常 这次失败,桌子永远丢失“
这是真的吗?
如果有,可以采取预防措施吗?
如果我不想让学说使用Innodb就像删除ORM映射中的manyTomany关系一样简单?
有没有办法将对象与Innodb以外的Doctrine相关联?
答案 0 :(得分:0)
使用InnoDB。周期。
在您想要"原子地"的语句组周围使用BEGIN...COMMIT
提交到磁盘。这样做(使用InnoDB)可以保证 - 即使语句中间出现电源故障 - 语句的所有都将持久保存到磁盘或 none 会的。 (是的,这种程度的一致性对于你正在做的事情可能有点过分,但是很高兴。)
这是真实的&#34;那个InnoDB会延迟写入磁盘,但是如果电源在<{em>之后 COMMIT
但在它之前失效,那么上面的陈述就是真的甚至开始写作。建议你的同事&#39;获得计算机科学学位,然后阅读有关InnoDB的更多信息。
至于Symphony和Doctrine是否搞砸了,我不知道。尽管如此,即使它们很草率,也可以使用InnoDB。
使用MyISAM,您几乎可以确保在电源故障后运行REPAIR TABLE
。 InnoDB不是这样。