2012年7月9日月曜日

トランザクションが効かない。


今日はインポート機能にバリデーションやトランザクションを加えました、

早速トランザクションでハマりました。


何度試してもトランザクションがかからない。。。
特にエラーが出ていなかったので構文エラーではないし、関数も呼び出せているはず。
そこで、見ていた情報がcake1.3のものだったので、cakeのバージョンの違いによるものだと推測し、
ひたすら調べていました。

しかしながらいつまでたっても答えは見つからず。。。

先輩に訪ねてみた所、エンジンがMyISAMになっていないか?と言われ確認してみると、確かにMyISAMになっていました。
なんとMyISAMはトランザクションをサポートしていないようで、
トランザクションを使う場合にはInnoDBにしなければならないとのことです。
InnoDBにエンジンを変えた所、トランザクションが無事に効くようになりました。


悔しかったのでMyISAMとInnoDBの違いについて調べてみました。

MyISAMの利点と問題点

利点…シンプル、高速に動作、フルテキスト検索に対応
欠点…トランザクションや外部キー制約をサポートしない、クラッシュ時に使えなくなる、テーブルレベルでロックをかけるという点でロックの粒度が荒い

InnoDBの利点と問題点

利点…トランザクションをサポート、外部キー制約が装備されている、クラッシュ時のリカバリに対応、列レベルでロックを実施
欠点…フルテキスト検索ができない、パフォーマンスが悪い


このような違いがあるらしいです。
今後はハマることなく、使い分けが出来るようにしたいと思います。

以上です。

0 件のコメント:

コメントを投稿