MySQLでの排他的処理は必要でしょうか?

解決


マロン  2005-09-08 01:17:39  No: 124986

[開発環境:Win98/XP,VB6SP6]

いつもお世話になっております。

さて今回は、私の作成したVBアプリの機能で、MySQLと連携した動作
をするところがありまして、VBそのものとは関係ない質問をさせて
頂いてよろしいでしょうか。

MySQLに関しても深い知識が全然ない状態なのですが、参考書を本屋で
買ってきて、一応目的のデータベースを構築しました。

動作もきちんとすることを確認していますが、ここで誠に初歩的な
というか、超初心者な質問をさせて下さい。

例えば、PerlによるCGIで、テキストファイルを使ってデータベース
もどきのことをさせる場合、排他的処理の手法の一つとして、ロック
ファイルを一時的に生成して、その間他の人が書き込み処理をできない
ようにする、というようなことをしますが、MySQLの場合は、排他的
処理というのは意識しなくていいのでしょうか。

買ってきた参考書のどこを読んでも、それに関することが書いてない
みたいなので、別に意識しなくても問題ないのかな?  と思っている
ところです。
ちなみにMySQLは、インターネット上のサーバーで使用しています。


medaka  2005-09-08 01:22:28  No: 124987

一人で使うなら必要ないかもしれないね。


特攻隊長まるるう  2005-09-08 02:21:12  No: 124988

データの整合性を保つ必要が無いなら必要ないかもしれないね。w

で、MySQL かどうかは置いておいて、データベースと排他制御について
何か調べましたか?ズバリ排他制御って何を目的としてますか?。

排他制御をするって事はそれができるって事で、
排他制御をしないって事はそれができないって事で
それ以上でもそれ以下でもありません。その状態で問題ないならそうして
下さい。

>買ってきた参考書のどこを読んでも、それに関することが書いてない
>みたいなので
難易度や文章量(コスト)を下げるため、省略する事はよくある事です。だから
通常、参考書には免責事項として『万一障害が発生しても責任を負いません』
と書いてあります。だいたい、書いてある事ならまだしも書いてない事に
ついてはこっちの勝手な解釈ですよ?。排他制御が必要無い?というのは、
MySQLに関しても深い知識が全然ない状態のマロンさんの判断であって、
実質参考書は関係ないんじゃないですか?。


マロン  2005-09-08 03:29:54  No: 124989

ご回答ありがとうございます。

medaka さん
> 一人で使うなら必要ないかもしれないね。

不特定多数で使います。

特攻隊長まるるうさん
> データの整合性を保つ必要が無いなら必要ないかもしれないね。w

整合性は必要です。

>排他制御をするって事はそれができるって事で、
>排他制御をしないって事はそれができないって事で
>それ以上でもそれ以下でもありません。その状態で問題ないならそうして
>下さい。

最初のところの文章の意味が私にはちょっと理解しづらいのですが、
排他制御をしないと問題があるのかなと思ったので、質問させて
頂きました。

>問題がないなら...

はい、私が自分でそう判断できていれば、無駄な時間を費やす
ようなご迷惑はおかけしませんが、排他制御がないと問題があるのではない
かと思って質問させて頂きました。

>排他制御が必要無い?というのは、
>MySQLに関しても深い知識が全然ない状態のマロンさんの判断であって、
>実質参考書は関係ないんじゃないですか?。

いや、参考書に載っていなかったので、逆に疑問の念が強くなったと
言ったほうがよいと思います。

>排他制御をするって事はそれができるって事で、
>排他制御をしないって事はそれができないって事で
>それ以上でもそれ以下でもありません。その状態で問題ないならそうして
>下さい。

このことを参考に、自分なりにいろいろと調べてみて、問題ないかどうかを
判断したいと思います。
私のつたない質問で、無駄に容量を食うと迷惑がかかるといけないので、
この件はこれで解決ということにさせて頂きます。
どうもありがとうございました。


葉月α  2005-09-08 18:56:24  No: 124990

>いや、参考書に載っていなかったので、逆に疑問の念が強くなったと
>言ったほうがよいと思います。

