Durability in PGD Essential
===========================

デフォルトでは、 PGD
Essentialはノード間で非同期レプリケーションを使用しますが、同期レプリケーションを使用するように構成することもできます。これにより、データの耐久性と可用性の点で高い柔軟性が可能になります。非同期レプリケーションは、より低いレイテンシーとより高いスループットを提供しますが、同期レプリケーションは、パフォーマンスを犠牲にしてより強力な一貫性保証を提供します。
PGD
Essentialでは、コミットスコープを使用してレプリケーション戦略を選択できます。

コミットスコープ
----------------

コミットスコープはPGD
Essentialの強力な機能であり、データの耐久性と可用性を制御できます。これらにより、各トランザクションに必要な耐久性のレベルを指定できるため、アプリケーションのニーズに基づいてパフォーマンスと一貫性のバランスを保つことができます。
PGD
Essentialには、トランザクションの持続性などを制御するために使用できる4つの事前定義されたコミットスコープがあります。

- ローカルプロテクト

- ラグプロテクト

- マジョリティプロテクト

- アダプティブプロテクト

PGD
Essentialの事前定義されたコミットスコープは、パフォーマンスとデータの安全性のバランスを提供するように設計されています。
PGD
Essentialコミットスコープを追加、削除、または変更することはできません。
PGD
Expandedでは、独自のコミットスコープを作成および管理できるため、耐久性保証の柔軟性と制御が可能になります。

ローカルプロテクト
^^^^^^^^^^^^^^^^^^

これは、PGD
Essentialのデフォルトのコミットスコープです。耐久性保証のない非同期コミットを提供します。これは、トランザクションがローカルノードのWALに書き込まれるとすぐに、クラスター内の他のノードからの確認を待たずにコミットされたと考えられることを意味します。

ラグプロテクト
^^^^^^^^^^^^^^

このコミットスコープにより、遅延時間が指定された制限内この場合30秒であり、コミット遅延も指定された制限この場合10秒内である場合にのみトランザクションがコミットされたと見なされます。これは、ネットワークの問題またはノードに障害が発生した場合のデータの損失を防ぐのに役立ちます。

マジョリティプロテクト
^^^^^^^^^^^^^^^^^^^^^^

このコミットスコープは、マジョリティオリジングループに基づいて耐久性保証を提供します。これにより、トランザクションは、オリジングループ内のノードの大部分によって確認された場合にのみコミットされたと見なされます。これは、ノードに障害またはネットワークの問題が発生した場合に、データの一貫性と耐久性を保証するのに役立ちます。

アダプティブプロテクト
^^^^^^^^^^^^^^^^^^^^^^

このコミットスコープは、より柔軟な耐久性保証を提供します。これにより、トランザクションはマジョリティオリジングループの同期コミットに基づいてコミットされたと考えられますが、指定されたタイムアウトこの場合10秒内にトランザクションを確認できない場合、非同期コミットに低下する可能性があります。これは、ネットワーク遅延またはノードの障害により、トランザクションの確認に遅延が発生する可能性があるシナリオで役立ちます。

コミットスコープの詳細については、
`Commit Scopes <https://www.enterprisedb.com/docs/pgd/latest/reference/commit-scopes/>`_ リファレンスセクションと `Predefined Commit Scopes <https://www.enterprisedb.com/docs/pgd/latest/reference/commit-scopes/predefined-commit-scopes/>`_ リファレンスページを参照してください。

コミットスコープを使用する
--------------------------

PGD
Essentialでコミットスコープを使用するには、トランザクションの実行時に目的のコミットスコープを指定できます。これにより、アプリケーションのニーズに基づいてデータの耐久性と可用性を制御できます。たとえば、より高いレベルの耐久性を必要とするトランザクションに\ ``lag protect``
コミットスコープを使用し、耐久性よりパフォーマンスを優先するトランザクションに\ ``local protect``
コミットスコープを使用できます。

トランザクション内
^^^^^^^^^^^^^^^^^^

``SET LOCAL``
コマンドを使用して、トランザクションのコミットスコープを指定できます。たとえば、トランザクションの\ ``lag protect``
コミットスコープを使用するには、次のコマンドを実行できます。

.. code:: sql

   BEGIN;
   SET LOCAL bdr.commit_scope = lag protect;
   - - Your transaction statements here
   COMMIT;

これにより、トランザクションが指定されたコミットスコープでコミットされることが保証され、目的のレベルの耐久性と可用性が提供されます。

セッションの場合
^^^^^^^^^^^^^^^^

``SET``
コマンドを使用して、セッション全体のコミットスコープを設定することもできます。たとえば、セッション全体の\ ``majority protect``
コミットスコープを設定するには、次のコマンドを実行できます。

.. code:: sql

   SET bdr.commit_scope = majority protect;

これにより、セッションで実行されるすべてのトランザクションが指定されたコミットスコープを使用し、目的のレベルの耐久性と可用性を提供します。

グループの場合
^^^^^^^^^^^^^^

``bdr.alter_node_group_option()``
ファンクションを使用して、PGDグループのデフォルトのコミットスコープを設定することもできます。たとえば、
PGDグループの\ ``adaptive protect``
コミットスコープを設定するには、次のコマンドを実行できます。

.. code:: sql

   SELECT bdr.alter_node_group_option(
           node_group_name:=mygroup,
           config_key:=default_commit_scope,
           config_value:=adaptive protect);

これにより、指定されたPGDグループで実行されたすべてのトランザクションが指定されたコミットスコープを使用し、セッションまたはトランザクションレベルの設定でオーバーライドされない限り、目的のレベルの耐久性と可用性を提供します。
