問題タブ [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.
sql-server - この UPDATE ステートメントで競合状態が発生する可能性はありますか?
私は、1 つの DB ですべての変更を取得し、それらを別の DB に同期するシンクロナイザー ソフトウェアを作成しています。T
この目的のために、テーブルに2 つの列を追加しました。
これで、最後の同期以降に変更されたすべての行を簡単に選択できます。
ただし、同期を実行した後、2 つのフィールドを等しくする必要があります。ただし、行を更新するとタイムスタンプも更新されるため、次のようにする必要があります。
しかし、私は疑問に思っています-これは常に機能しますか? の値を読み取った@@DBTS
後、自分の行がコミットされる前に別のユーザーがどこかで行を挿入/更新した場合はどうなりますか? これは危険なコードですか?はいの場合、どうすれば改善できますか?
c# - デッドロックのヘルプが必要です
私には独特の状況があります。コードのさまざまな部分と何千ものクライアントから常にアクセスされるテーブルがあるため、テーブルの単純な更新と挿入を行うときにトランザクションを使用しました。問題は、デッドロックエラーが発生し続けることです。誰かが私がこの問題をどのように軽減できるか考えていますか?
linq-to-sql - 1 つの操作としての Linq-to-Sql Read-Test-Write
Tasks
テーブルがあります: Id (PK), TaskName, Status
Status は次のいずれかです: Queued、Busy、Complete。
複数のスレッドを使用してタスクを処理したいので、1 回の操作で実行できるようにする必要があります。
明らかに、操作がアトミックでない場合、同時実行の問題が発生する可能性があります。Linq-to-Sql を使用して上記を行う意図的な方法 (存在する場合) は何ですか?
1) storproc または 2)db.ExecuteCommand("...")
または 3) で競合を処理できることはわかっwith try/catch
ていますが、より良い方法がないことを確認したいと思います。
非常に基本的な質問であることは承知していますが、これに対する明確な答えを見つけることができませんでした。
sql - SQLデータベースを使用したWebプロジェクトのハイロード
SQLデータベースを使用した高負荷のWebアプリケーション開発のアプローチについて質問したいと思います。さまざまな記事へのアクセスを提供する単純なCMSシステムがあると仮定します。また、記事の訪問数をデータベースに保存したいと思います。この訪問カウンターは、ユーザーが記事を見るたびに増加します。
SQLデータベースに関しては、テーブル「Article」に「visits」整数フィールドがあり、ユーザーが記事にアクセスするたびに増やす必要があります。記事に多数の同時訪問がある場合は、現在のデータベース行の「訪問」フィールド値を正しく変更する必要があります。
私は悲観的なロックアプローチを使用します:「SELECT..FORUPDATE」。ユーザーが記事にアクセスするたびに、「記事」テーブルの特定の行をロックし、「訪問」カウンターを増やします。
このアプローチは正しいですか?
プロジェクトでMySQLデータベースを使用しています。
c# - データベースアクセスアプリケーションで同時実行性を管理するための最良の方法は何ですか?
少し前に、私は複数のユーザーが取引の作成を処理するために使用するアプリケーションを作成しました。私はしばらくの間開発を行っていません、そして私がユーザー間の並行性をどのように管理したかを思い出せません。そのため、デザインに関してアドバイスを求めています。
元のアプリケーションには、次の特徴がありました。
- ユーザーごとに1つの重いクライアント。
- 単一のデータベース。
- 取引を挿入/更新/削除するための各ユーザーのデータベースへのアクセス。
- 取引テーブルを反映するアプリケーションのグリッド。そのグリッドは、誰かが取引を変更するたびに更新されます。
- WPFを使用しています。
これが私が疑問に思っていることです:
各アプリケーションのデータベースへの接続を気にする必要はないと考えるのは正しいですか?それぞれにシングルトンがあることを考えると、クライアントごとに1つの接続で問題はないと思います。
アクセスの同時実行を防ぐにはどうすればよいですか?データを変更するときはロックする必要があると思いますが、その方法を覚えていません。
データベースが更新されるたびに(たとえば、別のユーザーによって)自動的に更新されるようにグリッドを設定するにはどうすればよいですか?
よろしくお願いします!
java - データベースを通信媒体として使用して、分散アプリケーションの同時実行性を最大化する方法
古典的な生産者消費者問題に似たアプリケーションがあります。それを達成するために可能なすべての実装をチェックしたかっただけです。問題は-
プロセス A: データベースのテーブルに行を挿入します (プロデューサー)
プロセス B: テーブルから M 行を読み取り、読み取った M 行を処理後に削除します。
プロセス B のタスク: 1. M 行を読み取る 2. これらの行を処理する 3. これらの行を削除する
プロセス A の N1 インスタンス、プロセス B の N2 インスタンスが同時に実行されます。
各インスタンスは異なるボックスで実行されます。
いくつかの要件: プロセス p1 が (0,M-1) 行を読み取っている場合。プロセス p2 は、これらの行のロックを解放するまで p1 を待たずに、(M,2M-1) 行を読み取る必要があります。
hibernate - Hibernate (JPA): 複数のオブジェクトが変更およびコミットされたときに StaleObjectStateException を処理する方法
シナリオを考えてみましょう: バージョン管理された異なるテーブルから複数の行を含む Db トランザクション。
例: shopLists と製品。shopList に商品 (ショップリストにある商品の量) が含まれていて、商品に現在の在庫がある場合。
shopList を挿入または編集するときに、shopList 内のこれらの製品の在庫を更新して、在庫を一定に保つ必要があります。
そのために、トランザクションを開き、shopList を挿入/更新し、各製品の在庫を更新 (デルタを適用) してから、トランザクションをコミットします。今のところ大したことはありません。
ただし、他のユーザーが共通して 1 つまたは複数の製品を更新した可能性があります。または、shopList 自体を更新することもできます。どちらの場合も、トランザクションをコミットするときに StaleObjectStateException が発生します。
質問: StaleObjectStateException の原因となったテーブルを特定する方法はありますか?
製品が例外を引き起こした場合、関連するすべての製品を DB から更新してから、在庫デルタを再適用できます。そして、それは結構です。shopList が例外を引き起こした場合は、ユーザーが最初からやり直すことができるように、単に問題をユーザーに報告することをお勧めします。
どうもありがとうございました。
database - データベースの同時実行性がどのように機能するかのメカニズム
データベースの同時実行性がどのように機能するかを説明してもらえますか? 私はHSQLDBを使用しています。
たとえば、2 人の異なるユーザーが 2 つの異なるエントリ ポイントから同時にレコードを挿入する場合、データベースはこれをどのように処理しますか? これら 2 つの挿入コマンドは 1 つずつ実行されますか? または同時に?
他にもご存知でしたら情報提供よろしくお願いします。
どうもありがとう!
アイク
php - デッドロックとタイムアウトはACIDトランザクションを中断します
私は次のように機能するトランザクションアプリケーションを持っています:
そして、increaseNumber()内に、このようなクエリがあります。これは、このテーブルで機能する唯一の関数です。
すべてがトランザクションにラップされていますが、最近、かなり遅いクエリを処理していて、アプリケーションで多くの同時実行が行われているため、クエリが特定の順序で実行されることを実際に確認することはできません。
デッドロックによりACIDトランザクションが中断する可能性はありますか?何かを追加する関数とそれを削除する関数がありますが、デッドロックがあると、トランザクションが無視されたように、データが完全に同期していないことがわかります。
これは必ず起こるのでしょうか、それとも何か問題がありますか?
ありがとう、ドミニク