今日はインポート機能にバリデーションやトランザクションを加えました、
早速トランザクションでハマりました。
何度試してもトランザクションがかからない。。。
特にエラーが出ていなかったので構文エラーではないし、関数も呼び出せているはず。
そこで、見ていた情報がcake1.3のものだったので、cakeのバージョンの違いによるものだと推測し、
ひたすら調べていました。
しかしながらいつまでたっても答えは見つからず。。。
先輩に訪ねてみた所、エンジンがMyISAMになっていないか?と言われ確認してみると、確かにMyISAMになっていました。
なんとMyISAMはトランザクションをサポートしていないようで、
トランザクションを使う場合にはInnoDBにしなければならないとのことです。
InnoDBにエンジンを変えた所、トランザクションが無事に効くようになりました。
悔しかったのでMyISAMとInnoDBの違いについて調べてみました。
MyISAMの利点と問題点
利点…シンプル、高速に動作、フルテキスト検索に対応
欠点…トランザクションや外部キー制約をサポートしない、クラッシュ時に使えなくなる、テーブルレベルでロックをかけるという点でロックの粒度が荒い
InnoDBの利点と問題点
利点…トランザクションをサポート、外部キー制約が装備されている、クラッシュ時のリカバリに対応、列レベルでロックを実施
欠点…フルテキスト検索ができない、パフォーマンスが悪い
このような違いがあるらしいです。
今後はハマることなく、使い分けが出来るようにしたいと思います。
以上です。
0 件のコメント:
コメントを投稿