MySQL の MyISAM について質問です。


今まで、主に PostgreSQL を使用してトランザクションを用いた開発をしておりましたが、MySQLに乗り換えるにあたり、MyISAM ではトランザクションが使えませんので、例えば1スクリプトで複数テーブルを更新するような際、データベースの一貫性をどうしても保てなくなってしまうと思います。

実際に運用されている方々は、この問題に対しどうしているのでしょうか。やはり適所で InnoDB を使いなさい、というのが正解でしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2006/05/23 13:26:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:syatc No.1

回答回数6ベストアンサー獲得回数0

ポイント25pt

http://tech.blog.klab.org/archives/50160510.html


テーブルの一貫性ということであれば、

規模にもよりますが自分はMyISAMでテーブルロックを使っています。

しかし、現状のトランザクション処理をそのまま使用したいのなら、

やはりinnoDBを使うしかないと思います。

id:ariacompany

複数テーブルをLockすれば

テーブルA

テーブルB

の更新は必ず一貫性のある状態に保たれるということでしょうか。

ほかのトランザクションによる影響ということではなく、

Aテーブル更新

<ここで何らかの原因により終了

Bテーブル更新

という状態を想定しています。

2006/05/17 20:55:49
id:syatc No.2

回答回数6ベストアンサー獲得回数0

http://yahoo.co.jp/

すいません、余りにも言葉足らずでした。

テーブルロックはアクセスの衝突を防ぐためです、トランザクションは関係ありません。

変な回答して申し訳ありませんでした。

id:tadashi0805 No.3

回答回数287ベストアンサー獲得回数29

ポイント65pt

まだInnoDBの実装がなかった頃、MyISAMテーブルで開発を行ったことがあります。

その時は、自前で障害発生時のロールバック処理を可能な限り入れましたが、破綻しましたね。

ロールバック処理で障害を起こしたら、もうどうしようもなくなりますので。

1テーブルでもそうですので、複数テーブルでやってたら、話にならなかったと思います。

なので、InnoDBを使うのが唯一の解じゃないでしょうか。

http://dev.mysql.com/doc/refman/4.1/ja/innodb-transaction-model....

id:ariacompany

ありがとうございます。

やはり

http://dev.mysql.com/doc/refman/4.1/ja/ansi-diff-transaction...

>MySQL サーバでは、ほとんどの場合、更新前に簡単なチェックを組み込んだり、データベースの不整合をチェックして、不整合が発生した場合には自動的に修復または警告する簡単なスクリプトを実行したりすることで、発生する可能性がある問題を解決することができる。MySQL ログを使用したり、別のログを 1 つ追加したりするだけで、通常、データの整合性が失われることなく、完全にテーブルを修復することができる。

にあるように、自前で不整合修正を行う、っていうのが普通なんでしょうかね。

2006/05/17 22:10:00
id:tadashi0805 No.4

回答回数287ベストアンサー獲得回数29

>>自前で不整合修正を行う、っていうのが普通なんでしょうかね。

そうですね。

MyISAMは、基本的に

・滅多に障害は起こらない

・いざ障害が起こってテーブルが壊れても、バックアップや更新ログから回復可能

ってことで、割とお気楽に作る前提が、基本だと思います。

http://dev.mysql.com/doc/refman/4.1/ja/myisam.html

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません