Overview of durability options
==============================

概要
----

EDB Postgres分散PGDでは、 *コミットスコープ*
を使用して、耐久性、一貫性、可用性、パフォーマンスのニーズに基づいて、いくつかのレプリケーション構成から選択できます。

基本構成では、
PGDは非同期レプリケーションを使用します。ただし、コミットスコープは、デフォルトとトランザクションごとの動作の両方を変更できます。

ビルトインの物理または論理レプリケーションと同じ方法で、標準の\ ``synchronous_standby_names``
を使用して古いPostgres同期レプリケーションを構成することもできます。ただし、コミットスコープは、レプリケーション動作の柔軟性と制御を提供します。

さまざまな同期設定は、関連しているがすべて個別に実装できるアプリケーションの3つのプロパティに影響を与えます。

- 耐久性
  複数のノードに書き込むと、クラッシュ耐性が向上し、クラッシュと再起動後にデータを復旧できます。

- 可視性
  クライアントへのコミット確認により、データベースは、一部のノードセットでコミットされたトランザクションの即時の可視性を保証します。

- 競合処理
  競合はコミット後に楽観的に処理でき、コミットタイムスタンプに基づいてトランザクションがレプリケートされるときに競合が解決されます。または、プリコミット時に悲観的に処理できます。クライアントは、最終的にすべてのノードに適用されるトランザクションに依存して、さらなる競合または中止を取得して、クライアントにエラーを直接通知できます。

コミットスコープでは、トランザクションの4種類の制御耐久性が許可されます。

- :ref:`Synchronous Commit <Synchronous Commit>` 
  この種のコミットスコープでは、オリジンノードが大部分のノードの確認を待機する動作が可能になり、ネイティブのPostgres同期コミットのように動作します。

- :ref:`How Quorum Commit works <How Quorum Commit works>` 
  クォーラムコミットは、内部的に2フェーズコミットを使用して、クラスター全体でトランザクションがコミットまたはロールバックを保証し、クラスター全体で競合するトランザクションを効果的にシリアル化します。

- :ref:`Commit At Most Once <Commit At Most Once>` 
  この種のコミットスコープはクライアントと連携して、再試行前にトランザクションがコミットされたことを確認し、フェールオーバーシナリオでの重複コミットを防ぎます。

- :ref:`Lag Control <Lag Control>` 
  この種のコミットスコープは、コミットを続行する前にレプリケーションの観点からノードがどれだけ遅れていてもよいかを制御します。

同期コミットとCAMOは、それぞれ、耐久性のさらなる制御のために
:ref:`Degrading commit scope rules <Degrading commit scope rules>`  をサポートしています。

..  Note Legacy synchronization availability ::
   下位互換性のため、PGDは`synchronous_commit` および`synchronous_standby_names` を使用した同期レプリケーションの構成を引き続きサポートしています。このオプションの詳細については、 :ref:`Legacy synchronous replication using PGD <Legacy synchronous replication using PGD>` を参照してください。代わりに :ref:`Synchronous Commit <Synchronous Commit>` を使用することをお勧めします。
