1

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

4

3 に答える 3

3

複数のデータベースがすべて 1 つのトランザクション内で更新されることを意味する場合は、Atomicity に対してこれを行います - http://en.wikipedia.org/wiki/Atomicity_(database_systems)

口座プロバイダーごとに異なるデータベースを使用する銀行振込を仮定して考えてみます。お金は一方の口座から出て、もう一方の口座に更新される必要があります。途中で失敗した場合 (たとえば、2 回目のデータベースの更新が失敗した場合)、お金は一方の口座からは離れていますが、もう一方の口座には入金されていません。これは受け入れられません。

トランザクションとは、更新の 1 つで障害が発生すると、それらがすべてキャンセル (ロールバック) され、データがトランザクション開始前の状態のままになることを意味します。

于 2010-01-29T12:41:48.967 に答える
2

個人的には、RDBMS では賢明ではないと思いますが、非常に負荷の高いデータベースの設計の複雑さが軽減されることがわかります。

たとえば、e コマースの場合、製品の在庫があるデータベースにあり、注文が別のデータベースにあるように、それらを分割することができます。この場合、注文を処理するときに在庫数を減らして請求書の数を増やしたくはありません。その場合、グローバル トランザクションが理にかなっています。

しかし、99% は設計で解決できるより良い代替手段があります。

-- 編集: グローバル トランザクションの落とし穴 --

この 2 点が、グローバル トランザクションを使用しないことをお勧めする理由です。

ポイント 1:

グローバル トランザクションには複数のデータベース サーバーが関与します (または少なくともそうすべきです)。グローバル トランザクションには DTC (分散トランザクション コーディネーター) が必要です。単一のマシンの範囲で行われますが、複数のマシン、つまりネットワークが関与することによって行われます。

ポイント 2:

クエリが適切に設計されていない場合 (ほとんどの人は微妙な点を理解していません)、個々のデータベースのテーブルの大部分をロックしてしまう可能性があり、1 つのクエリでテーブル全体をロックしてしまうことさえあります。分散クエリ用に適切に設計されていない場合、アプリケーションは停止し、誰かが解雇されます:D. クエリが必要なものだけをロックするだけであることを確認する必要があり、データのこれらのロックされた部分が 1 つのクエリによってのみ同時に使用されるようにする必要があります。

分散クエリでテーブルをロックする方が悪いのはなぜですか? ポイント 1 のためです。これで、ファクターの注文の最後の注文をより長くロックできます。

-- 編集: 調査したい可能性のある領域 --

クラスタリング テクノロジと HPC は、多くの場合、分散ロック マネージャーを利用します。これらのテクノロジーのデータ管理バリアントを研究することで、これらの実装がグローバル ロックを取得する必要があると見なす場所 (グローバル トランザクションが行うこと) が示されるため、多くのことを学ぶことができます。

于 2010-01-29T12:42:11.950 に答える
-1

複数のデータベースに影響を与えるトランザクション操作が必要な場合。

于 2010-01-29T12:44:43.973 に答える