問題タブ [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.
vb.net - TableAdapter が DataTable のインメモリ値を更新しない
デザイナーが作成したコマンドを備えた TableAdapter があります.Update()
。TableAdapter には、1 つのレコードの 1 つのフィールドだけを更新するコマンドもあります。このコマンドは.AddBankName
.
ただし、同時実行違反をスローする.AddBankName
原因になっているようです。.Update()
これは、DB の BankName フィールドを.AddBankName
実際に変更している場合にのみ発生します。
したがって、私が推測しているのは、TableAdapter のAddBankName
クエリが、TableAdapter が保持するデータベース テーブルのインメモリ レコードを更新していないということです。
AddBankName
正しい更新を行うにはどうすればよいですか。または - どうすれば自分でできますか?
これは私のコードの抜粋です。UpdateDB
何回でも呼び出せる...
java - Apache Camel - JPA エンドポイントへのメッセージのルーティング - 順序を維持するが、カテゴリ ヘッダーに基づいてプールに分割する
多数のエンドポイント (エージェント) から多数のメッセージを取得する単純なプロジェクトがあります。これらのエージェントはすべて、同じ形式のメッセージ (データベースに配置されるエンティティ オブジェクト) を出力します。すべてのエージェントが 1 つのキューに書き込み、これらを消費して JPA 経由でデータベースに送信します。
したがって、基本的にシステムには、1 つのキューにメッセージを書き込むプロデューサーのコレクションがあります。キューはシングル スレッドであり、メッセージが受信されたときにそれを受け取り、データベースにダンプします。
ここでの問題は、この方法が遅いことです。ソースに基づいてこれらのメッセージを分割するために使用できる Camel の機能 (再シーケンスなど) はありますか? そのため、Agent1 からのメッセージは作成された順序で永続化する必要がありますが、Agent2 からのメッセージは別のものであるため、Agent1 のメッセージの順序で待機する必要はありません。2 つのエージェントの場合、エージェントごとに 1 つずつ、2 つのキューを作成するだけなので、これは簡単な問題です。多数のエージェントが存在するため、拡張可能なソリューションが必要です。
これをキャメルでネイティブに達成するパターンはありますか? エージェント名で同期し、1 つのメッセージのみをマルチスレッド JPA 書き込みキューに入れる独自のホールドアウト キューを作成することもできますが、これは、次のいずれかを行う必要があるため、少し回り道になります。キューから jpa camel ルートへのコールバックを設定するか、camel を使用せずに独自のマネージャーを介して実行します (これが複雑になるわけではありませんが、Camel などを使用してこれをすべて実行できれば素晴らしいことです)いわば、車輪を再発明する必要はありません)。
java - Oracle で一意のキーを使用せずに重複挿入を防止する
これは、Web アプリケーション/Web サービスを介した会員登録のユース ケースです。電話、住所などの複数のテーブルを見て、メンバーが重複しているかどうかを確認するための複雑なアルゴリズムがあります。アルゴリズムは、メンバーの国によって異なります。したがって、この制限は、主キー/一意キー制約を使用して実装することはできません。
したがって、Javaコードにチェックがあります。しかし、2 つの重複する同時要求がある場合、2 つの Java スレッドはメンバーが存在しないことを認識し、両方がレコードを挿入して重複が発生します。このような重複挿入を防ぐにはどうすればよいですか?
行レベルのロックまたは Hibernate の楽観的同時実行性を使用して、更新を防ぐことができます。このような挿入を防ぐためにテーブル レベルのロックを考えることができますが、更新もブロックするため、アプリケーションのパフォーマンスが制限されます。私が考える別のオプションは、id = 'memberInsert'のレコードでロックテーブルを作成し、JDBCを介してすべての挿入を強制して、このレコードで行レベルのロックを取得することです。
ありがとう
mysql - 切断なしで同時接続しているユーザーに MySQL と同時更新が表示される
phpmyadmin で管理されている MySQL データベースがあります。私の同僚の 1 人は、すべての同時接続が閉じられるまで、データベースが DB への更新を解析しないと主張しています。彼は、20 人のユーザーが同じ DB に接続して更新を行っている場合、更新が完了する前に 20 人のユーザー全員を切断する必要があると言っていると思います。つまり、1 人のユーザーがテーブルを更新した場合、他のユーザーはすべて切断するまで、そのテーブルを参照できません。これは事実ですか?
私は周りを見回しましたが、答えが見つかりません。MySQL のリファレンス マニュアルには、私が知る限り、実際には何も書かれていません。また、SO に関する同様の質問がいくつかありますが、この質問に答えるものは見つかりませんでした。私の同僚によると、これはほぼすべての DB と DBMS に存在する制限です。私はこれが真実だとは思いませんが、私は正しいことよりも真実を知ることに関心があります。
実行している phpmyadmin のバージョンは 2.11.11.3 で、MySQL のバージョンは 5.0.77 です。
sql - postgresql 書き込み可能な共通テーブル式の同時実行
特にこのサイトから、postgres-9.1 で書き込み可能な共通テーブル式を使用することについて学びました。http://vibhorkumar.wordpress.com/2011/10/26/upsertmerge-using-writable-cte-in-postgresql-9-1/
このことを何人かの同僚に話したところ、postgres がこのような操作を行う際に使用する同時実行モデル/安全性について尋ねられました。私が最初に考えたmytable
のは、ステートメントの実行全体でロックされるため、すべての状況でスレッドセーフになるということでした。
それは正しい仮定ですか?postgres のステートメント実行の内部同時実行モデルについてはよくわかりません。しかし、誰かが好きなだけ詳細に行きたいのであれば、それは素晴らしいことです =]
hibernate - spring mvc (休止状態) での並行処理の処理
これを実装する適切な方法について疑問に思っているのは私だけだとは信じがたいですが、残念ながら私の検索では良い解決策が返されませんでした。
基本的に、Spring MVC と休止状態を使用して Web アプリを実装しています。これは jsp ページを指す MVC モデルであるため、リクエストを実行した後にオブジェクトを失い、更新を行う前に ID から再構築します。
並行性を念頭に置いてこれを再設計する最良の方法は何でしょうか? (現在、同時実行性は考慮されていません!!) はい、バージョンを JSP の非表示フィールドとして保存し、ポスト リクエストで送信できますが、それは「エレガントな」ソリューションではないようです。より良い方法はありますか?
c# - Entity Framework と DBContext の問題
アプリケーションで Entity Framework の複数の DBEntityContext を使用しないように警告されました。その理由は、データベースへの同時アクセスによるデッドロックのリスクです。
誰でもこれを確認できますか?これが本当なら、DBContext に Singleton オブジェクトを実装するのは良い考えですか?
この問題に関する記事は大歓迎です。
ありがとうアドバンス。
database - タイムスタンプベースの同時実行制御プロトコルがより広範に使用されないのはなぜですか?
データベース理論の概念として、私はタイム スタンプ ベースの同時実行制御プロトコルを初めて知って以来、大ファンです。あまり使われていないことに気づきました。何故ですか?それとも私が間違っているだけですか?
編集:ここで説明されているものと同様に、読み取りと書き込みのタイムスタンプとタイムスタンプの順序が固定されたタイムスタンプ付きのトランザクションを持つタイムスタンプ付きのデータアイテムを意味します:http: //en.wikipedia.org/wiki/Timestamp-based_concurrency_control
azure - Azureデータベースの同時使用の問題
一日中、夜も朝も検索した後、すべてのアイデアを使い果たしたので、皆さんがこれを実行して、明るいアイデアがあるかどうかを確認したかっただけです。私たちが直面している問題は、タイムアウト、接続の切断/切断、データベースサーバーへのアクセス不能など、同時使用時(セレンテスト)のデータベース接続に常に集中しています。
同じデータベース(SQL Azure)を指す同じコードで同じセレンテストを実行している場合でも、ローカルで問題が発生していないため、この問題はAzureに限定されているようです。したがって、アウトバウンドの問題であることがわかります。 SQLAzureのデータベース接続。これまでのところ、次のことを試しました。
- Azureの一時的な障害処理–SQLAzureサービス自体に一時的な問題が発生した場合の再試行ロジックが用意されています。
- 通信プロトコルの変更– TCPと名前付きパイプの両方を試しましたが、両方で同じ問題が発生しました。
- データベース接続のタイムアウト間隔を調整する–これを無駄に増やしてみました。
- 複数のアクティブな結果セットの追加–これを接続文字列に追加しても無駄になります。
- すべてのクエリの接続状態チェック– DataContextを返すときに、接続をチェックし、必要に応じて再度開きます。
- 接続プールをオフにしました-これも試みましたが成功しませんでした。
変更されたデザインパターン–作業単位の設計パターンを実装するまでに至りました。データベース接続はすべての作業単位の後に起動されて破棄されていましたが、これにより、遅延読み込み、メソッドへのオブジェクトの受け渡しなどの問題が発生しました。この時点では、かなりのやり直しが必要でした。
役割のサイズを変更する– Windows Azureで暗黙的な接続制限が発生した場合に、役割のサイズを増やすことを最後に検討できます。これは現在展開されているため、機能する可能性はまだ半分です。
サイトのインフラストラクチャは次のとおりです。
- コードファーストEFコンテキストであるDataContextクラス(DbContextを拡張)。
- BusinessLayerクラスには、非静的なプライベートDataContextが含まれています。DataContextは、各Manager/Helperクラスに注入されるコンストラクターです。
- BusinessLayerServiceクラスには、パブリックのスレッド静的BusinessLayerインスタンスが含まれています。
- MVCサイトは、BusinessLayerService.Instanceを使用して、渡されたDataContextをクエリおよび更新するマネージャークラスにアクセスします。
どんな助けでも大歓迎です。
更新: VMサイズをMediumに上げましたが、同じ問題が発生するまでに時間がかかっただけでした。
問題が発生し始めたとき、チームメンバーは次の例外が発生したことに気づきました。
InvalidOperationException:コマンドを実行するには、開いている使用可能な接続が必要です。接続の現在の状態が切断されています。
これは、データベースがヒットするたびに発生し始めました(コードの特定の領域に固有ではありませんでした)。
java - RESTサービス用の単一のMySqlデータベース接続
RESTサービスを介してデータベースにデータを取得して投稿するAndroidアプリケーションを開発しています。JavaでJerseyとTomcatを使用してRESTサービスを構成しました。
RESTサービスの開始時に単一のデータベース接続を作成しました。これで、すべてのAndroidクライアントが単一のデータベース接続を使用します。シナリオで単一のデータベース接続を使用することをお勧めします。単一のデータベース接続で複数のデータベース接続を利用できますか。同時リクエスト??
親切に提案してください....
更新
次のシナリオをテストすると、異なる結果が得られます。Getアノテーションのみを使用してJerseyを使用してtomcatで単純なRESTサーバーを構成しました。このアノテーション内に、データベース接続を使用してIDが300の従業員の名前を取得するコードを記述します。 RESTが開始されたときに確立された http://192.168.15.9:8080/Rest/rest/person/sample
ので、Webブラウザーに書き込むと、従業員名を取得しました...次に、バッチファイルを作成して100個のタブでURLを開き、バッチファイルを実行しました。同時に、仮想マシンからURLを開き、遅滞なく従業員名を取得しました。また、従業員名は20秒後に100個のタブに表示されます。単一のデータベース接続を同時ユーザーに使用できない場合は、なぜ応答しますか。急速 ??誰か説明してもらえますか?