# 分散トランザクション

![`smart`](PercolatorTiKV01_aa_002_20220511.png)

-----------------------------------------------------------------------
分散型データベース（例えばTiDB）では、複数のノードやリージョンをまたいだ操作の一貫性と原子性を確保するために、分散トランザクションを使用します。これは、分散システムでは、異なるノードでの操作が同時に実行される可能性があるため、不一致や競合が発生する可能性があるため、重要です。

TiDBは、2PCプロトコルに基づいたGoogleのPercolatorシステムを改良して、分散トランザクションをサポートするために使用します。このシステムでは、データベースクラスタの各ノードにPD（Placement Driver）コンポーネントによって、グローバルに一意で単調増加するタイムスタンプが割り当てられます。このタイムスタンプは、トランザクションの開始時刻とコミット時刻を識別するために使用され、操作が正しい順序で実行されることを保証します。

TiDB では、RocksDB インスタンス内の3つのカラムファミリーを使用してデータ、トランザクション、ロック情報を格納するPercolator システムがあります。これらのカラムファミリーは、デフォルトのカラムファミリー、書き込みカラムファミリー、ロックカラムファミリーと呼ばれます。例えば、キーバリューのペアに対する書き込み操作が行われた場合、キーのロック情報はロックカラムファミリーに記録され、値はデフォルトのカラムファミリーに格納されます。トランザクションが正常にコミットされた場合、ロック情報は削除され、更新された値はデフォルトのカラムファミリーに記録されます。

全体的に、TiDBの分散トランザクションサポートは、複数のノードやリージョン間で一貫性と原子性の操作を可能にし、データベース内のデータの整合性と信頼性を確保します。
