![アップグレード アップグレード](https://srad.jp/static/topics/upgrades_64.png)
SQLite、複数クライアントからの同時書き込みが可能に 18
ストーリー by nagazou
新機能 部門より
新機能 部門より
SQLiteの開発チームは、複数クライアントからの同時書き込みを可能にする新機能として、「BEGIN CONCURRENT」文を実装したそうだ。これにより、従来は一つのクライアントだけが書き込みを行える制約がなくなり、複数のクライアントが同時に書き込みを実行できるようになった。具体的には、ジャーナルモードが「wal」(Write-Ahead-log)もしくは「wal2」の場合に「BEGIN CONCURRENT」文を実行することで、同時書き込みが可能となるとしている(SQLite: Begin Concurrent、Publickey)。
SQLiteで同時書き込みはできない (スコア:5, 参考になる)
~これまで~
複数クライアントが接続可能、並列して複数読み取り可能
書き込みは常に「ロックして書き込み、ロック解除」なので同時書き込みは不可
このためトランザクションは並列実行不可
~これから~
複数クライアントが接続可能、並列して複数読み取り可能
書き込みは常に「ロックして書き込み、ロック解除」なので同時書き込みは不可
"BEGIN CONCURRENT"を使うとページレベルロックを使うので、トランザクションを並列実行可能
実験ブランチのことなので、リリース予定は当面ないらしい (スコア:4, 参考になる)
https://pandaman64.hatenablog.jp/entry/2023/08/01/215842 [hatenablog.jp]
つまり (スコア:0)
検証モックで使ってたSQLiteをパフォーマンス気にせずそのまま本番でも使えちゃったりするって事?
Re: (スコア:0)
パフォーマンスが良いとは誰も言っていない。
同時書き込みでは無い (スコア:0)
同時書き込みではありません。書き込みを伴うトランザクションが複数起動できるだけです。
Re:同時書き込みでは無い (スコア:1)
本当だ、COMMITするまでDBのロックを待って、COMMITする時に競合のチェックをしてから一気に書き込むのか。
とはいえ先行して始めた時間かかる処理を後発が抜かして書き込みできるのは強い。
Re: (スコア:0)
それ、何も嬉しくなくて、不整合起きるだけじゃね?
まだ順番でクエリ処理してくれた方が不具合少ないでしょ。
Re:同時書き込みでは無い (スコア:1)
何のためのトランザクションなのかと小一時間(以下略
Re: (スコア:0)
トランザクションを同時に発行できるってことはやっぱ書き込み先がダブルと問題になるのでは。
Re: (スコア:0)
折角#4505965が解説してくれているのに。
ACID特性とかRDBとは何たるかをちっとは勉強してくれ。
ちなトランザクションの同時「発行」なら今でも出来る。
ただトランザクションは常にDBロック(=ファイルロック)となるのでトランザクションは一つづつしか処理されない。
なので同一セッションから連続してトランザクションを発行するとデッドロックしちゃうんだな。
Re: (スコア:0)
この周辺のコメント、本気で書いてるならスラドも戦慄するほどレベルが下がったな。昔からだと言うやつもいそうだがいくらなんでもここまでひどくはなかったと思うぞ
Re: (スコア:0)
できたっけ?今のsqliteだとトランザクションを起動できるのは一個だけだろ。だから後発のトランザクションは先行したトランザクションが終わるまで待ってるだけで資源をロックできないからデッドロックも起きない。ああ同一セッション内で連続してトランザクション開始したならね。
Re: (スコア:0)
ローレベルの実装をする人が減ったからという気がする。
老人会と自虐しつつも、少しは世代交代してるんじゃないかと前向きに捉えてみよう!
Re: (スコア:0)
周辺ってどのコメに対するコメント?
Re: (スコア:0)
1つずつ実行して、問題があると後のトランザクションの方がエラーで転ける、と書いてあった。ロックなりを使って1件ずつトランザクション発行していくのと比べて何か楽になるのかどうか分からない。
Re: (スコア:0)
問題がなければ待たずに実行出来るのは利点では。
例えば更新する対象が別の行だとか。
Re: (スコア:0)
ひたすら行足すだけみたいな処理のときなんかはこれがあると助かる気はする
バンドルされるSQLite (スコア:0)
ソフトに標準でバンドルされるSQLiteのDLLを、新しいバージョンに差し替えると、
少しパフォーマンスが上がったりすることがある