分散トランザクション に関するウィキペディアの記事はあまり役に立ちません。
分散トランザクションとは何かについて、概要を説明していただけますか?
また、アプリケーションまたはデータベースが2台以上のネットワークコンピューター上のデータを更新するトランザクションを実行する必要がある理由の例を挙げてください。私は古典的な銀行の例を理解しました。 Dynamo、Bigtable、HBase、CassandraなどのWebスケールデータベースでの分散トランザクションに関心があります。
通常、トランザクションは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
困難は、サーバーが両方のサーバーでatomicityなどのトランザクションプロパティが満たされるようにするためにcommunicateでなければならないという事実に起因します。トランザクションが成功した場合、値を更新する必要があります。両方のサーバー。トランザクションが失敗した場合、トランザクションは両方のサーバーでロールバックする必要があります。一方のサーバーで値が更新され、もう一方のサーバーでは更新されないことは決してありません。
分散トランザクションは複数の物理システムにまたがっていますが、標準トランザクションはそうではありません。システム間の同期は、従来は標準のトランザクションには存在しなかったニーズになります。
ウィキペディアのリファレンスから...
...分散トランザクションは、異なる物理的な場所に分散されている複数の参加データベース間で同期(またはACIDプロパティを提供)する必要があるデータベーストランザクションと見なすことができます...
分散トランザクションは、複数のコンピューター間で機能するトランザクションです。コンピューターAのプログラムのあるメソッドでトランザクションを開始するとします。次にコンピューターAのメソッドのデータに変更を加え、その後、メソッドがコンピューターBのWebサービスを呼び出します。コンピューターBのWebサービスメソッドが失敗し、トランザクションをロールバックします。トランザクションが分散されるため、これは、コンピューターAで行われた変更もロールバックする必要があることを意味します。 Windows上の分散トランザクションコーディネーターと.netフレームワークの組み合わせにより、この機能が容易になります。
分散トランザクションは、分散データベース(つまり、データが物理的に分離された多数のシステムに格納されているトランザクション)でのトランザクションです。すべてのマシンが一致したままであることを保証するために(特に通信で)かなりの複雑さが関係しているため、トランザクション全体が成功するか、まったく何も起こらなかったように見えるため、注目に値します。
私はこの投稿で分散トランザクションの詳細を表現しようとしました パフォーマンスのために分散(XA)トランザクションをどのように調整しますか?
分散トランザクションに適したデータは、整合性の要件が非常に高いデータです。通常、これはお金か何か他のものであり、古いデータを持つことは決してできません。通常、私はライブデータと正確性/一貫性の即時の必要がないデータの2つのカテゴリを定義します。
Dynamo、Bigtable、HBase、またはCassandraに関する質問の2番目の部分です。
NOSQLデータベースと分散トランザクションの間に並列を描画することはできません。このクラスのデータベースの存在自体が、分散トランザクションを回避する手段として正当化されます。分散トランザクションは、一貫性を中心にしています。これは、可用性とパーティショニングを中心としたNOSQLストレージとは正反対です。
このようなデータベースで使用される通常のトランザクションモデルは、結果整合性です。