sqliteについて質問です。


sqliteで複数の処理を行いそれがバッティングした場合というのはどうなるのでしょうか?
MySQLなどは同時に処理をおこなっても大丈夫なのはわかっているのですが、
sqliteは見たところファイルの扱い(実際のところ1つのファイルなんですが)に近いように見えます。
PerlやPHPでファイルを扱う際はロック機構がありますがファイルのロックのような機構があるのでしょうか?
(SQLITEの構文を見ても特にそういったものが見当たらなかったので、自動でそういった処理が組み込まれているでしょうか)

例えばtest.sqlite3というsqliteのファイルへA・B・C・D・Eという処理が同時刻に発生した場合というのはどうなるのでしょうか?

1.順番に実行される
2.同時に実行される
  同時に実行される場合
  1.5つの処理が別レコードであれば問題なし
  2.いくつかの処理が同じレコードの場合は、処理される順番によって結果がかわる事がある

sqliteについての理解が低いので検討違いな質問をしているかも知れませんが、識者の方のご意見を聞ければと思います。

回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2012/05/04 03:42:23
  • 終了:2012/05/09 20:40:57

回答(2件)

id:oil999 No.1

oil999回答回数1728ベストアンサー獲得回数3202012/05/04 10:23:33

ポイント50pt

SQLiteはDB全体にロックをかけるため、同時にトランザクションがかかっても
1.順番に実行される
という結果になります。

http://d.hatena.ne.jp/sekom/20081115/p1

他1件のコメントを見る
id:oil999

>ロック自体を明示的に行わないとロックされないということでしょうか。
いいえ。自動的にロックがかかります。

2012/05/06 11:07:27
id:quocard

回答ありがとうございます。
ひじょうに参考になりました。

2012/05/09 20:39:33
id:taroe No.2

taroe回答回数1099ベストアンサー獲得回数1322012/05/04 10:44:43

ポイント50pt


ファイルベースの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でも同じですけど・・。

他1件のコメントを見る
id:taroe

同時に同じレコードにUPDARTEが走った場合は、
処理中に自動でロックがかかるのですが、
データを保護してるだけで、順番を保障してないですよね?

この場合のロックは、いわゆる
あくまでファイルを破壊しないためのロックです。

明示的に行うロックは、データを保護して
データの不整合を避ける目的です。

「ファイルの保護」と「データの保護、不整合の防止」とは
同じロックでも意味合いが違いますよね。

明示的なロックにも
テーブルロックとレコードロックの2種類があります。

2012/05/06 15:36:52
id:quocard

回答ありがとうございます。
検索の仕方が悪いせいかSQLiteに関してのこういった情報が見つからなかったこともあってとても助かりました。

2012/05/09 20:40:29

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません