35

分散トランザクションに関するウィキペディアの記事はあまり役に立ちません。

分散トランザクションとは何かについて、より詳細な概要を説明していただけますか?

また、ネットワークに接続された 2 台以上のコンピューターでデータを更新するトランザクションをアプリケーションまたはデータベースが実行する必要がある理由の例を教えてください。

古典的な銀行の例を理解しています。私は、Dynamo、Bigtable、HBase、Cassandra などの Web スケール データベースでの分散トランザクションに関心があります。

4

6 に答える 6

36

通常、トランザクションは 1 つのデータベース サーバーで発生します。

BEGIN TRANSACTION
SELECT something FROM myTable
UPDATE something IN myTable
COMMIT

分散トランザクションには複数のサーバーが含まれます。

BEGIN TRANSACTION
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2
COMMIT

問題は、原子性などのトランザクション プロパティが両方のサーバーで満たされていることを確認するために、サーバーが通信する必要があるという事実にあります。トランザクションが成功した場合、両方のサーバーで値を更新する必要があります。トランザクションが失敗した場合、両方のサーバーでトランザクションをロールバックする必要があります。あるサーバーで値が更新されても、別のサーバーでは更新されないというようなことがあってはなりません。

于 2010-11-18T16:46:41.513 に答える
14

分散トランザクションは複数の物理システムにまたがりますが、標準のトランザクションはそうではありません。システム間の同期は、従来の標準トランザクションには存在しなかった必要性になります。

ウィキペディアの参照から...

...分散トランザクションは、異なる物理的な場所に分散された複数の参加データベース間で同期する (または ACID プロパティを提供する) 必要があるデータベース トランザクションと見なすことができます...

于 2010-11-18T16:44:49.987 に答える
7

分散トランザクションは、複数のコンピューター間で機能するトランザクションです。コンピューター A のプログラムのメソッドでトランザクションを開始するとします。次に、コンピューター A のメソッドのデータに変更を加え、あとでメソッドがコンピューター B の Web サービスを呼び出します。コンピューター B の Web サービス メソッドは失敗し、トランザクションをロールバックします。トランザクションが分散されるため、コンピューター A で行われた変更もロールバックする必要があることを意味します。Windows 上の分散トランザクション コーディネーターと .net フレームワークを組み合わせることで、この機能が容易になります。

于 2010-11-18T16:46:20.363 に答える
1

分散トランザクションは、分散データベース (つまり、物理的に離れた複数のシステムにデータが格納されているデータベース) 上のトランザクションです。すべてのマシンが一致したままであることを保証するために (特に通信において) かなりの複雑さが含まれているため、これは注目に値します。

于 2010-11-18T16:48:13.047 に答える
0

一般に,分散トランザクションには複数の物理サーバーが含まれます。分散トランザクションには次の 2 つのクラスがあります。

  1. 論理データベースである分散データベースのデータを更新しますが、データは複数の物理サーバーに格納します。例としては、Google の Spanner、または PingCAP の TiDB があります。このような場合、DB システムが分散トランザクションを処理し、開発者は気にする必要はありません。

  2. 複数のデータベースまたは複数のサービスのデータを更新します。マイクロサービスのコンテキストでは、クーポン、アカウント、支払いなどは注文システムの個別のサービスになる場合があります。この場合、開発者は更新の原子性を確保する必要があります。トランザクションが成功した場合、両方のサーバーで値を更新する必要があります。トランザクションが失敗した場合、両方のサーバーでトランザクションをロールバックする必要があります。あるサーバーで値が更新されても、別のサーバーでは更新されないというようなことがあってはなりません。この記事では、分散トランザクション管理の最も古典的な 7 つのソリューションで、分散トランザクションについて詳しく説明しています。

于 2021-10-12T07:58:35.930 に答える