人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: ariacompany
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:innodb MyISAM MySQL postgreSQL スクリプト
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● syatc
●25ポイント

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


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

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

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

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

◎質問者からの返答

複数テーブルをLockすれば

テーブルA

テーブルB

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

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

Aテーブル更新

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

Bテーブル更新

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


2 ● syatc
●0ポイント

http://yahoo.co.jp/

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

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

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


3 ● tadashi0805
●65ポイント

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

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

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

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

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

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

◎質問者からの返答

ありがとうございます。

やはり

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

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

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


4 ● tadashi0805
●0ポイント

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

そうですね。

MyISAMは、基本的に

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