問題タブ [database-concurrency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
226 参照

android-syncadapter - Android SyncAdapter と同時書き込みアクセス

SyncAdapter を使用して RESTful Android アプリを開発しています。いくつかのスクリーンキャストを見て、いくつかのチュートリアルを読みましたが、基本的なダイナミクスしか扱っていません。コードを書き始める前に、専門家のユーザーから並行性の問題についてフィードバックを受けたいと思います。

ステップ 1. ユーザーはデータベースのテーブルにU新しいエントリを挿入します。エントリには列があります。ETstatus = TO_SYNC

ステップ 2. エントリEが同期される前に、エントリUを変更することを決定します。Aの列の値を変更するためのアクティビティが開始されますE

ステップ 3. ユーザーがエントリーを変更している間に、SyncAdapter が始動し、エントリーをstatus == TO_SYNCサーバーに送信します。エントリごとに、サーバーから肯定的な応答を受け取ると、SyncAdapterセットが設定されます。status = SYNCED

ステップ 4. 同じエントリへの同時アクセスEによって競合が発生するとします。

  1. SyncAdapter は を読み取り、サーバーEに送信しますE
  2. アクティビティAが完了し、EステータスがTO_SYNC
  3. SyncAdapter はサーバーから ok を受け取り、statusofEをに設定します。SYNCED
  4. この時点では、値が SyncAdapter によって上書きされているため、新しい値はE同期されません。TO_SYNC

私の質問は、begin/end transaction同期中にデータベース全体をブロックせずにこのような問題を回避するにはどうすればよいですか (完了するまでに時間がかかる可能性があります)。単一のエントリに対して従来の Java ロックを使用する必要がありますか? もっとエレガントな方法はありますか?

0 投票する
1 に答える
2256 参照

c# - 複数のスレッドからの Entity Framework エンティティの変更

ユーザーがエンティティの特定のプロパティを設定できるようにする UI スレッドがあります。

また、重要なことに、ユーザーがアクセスできないエンティティのプロパティを自動的に変更するワーカー スレッドもあります。

DbContextsスレッドごとに異なるものを使用し、同じプロパティを常に変更しないようにプログラミングに依存してからSaveChanges()、同じエンティティが異なる方法で変更されたコンテキストで試行することは安全でしょうか?

または、これを行うためのより安全な方法、つまり、同じプロパティが 2 つの異なるコンテキストから安全に変更されるようにプログラマーがいつかコードを変更できるようにする方法はありますか? それとも、この後者の状況は、単にプログラマーが注意/リファクタリングをしなければならない状況ですか?

0 投票する
0 に答える
47 参照

sql-server - 多くのユーザーがデータベース内の同じテーブル (テーブルへの同時アクセス) を必要とする場合、危険ですか?

個人データをDBテーブルに入れることで各ユーザーにサービスを提供するサーバーのコードを使用します。多くのユーザーがいて、たとえばそのうちの 2 人が DB のテーブルにデータを入れたいと考えています。この場合、SQL サーバーはどのように機能しますか? このようなユーザーの動作 (テーブルへの同時アクセス) に備えたメカニズムはありますか? サーバーの機能は C# で記述されており、アクセスの試行ごとに SqlConnection.ConnectionString を使用します。

0 投票する
1 に答える
27 参照

sql - SQLでグローバル一時テーブルを作成/削除するときに、ユーザー間でアクセスの競合はありますか?

複数のユーザーが実行することになっている SQL ストアド プロシージャがあります。すべてのユーザーは、同じサーバーと同じデータベースでこのプロシージャを実行します。実行中に、グローバル一時テーブルが作成され、最後に削除されます (たとえば、##temp_1##temp_2など)。proc がグローバル一時テーブルを作成するとき、次のコードを使用します。

だから私の質問は、 と が作成されたときに、User A別のマシンで開始し、彼の を作成し始めることです。上記のコードによると、存在する場合はデータベースから削除されます。この操作は に影響しますか? ユーザーが互いに影響し合っている場合、それを回避する方法はありますか?##temp_1##temp_2User B##temp_1##temp_1User A

どうもありがとう。

0 投票する
0 に答える
67 参照

mysql - SQL: データベースへの安全なアクセスと変更を同時に行う方法を理解しようとしている

だから、私は現在MySQLで作業していますが、一般的な概念を理解しようとしているので、SQLの答えはおそらくうまくいくでしょう。

そのため、並行環境ではスレッド セーフが明らかに重要です。私は主に Java でプログラミングを行っており、スレッドの競合を避けるために変更可能な状態を保護するコードを書くことには常に細心の注意を払っています。

ただし、SQL では、同じレベルの安全性を実現する方法について非常に混乱しています。ですから、わからないことから始めて、混乱していることに進み、そこから理解していきます。

まず、私が知っているのはトランザクションです。自動コミットを無効にし、セーブポイント、ロールバックなどを使用します。私が理解しているように、トランザクションはコミットの時点でアトミックです。

しかし、明示的なロック ステートメントや同時実行モデル (楽観的、悲観的) への言及も見てきました。また、すべてにトランザクションを使用して、それが安全であると仮定したくもありません。全体を理解しない限り、コードを書きません。何かを偶然に任せたくありません。

さらに、トリガー、プロシージャーなどについてはどうでしょうか。トランザクションでそれらを使用するにはどうすればよいですか? そこで原子性を確保するにはどうすればよいですか?

これは少し複雑すぎる気がしますが、複数のスレッドとユーザーがデータベースを安全に変更できるようにする方法について、包括的で明確な説明を探しています。私はそれよりもSQLをよく理解しているので、完全ではありません.ELI5ですが、プロセスを本当に完全に説明しているもの.

ありがとう。私の検索では、このサイトでこの質問に適切に一致するものは見つかりませんでしたが、重複している場合はお詫びし、この質問がロックされる前に適切な回答へのリンクを提供していただくようお願いします.