パスワードを忘れた? アカウント作成
16713747 story
アップグレード

SQLite、複数クライアントからの同時書き込みが可能に 18

ストーリー by nagazou
新機能 部門より
SQLiteの開発チームは、複数クライアントからの同時書き込みを可能にする新機能として、「BEGIN CONCURRENT」文を実装したそうだ。これにより、従来は一つのクライアントだけが書き込みを行える制約がなくなり、複数のクライアントが同時に書き込みを実行できるようになった。具体的には、ジャーナルモードが「wal」(Write-Ahead-log)もしくは「wal2」の場合に「BEGIN CONCURRENT」文を実行することで、同時書き込みが可能となるとしている(SQLite: Begin ConcurrentPublickey)。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2023年08月04日 18時52分 (#4505965)

    ~これまで~
    複数クライアントが接続可能、並列して複数読み取り可能
    書き込みは常に「ロックして書き込み、ロック解除」なので同時書き込みは不可
    このためトランザクションは並列実行不可

    ~これから~
    複数クライアントが接続可能、並列して複数読み取り可能
    書き込みは常に「ロックして書き込み、ロック解除」なので同時書き込みは不可
    "BEGIN CONCURRENT"を使うとページレベルロックを使うので、トランザクションを並列実行可能

  • by Anonymous Coward on 2023年08月04日 22時15分 (#4506053)

    https://pandaman64.hatenablog.jp/entry/2023/08/01/215842 [hatenablog.jp]

    残念ながら、リンクされているページは開発中のブランチであり、まだSQLite本流にはマージされていません。
    また、現状ではマージする予定もありません。

  • by Anonymous Coward on 2023年08月04日 15時52分 (#4505875)

    検証モックで使ってたSQLiteをパフォーマンス気にせずそのまま本番でも使えちゃったりするって事?

    • by Anonymous Coward

      パフォーマンスが良いとは誰も言っていない。

  • by Anonymous Coward on 2023年08月04日 18時06分 (#4505952)

    同時書き込みではありません。書き込みを伴うトランザクションが複数起動できるだけです。

    • by Anonymous Coward on 2023年08月04日 19時00分 (#4505969)

      本当だ、COMMITするまでDBのロックを待って、COMMITする時に競合のチェックをしてから一気に書き込むのか。
      とはいえ先行して始めた時間かかる処理を後発が抜かして書き込みできるのは強い。

      親コメント
      • by Anonymous Coward

        それ、何も嬉しくなくて、不整合起きるだけじゃね?
        まだ順番でクエリ処理してくれた方が不具合少ないでしょ。

        • by Anonymous Coward on 2023年08月04日 22時37分 (#4506062)

          何のためのトランザクションなのかと小一時間(以下略

          親コメント
          • by Anonymous Coward

            トランザクションを同時に発行できるってことはやっぱ書き込み先がダブルと問題になるのでは。

            • by Anonymous Coward

              折角#4505965が解説してくれているのに。
              ACID特性とかRDBとは何たるかをちっとは勉強してくれ。

              ちなトランザクションの同時「発行」なら今でも出来る。
              ただトランザクションは常にDBロック(=ファイルロック)となるのでトランザクションは一つづつしか処理されない。
              なので同一セッションから連続してトランザクションを発行するとデッドロックしちゃうんだな。

              • by Anonymous Coward

                この周辺のコメント、本気で書いてるならスラドも戦慄するほどレベルが下がったな。昔からだと言うやつもいそうだがいくらなんでもここまでひどくはなかったと思うぞ

              • by Anonymous Coward

                できたっけ?今のsqliteだとトランザクションを起動できるのは一個だけだろ。だから後発のトランザクションは先行したトランザクションが終わるまで待ってるだけで資源をロックできないからデッドロックも起きない。ああ同一セッション内で連続してトランザクション開始したならね。

              • by Anonymous Coward

                ローレベルの実装をする人が減ったからという気がする。
                老人会と自虐しつつも、少しは世代交代してるんじゃないかと前向きに捉えてみよう!

              • by Anonymous Coward

                周辺ってどのコメに対するコメント?

            • by Anonymous Coward

              1つずつ実行して、問題があると後のトランザクションの方がエラーで転ける、と書いてあった。ロックなりを使って1件ずつトランザクション発行していくのと比べて何か楽になるのかどうか分からない。

              • by Anonymous Coward

                問題がなければ待たずに実行出来るのは利点では。
                例えば更新する対象が別の行だとか。

              • by Anonymous Coward

                ひたすら行足すだけみたいな処理のときなんかはこれがあると助かる気はする

  • by Anonymous Coward on 2023年08月07日 20時53分 (#4507201)

    ソフトに標準でバンドルされるSQLiteのDLLを、新しいバージョンに差し替えると、
    少しパフォーマンスが上がったりすることがある

typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...