sqliteで複数の処理を行いそれがバッティングした場合というのはどうなるのでしょうか?
MySQLなどは同時に処理をおこなっても大丈夫なのはわかっているのですが、
sqliteは見たところファイルの扱い(実際のところ1つのファイルなんですが)に近いように見えます。
PerlやPHPでファイルを扱う際はロック機構がありますがファイルのロックのような機構があるのでしょうか?
(SQLITEの構文を見ても特にそういったものが見当たらなかったので、自動でそういった処理が組み込まれているでしょうか)
例えばtest.sqlite3というsqliteのファイルへA・B・C・D・Eという処理が同時刻に発生した場合というのはどうなるのでしょうか?
1.順番に実行される
2.同時に実行される
同時に実行される場合
1.5つの処理が別レコードであれば問題なし
2.いくつかの処理が同じレコードの場合は、処理される順番によって結果がかわる事がある
sqliteについての理解が低いので検討違いな質問をしているかも知れませんが、識者の方のご意見を聞ければと思います。
SQLiteはDB全体にロックをかけるため、同時にトランザクションがかかっても
1.順番に実行される
という結果になります。
http://d.hatena.ne.jp/sekom/20081115/p1
■
ファイルベースのDBですが・・
sqliteもトランザクションという概念があって
基本はMYSQLと変わりません。
トランザクションを開始するときに、ロックをかけることも可能です。
http://www.nishi2002.com/sqlite/x.php?cate=sql&id=41
・ロックと言う概念がある
・トランザクションが存在する
イメージ的には、マイクロソフトのAccessと同じファイルベースのDBなので
Accessと同程度の制限らしき物があります。
■
質問の前提では、ロックとかトランザクションとか意識されてないようなので
回答がびみょうになりますが・・・
>1.順番に実行される
同時にと言う場合は、MYSQLでも順番は保障されないはずですけど・・・。
>2.同時に実行される
> 同時に実行される場合
> 1.5つの処理が別レコードであれば問題なし
> 2.いくつかの処理が同じレコードの場合は、処理される順番によって結果がかわる事がある
トランザクションとかロックとかを意識して使わない限り
2です。
これはMYSQLでも同じですけど・・。
同時に同じレコードにUPDARTEが走った場合は、
処理中に自動でロックがかかるのですが、
データを保護してるだけで、順番を保障してないですよね?
この場合のロックは、いわゆる
あくまでファイルを破壊しないためのロックです。
明示的に行うロックは、データを保護して
データの不整合を避ける目的です。
「ファイルの保護」と「データの保護、不整合の防止」とは
同じロックでも意味合いが違いますよね。
明示的なロックにも
テーブルロックとレコードロックの2種類があります。
回答ありがとうございます。
検索の仕方が悪いせいかSQLiteに関してのこういった情報が見つからなかったこともあってとても助かりました。
>ロック自体を明示的に行わないとロックされないということでしょうか。
2012/05/06 11:07:27いいえ。自動的にロックがかかります。
回答ありがとうございます。
2012/05/09 20:39:33ひじょうに参考になりました。