参考書が本当にいい参考書かどうか見極めるのも技術・知識・経験の一環
それに排他制御が必要であるかどうかは参考書がうんぬんではなく
DBをどうやって使うのかで設計するのが普通かな?

複数人数で同時使うのに排他制御しなかったら破綻するし
個人で趣味で使用するのにいちいちそんな制御盛り込むのも面倒な気もするし

その程度の質問でしょうか

だから・・・
>排他制御をするって事はそれができるって事で、
>排他制御をしないって事はそれができないって事で

排他制御が必要と思えばやればいいし、不要と判断すればやらなくてもいい

というような感じで受け取っても良いのではないでしょうか


特攻隊長まるるう  2005-09-08 19:22:21  No: 124991

データベースのお勉強をすればそんなに時間が掛からずに排他制御の
お勉強をする事になります。…で九分九厘、銀行の預金システムを
例にした説明に行き当たります。…そこに行き当たってないなら
勉強しなおした方が良いでしょう。

WEBで検索してみましょうか?
http://www.google.com/search?q=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%80%80%E6%8E%92%E4%BB%96&hl=ja&lr=&start=10&sa=N
[フォローアップ講座:排他制御]
http://mt-net.vis.ne.jp/follow/flw_exclusive.htm
排他制御の単語自体が単語帳に載ってるレベルですし
http://e-words.jp/w/E68E92E4BB96E588B6E5BEA1.html

>で、MySQL かどうかは置いておいて、データベースと排他制御について
>何か調べましたか?ズバリ排他制御って何を目的としてますか?。
>排他制御をするって事はそれができるって事で、
>排他制御をしないって事はそれができないって事で
何ができるできないの答えも初めから書いてるんですが…
>一人で使うなら必要ないかもしれないね。
>データの整合性を保つ必要が無いなら必要ないかもしれないね。w

やっぱ初心者には『必要です』って言わなきゃダメかなぁ…。
何で必要かを勉強しないと意味無いですから、『必要です』
って言われたからするんじゃなくて内容を理解してくださいね。
…勉強時間2・3時間で理解できる事なんだから。


特攻隊長まるるう  2005-09-08 20:02:10  No: 124992

で、排他制御の方法だけ知ってても意味無いのね。
例えばロックかけると他のユーザの操作は制限される
わけだからロックをかける範囲は最小限にしなければ
ならない…でないと例えば何でもかんでもロックかける
プログラムがデータを見ただけでロックをかけたとする。
と、誰かがプログラムを起動した時点で他のプログラムが
何の操作もできなくなったりする。
苦情満載。

正規の手順は
・データベースがどんなモノか理解する
  ↓
・データベースとして MySQL を選択する
  ↓
・MySQL の操作方法を知る

だけど、この手順を踏んでれば通常
>排他的処理は必要でしょうか?
という質問はしないと考えます。聞いた感じ
最後の手順しか踏んでない事ないですか?
…別にマロンさんが詳細設計書をもらってその通りプログラム
してるだけだと問題ないです。でも、排他処理を入れるか
入れないか迷うって事は自分で設計してるって事です
よね?。設計できるレベルじゃないですよ?。別に
ここの掲示板では『初心者』だとか『知識がない』
と言えば通用するのかもしれませんが(実質なんの参考にも
なってないですが)給料もらって(お金をかけて)作った
プログラムを誰かが使う時点で通用しないことないですか???


もげ  2005-09-09 22:50:42  No: 124993

そもそも、VBの話題じゃないので、MySQLを扱っている掲示板やMLのほうがよいでしょう。

心配の趣旨自体は、誠にごもっともな話ですが、
参考書に貴殿のレベルを合わせるのではなくて、
もっと「ましな」というか、次のステップというか、
貴殿(のやりたいこと)のレベルに合った参考書
を入手されることをお勧めします。

とりあえず、本家 のマニュアル
http://dev.mysql.com/doc/mysql/ja/commit.html

あとはこのへんですかね。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_01.htm
http://hp.vector.co.jp/authors/VA003334/mysql/mysqltransaction.htm

がんばってください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加