問題タブ [distributed-transactions]
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.
.net - .Netでのトランザクション管理に必要なリソースの読み取り
実行中のプロジェクトについて、.Netベースのトランザクション管理を調べる必要があります。システムが現在何をしているのかを見始めたときに、私にいくつかの基礎/背景の参照を与えるオンラインの読書リソースを誰かが持っていますか?
ここで説明しているトランザクションは、システム間/WCFとDBの呼び出しが混在しています。
transactions - ACID は 2 フェーズ コミット プロトコルですか?
2 フェーズ コミット プロトコルが本当に ACID プロパティ、特にその「A」部分を保証するかどうか疑問に思う状況に遭遇しました。
2 つのリソースを含む理論上の分散トランザクションを見てみましょう。(私が対処しなければならなかった問題のより実用的な説明は、私のブログで見つけることができます)。シナリオは、分散トランザクションの通常の実行です (障害や回復はありません)。アプリケーションはトランザクションを開始し、両方のリソースを更新して commit() 呼び出しを発行します。コミットが完了すると、アプリケーションは両方のリソースをチェックし、完了したトランザクションからのすべての変更を確認します。すべて順調です。2PC プロトコルは機能しましたね。
さて、シナリオに少し変更を加えます。分散トランザクションが commit() を実行している間、別のアプリケーションが同じ 2 つのリソースにアクセスします。トランザクションからの変更の一部だけを確認できますか? 1 つのリソースへの変更は既に表示されているが、2 番目のリソースへの変更はまだ表示されていないとします。
私が 2PC プロトコルについて読んだすべての情報では、個々のリソースの相互の変更の可視性に関する保証を見つけることができませんでした。また、すべてのリソースが個々のコミットをまったく同時に終了することを示すものは見つかりませんでした。
sql - 分散データベーストランザクションはコミット/ロールバックが保証されていますか?
ローカルデータベースにレコードを挿入し、(Oracle Database Linkを介して)リモートデータベースにレコードを挿入するアプリケーションコードがあります。この分散トランザクションをコミットすると、ローカルデータベースとリモートデータベースの両方が両方ともコミットするか、両方がロールバックすることが保証されますか、それともリモートデータベースはコミットできてもローカルコミットは失敗する可能性がありますか(またはその逆)?
database-replication - データベースを「配布」するにはどうすればよいですか?
これまで、私の「データベースサーバー」は単一のPCであることに満足してきました。
残念ながら、負荷が大きくなりすぎているため、データベースを「分散」する必要があるようです。
それは正確には何を意味しますか?データベースを複数のサーバーに分散させるにはどうすればよいですか?また、ユーザーがクエリを実行し、「実際の」データベースサーバーに負荷を分散する中間サーバーが必要ですか?
これは、データベースの書き込みとデータベースの読み取りでどのように機能しますか?
初心者の101のウェブサイトや本はありますか?
.net - エラーがスローされたときに WCF がトランザクションをロールバックしないようにすることはできますか?
分散トランザクションに参加する次の WCF サービスについて考えてみましょう。WCF の通常の動作は、障害が発生した場合にトランザクションをロールバックすることです。その動作をオーバーライドする方法はありますか?
サービス契約:
サービスの実装:
クライアント実装スニペット:
FaultException がThrowError()からスローされると、WCF は、 DoSomething()によって行われた作業を含む分散トランザクションをロールバックします。次に、DoSomethingElse()へのクライアント呼び出しが失敗し、 「フローされたトランザクションをアンマーシャリングできませんでした」というメッセージが表示されます。次の例外が発生しました: トランザクションは既に暗黙的または明示的にコミットまたは中止されています。
私の特定のシナリオでは、この動作は望ましくありません。クライアント側で例外をキャッチし、ビジネスを続行したいと思います。キャッチできない例外が発生した場合、クライアントはトランザクションをロールバックします。
注: この質問は、トランザクション全体を中止せずに WCF で FaultException を処理する方法の複製です。、しかし、受け入れられた答えは私にとって満足のいくものではありません-すべての操作が同じトランザクションスコープ内で発生することが重要です。
sql-server - 複数のサーバーで DTC サービスがどのように機能するか
DTC サービス coss 複数のサーバー、構成の影響などを使用するために知っておくべきことについての情報または参照が必要です。開発中のソリューションは、複数のサーバーに配置される可能性があるいくつかのトランザクション WCF サービスと SQL サーバー データベースを使用します。つまり、サーバーごとに1つのDTC serevrが必要であり、それらがお互いをどのように認識しているかなどです...
初期の基本構成をできるだけ早く機能させるために、知識をすばやく得るのに役立つ収集されたチュートリアルまたは情報の任意の種類をいただければ幸いです。
事前に、貢献を歓迎します
ありがとうございました
java - 欠陥を見つけてください!タスクキューを使用して長いタスクを確実に実行する
GoogleAppEngineで成績表を作成しています。私は、評価期間ごとに各学生の成績を追跡します。採点期間は重複する可能性があります。一度に数百のこれらの成績を表示する可能性があるため、サーバーで成績を事前に計算します。したがって、1人の学生に対して、私は多くの計算された成績を持っている可能性があります-各成績期間に1つ。
これで、教師はクイズから新しいスコアを入力します。そのスコアは、多くの評価期間に分類される可能性があるため、計算された評価の多くに影響を与える可能性があります。影響を受けるすべてのグレードを再計算する必要があります。採点期間ごとに、関連するすべてのスコアを取得し、それらのスコアに対して複雑なルーチンを実行する必要があるため、これには長い時間がかかる可能性があります。30秒では不十分だと思います。特に、今日のデータストアの速度が遅い場合はなおさらです。さらに、失敗はオプションではありません。一部のグレードが更新され、他のグレードが黙って古くなることは容認できません。
ですから、タスクキューについて学ぶのに最高の時間だと思います。
私はDB構造などの専門家ではありませんが、私がやりたいことの概要は次のとおりです。
これは、関連するすべてのグレードをダーティとしてマークするための迅速な方法のようです。途中で失敗した場合は、失敗が返され、クライアントは再試行することを認識します。クライアントが後でダーティグレードをフェッチしようとすると、そこでエラーを返すことができます。
次に、タスクキューコードは次のようになります。
これが私の質問です:これは、新しいスコアが追加された後、クリーンとマークされた計算されたグレードが決してないことを保証しますか?
特定の懸念事項:
- 危険ゾーンの周りの最初のスニペットでは、
existingGrades
常に新しいものの前に保持されますか?IndividualScore
IndividualScore
別のスレッドが危険ゾーンでタスクキューコードを開始して、新しいものが実際に入力される前に、それらの既存のグレードが再びクリーンとマークされる可能性はありますか?もしそうなら、どうすればそれが起こらないようにすることができますか(すべてのグレードのトランザクションがアウトになっています)?persistenceManager.flush()
午後が閉じていなくても、部分的に行われた計算を保存するのに十分ですか?
これは一般的な種類の問題であるに違いありません。チュートリアル、特にappengineのチュートリアルへのリンクをいただければ幸いです。たくさん読んでくれてありがとう!
asp.net - Asp.net アプリケーションでの分散トランザクション
データベース 1 への呼び出し、Web サービスへの呼び出し、データベース 2 への呼び出しをすべて 1 つのイベント シーケンスで行うエンタープライズ アプリケーションがあります。処理全体をトランザクションにカプセル化したいと考えています。このシナリオで分散トランザクションを実装する最良の方法は何ですか?
環境: SQL 2008、ASP.Net 3.5
nhibernate - NHibernate 3.0:TransactionScopeと自動フラッシング
NHibernate 3.0ではFlushMode.Auto
、アンビエントトランザクションのみで実行されている場合(つまり、NHibernateトランザクションを開始しない場合)は機能しません。それが必要ですか?
(この関連する質問から恥知らずに盗まれた例)
NHibernateのソースでは、進行中のトランザクションがあるかどうかをチェックしていることがわかります(in SessionImpl.AutoFlushIfRequired
)が、関連するメソッド( )はアンビエントトランザクションを考慮しませSessionImpl.TransactionInProgress
ん-いとこConnectionManager.IsInActiveTransaction
はアンビエントトランザクションを考慮します。
java - Java:多くのスレッド内でのXAトランザクションの伝播
次のユースケースをサポートするために、Java SE(Java EEまたはSpringではない)でトランザクションマネージャー( Bitronix、JBoss TS、Atomikosなど)を使用するにはどうすればよいですか?
次のクラスがあると仮定します。
そして、次のように、そこからJavaRunnableを作成します。
これで、サービスレイヤーに別のクラスがあります。
また、クライアントはサーブレットまたはその他のマルチスレッド環境にすることができます。
BEGINTRANSACTIONおよびENDTRANSACTIONパーツの正しいコードは何でしょうか?これも実現可能ですか?そうでない場合は、何を変更する必要がありますか?要件は、updateDatabases()メソッドを並行して(同時に複数のデータベースにアクセスするため)、トランザクションを維持することです。