Replication
===========

EDB Postgres
DistributedPGDの中心には、レプリケーションシステムBDRがあります。
BDRはBi-Directional
Replicationの略で、マルチプルの書き込みノードを使用して分散Postgresクラスターを作成できるマルチマスターレプリケーションシステムです。これは、クラスター内の任意のノードに書き込むことができ、変更はクラスター内の他のすべてのノードにレプリケートされることを意味します。

クラスター内の任意のノードに書き込むことができるからと、それを行う必要があるという意味ではありません。ほとんどの場合、クラスター内の単一のノードへの書き込みが必要になります。書き込みリーダーノードと呼ばれます。これは、クラスター内の他のすべてのノードへの変更のレプリケーションを調整する責任を負うノードです。実際、PGD
Essentialでは、書き込みリーダーノードにのみ書き込むことができ、クラスター内の他のすべてのノードは読み取り専用です。

ただし、さまざまな場所に複数の書き込みノードがある地理分散クラスターを使用している場合など、クラスター内の複数のノードに書き込みが必要になる場合があります。これらの場合、
BDRレプリケーションシステムを使用して、書き込みノード間で変更をレプリケートできます。これおよび他のシナリオは、
PGD
Expandedが設計されているものであり、これらのユースケースをサポートする追加の機能と機能をアクティブにします。

レプリケーションの仕組み
------------------------

PGDは、論理レプリケーションを使用して、クラスター内のノード間で変更をレプリケートします。これは、変更が物理レベルではなく論理レベルで複製されることを意味します。これにより、変更をレプリケートする方法の柔軟性が向上し、変更のより効率的なレプリケーションも可能になります。

クラスター内のテーブルに変更が行われると、最初に書き込みリーダーノードのログ先行書き込みWALに書き込まれます。
WALは、データベースに行われたすべての変更のログであり、データベースの耐久性と一貫性を保証するために使用されます。変更がWALに書き込まれると、クラスター内の他のすべてのノードに複製されます。

レプリケーションプロセスはデフォルトで非同期です。つまり、変更はクラスター内のすべてのノードにすぐにレプリケートされません。代わりに、変更はクラスター内の他のノードにバッチで送信されるため、より効率的なレプリケーションが可能になり、ネットワークの負荷が削減されます。

変更はクラスター内の他のノードが受信すると、データベースのローカルコピーに適用されます。このプロセスはWALの再生と呼ばれ、クラスター内のすべてのノードがデータの一貫したビューを持つようにします。

コミットスコープとレプリケーション
----------------------------------

非同期レプリケーションはレプリケーションのデフォルトモードですが、唯一のモードではありません。
PGDでは、いわゆるコミットスコープを介して定義可能なレプリケーション構成ができます。コミットスコープは、トランザクションまたはグループ内のすべてのトランザクションに適用でき、クラスター内の他のノードに変更をレプリケートする方法を定義します。これにより、レプリケーションプロセスの動作を制御でき、パフォーマンスを最適化したり、変更が特定の方法でレプリケートされたことを確認したり、ネットワークとサーバーの不利な条件を正常に処理したりすることができます。

- PGD
  Expandedには、完全に定義可能なコミットスコープがあり、クラスター用のカスタムレプリケーション構成を作成できます。詳細については、
  :ref:`commit scopes in PGD Expanded <Commit Scopes>` を参照してください。

- PGD
  Essentialには、変更をレプリケートする方法を制御するために使用できる4つの事前定義されたコミットスコープがあります。詳細については、
  :ref:`commit scopes in PGD Essential <Durability in PGD Essential>` を参照してください。

レプリケートとは何ですか?
-------------------------

PGDでは、次の種類の変更がレプリケートされます。

- **データの変更**
  テーブルへの挿入、更新、および削除は、クラスター内のすべてのノードに複製されます。これは、DMLデータ操作言語レプリケーションと呼ばれます。

- **スキーマの変更**
  テーブルの作成や削除など、データベースの構造の変更も、クラスター内のすべてのノードにレプリケートされます。これは、
  DDLデータ定義言語レプリケーションと呼ばれます。ただし、すべてのDDL変更がレプリケートされるわけではありません。たとえば、テーブルへの列の追加はレプリケートされますが、列の削除はレプリケートされません。

- **構成の変更**
  レプリケーション設定の変更など、データベースの構成の変更も、クラスター内のすべてのノードにレプリケートされます。

現在、PGDは、クラスターごとに1つのPostgresデータベースのみをレプリケートします。これは、
Postgresインスタンスに複数のデータベースがある場合、レプリケーション用に構成されたデータベースのみがクラスター内の他のノードにレプリケートされることを意味します。これは、
PGD EssentialとPGD Expandedの両方で同じです。
