変更と選択のクエリをdbに同時に送信する(html、javascript、jspを使用して)Webサイトを作成しようとしています。 MySQLは明らかにそれを好まない(ConcurrectModificationException
どこでも)。dbとの同時実行文
SQL文を同時に受け取り、という名前のキューを作成し、それをいくつかのプロパティに基づいて並べ替え、次に互いに矛盾しないことを確認した後にキューを実行しますそれ以降の文は、テーブルを削除すると矛盾します)。
問題は、2つのステートメントが競合するかどうかを確認する方法がわかりません。私が覚えていたのは、テーブルが論理的にのようなものであるかどうかを確認して、ステートメントが実行された場合(重複テーブルで実行された場合)のように見えてから、エラーがスローされると、ステートメントは別のステートメントと競合します。しかし、これは何度もテーブルを複製しなければならないことを意味します。
したがって、2つのステートメントが競合していないかどうかを確認するにはどうすればよいですか?例えば
:これら二つを同時に受信し、その後、いくつかの方法で注文する場合は
String sql1 = "DELETE FROM users WHERE id=3625036";
String sql2 = "UPDATE users SET displayName=\\"FOO\\" WHERE id=3625036";
、その後、sql2
はsql1
後に実行される可能性がありますし、それが例外をスローします。どのようにしてこの例で競合をチェックできますか?
あなたが同時変更を許可する場合は、条件をレースにドアを開けます。学生は同時プログラミングの背景を持っていますか?あるいは、並行プログラミングを教えることについてのコースです(明らかにそうではないか、あなたはこの質問をしません)。そうでなければ、排他的アクセスを強制するデータベースが絶対に必要だと思います。 – Gilles
@ Gillesなぜこのようなデータベースが必要なのかわかりません。 – ItamarG3
複数のセッションが同時にクエリを作成している場合、生徒は競合条件を処理する必要があります。 'process_page(){open_session(); do_my_stuff(); close_session();書いてください。 } 'は教えるのが簡単です。レースフリーコードを書くことはますます難しくなります。データベースが並行セッションを許可している場合は、並行処理の問題(なぜ 'select(); update();?)が時間の半分を壊すのか?それがコースの目的なら、それは問題ありませんが、あなたの質問から、私はそれがポイントではないことを集めます。 – Gilles