問題タブ [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.

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

hibernate - 休止状態からのトップリンクの使用

休止状態を使用していますが、休止状態を使用しているアプリケーションを追加したいと考えています。私が直面している問題は、その結合されたアプリケーションでグローバルトランザクションを実行したいときです。私はコンテナーとして weblogic を使用しています。問題は、休止状態が独自の接続を作成したことです。トップリンクでその接続のみを使用する必要があります...どうすればそれを達成できるか教えてもらえますか?????

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

wcf - WCF トランザクション フローの質問

クライアントがトランザクションを送信した場合はトランザクションを受け入れ、何も送信されない場合はトランザクションを作成しないように、WCF サービス操作を構成したいと考えています。これは、COM+ のサポートされているトランザクション属性に似ていると思います。

これが WCF トランザクションで実現できるかどうかは誰にもわかりませんか?

System.Transactions の明示的なトランザクション プログラミング モデルを使用するのではなく、WCF トランザクション プログラミング モデル (サービス操作の TransactionFlowAttribute および TransactionScopeRequired など) を使用して、これをすべて達成しようとしています。

これができるようになりたいと思う理由の例を次に示します。

ServiceA は、2 つのデータ サービスを呼び出す高レベルのビジネス オペレーションを実装します。サービス B の操作は 1 回のデータベース更新を行い、サービス C の操作は 2 回のデータベース更新を行います。

ServiceA ----> ServiceB ----> <1 DB 更新>
|
V サービス C ----> <2 DB 更新>

ServiceC の 2 つのデータベース更新は、ServiceC をルートとするトランザクション内で実行する必要があります。サービス B の単一のデータベース更新は、トランザクション内で行う必要はありません。ただし、ServiceA は、ServiceB を必要とするトランザクションを定義し、ServiceC のデータベース更新は 2 つのアトミックな作業単位として発生します。

私の質問は、ServiceA によって呼び出されたときにそのトランザクションに参加するように ServiceB を構成する方法です。ただし、Service B が Service A ではなく直接呼び出される場合、データベースの更新は 1 回しか行われないため、トランザクション内で実行する必要はありません。

ありがとう、

デビッド・マドリアン

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

.net - 「分散トランザクション」をプログラムするにはどうすればよいですか?

過去に、私のデータベースのニーズはすべて sqlite によって解決されました。現在、潜在的に大きくなる可能性のあるデータベースを設計しており、「分散トランザクション」を調べました。それをどのようにプログラムしますか?分散トランザクションとは何かを説明する結果がいくつか見つかりましたが、それをプログラムする方法は説明されていません。

私はコードで、より大きなトランザクションにバッチ処理したいトランザクションがいくつかあることを知っています。私は.NETを使用しています。PK が 1 つのデータベースにあり、名前や設定などのユーザー情報が別のデータベースにあるユーザーを作成するにはどうすればよいでしょうか。これは別の質問かもしれませんが、2つの機能がある場合。1 つはメディアの説明を更新し、もう 1 つは同じサーバー上または別のサーバー上にあるコンテンツを更新します。これらのトランザクションをネストし、最後にのみコミットする方法を教えてください。

0 投票する
3 に答える
720 参照

sql-server - 複数のデータベース接続ごとに 1 つのトランザクションを使用する意味があるのはいつですか?

1 つの共有データベース トランザクションと複数の接続を持つことが理にかなっているのは、どのようなシナリオでしょうか? ありがとう。

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

database - トランザクションがコミットされる前の JMS メッセージの配信

アプリケーション サーバー (Glassfish) でデータベースJMSを使用する非常に単純なシナリオがあります。シナリオは非常に単純です。

問題は、挿入がデータベースにコミットされる前にメッセージが配信されることがあるということです。これは、2 フェーズ コミット プロトコルを考えると理解できます。

この問題についての人と話し合ったことがありますが、答えはいつも「奇妙です。すぐに使えるはずです」でした。

私の質問は次のとおりです。

  • そのままでどのように機能するのでしょうか?
  • 私のシナリオは非常に単純に聞こえますが、同様の問題を抱えている人がもっといないのはなぜですか?
  • 私は何か間違ったことをしていますか?この問題を正しく解決する方法はありますか?

問題の私の理解についてもう少し詳しく説明します。

このタイミングの問題は、参加者がこの順序で処理される場合にのみ存在します。2PC が参加者を逆の順序 (最初にデータベース、次にメッセージ ブローカー) で処理する場合は問題ありません。問題はランダムに発生していましたが、完全に再現可能でした。

Glassfish のドキュメントにも、JTA、JCA、および JPA 仕様の分散トランザクションの参加者の順序を制御する方法が見つかりませんでした。使われる順番に応じて分散トランザクションに登録されると想定できますが、JPA などの ORM では、いつデータがフラッシュされ、いつデータベース接続が実際に使用されるのかを知ることは困難です。何か案が?

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

.net - 分散トランザクションを促進するMSDTCの信頼できるテスト?

MSDTCがトランザクションを分散トランザクションにプロモートしたことを確実に確認するにはどうすればよいですか?

これは、.netでTransactionScopeを使用する場合です。

現在、同僚は自分のマシンのコーディネーターをシャットダウンすることでこれをテストしています。例外がスローされた場合、これはトランザクションを促進する試みが発生した証拠と見なされます。これは有効なテストですか?

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

soa - SOA と分散トランザクション

サービス指向アーキテクチャで分散トランザクションが意味を持つのはいつですか?

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

sql-server - LinqToSql と Ado.Net のみを使用しているのに、TransactionScope が分散トランザクションを使用するのはなぜですか

1 台のマシンで問題が発生し、次のエラー メッセージが表示されます。

「サーバー XXX の MSDTC は利用できません。」

このコードは、TransactionScopeを使用して LingToSql データベース コードをラップしています。トランザクション内には未加工の Ado.net もあります。

1 つの SQL データベース (2005 年) しかアクセスされていないのに、なぜ分散トランザクションが使用されているのでしょうか?

(コードは現在のセットアップでサーバー上で動作する必要があるため、MSDTC を有効にする方法を知りたくありません)

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

database - データベースシャーディングで非正規化/セカンダリインデックスをどのように処理しますか?

2つのセカンダリインデックスを持つ「メッセージ」テーブルがあるとします。

  • "recipient_id"
  • "sender_id"

「メッセージ」テーブルを「recipient_id」でシャーディングしたい。特定の受信者に送信されたすべてのメッセージを取得する方法では、1つのシャードにクエリを実行するだけで済みます。

しかし同時に、特定の送信者から送信されたすべてのメッセージを要求するクエリを作成できるようにしたいと思います。ここで、そのクエリを「メッセージ」テーブルのすべてのシャードに送信したくありません。これを行う1つの方法は、データを複製し、「message_by_sender」テーブルを「sender_id」でシャーディングすることです。

このアプローチの問題は、メッセージが送信されるたびに、「message」テーブルと「message_by_sender」テーブルの両方にメッセージを挿入する必要があることです。

しかし、「message」に挿入した後、「message_by_sender」への挿入が失敗した場合はどうなりますか?その場合、メッセージは「message」に存在しますが、「message_by_sender」には存在しません。

メッセージが「message」に存在する場合、2フェーズコミットに頼らずに「message_by_sender」にも存在することを確認するにはどうすればよいですか?

これは、データベースをシャーディングする人にとっては非常に一般的な問題であるに違いありません。どのように対処しますか?