Predefined commit scopes
========================

EDB Postgres
DistributedPGDは、使用可能な次の事前定義されたコミットスコープを提供します。

- :ref:`ローカルプロテクト <ローカルプロテクト>` 

- :ref:`ラグプロテクト <ラグプロテクト>` 

- :ref:`マジョリティプロテクト <マジョリティプロテクト>` 

- :ref:`アダプティブプロテクト <アダプティブプロテクト>` 

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

.. code:: text

   ASYNCHRONOUS COMMIT

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

このコミットスコープは、高可用性と低遅延がデータの耐久性よりも重要であるシナリオに適しています。ただし、ノードに障害またはネットワークの問題が発生した場合のデータ損失に対する保証はありません。

ラグプロテクト
--------------

.. code:: text

   MAJORITY ORIGIN GROUP LAG CONTROL (max_lag_time = 30s, max_commit_delay = 10s)

``lag protect``
コミットスコープは、マジョリティオリジングループのラグタイムに基づいて、耐久性保証を提供します。
これにより、遅延時間が指定された制限内この場合30秒であり、コミット遅延も指定された制限この場合10秒以内である場合にのみトランザクションがコミットされたと見なされます。これは、ネットワークの問題またはノードに障害が発生した場合のデータの損失を防ぐのに役立ちます。

このコミットスコープは、データの一貫性と耐久性が重要であるが、ある程度の遅延が許容されるシナリオで役立ちます。指定された遅延とコミット遅延制限内でオリジングループの大部分のノードによって確認されるまで、トランザクションがコミットされたとみなされないことを保証することにより、パフォーマンスとデータの安全性のバランスが可能です。

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

.. code:: text

   MAJORITY ORIGIN GROUP SYNCHRONOUS COMMIT

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

このコミットスコープは、データの一貫性と耐久性が重要なシナリオに適しており、
``local protect``
コミットスコープと比較してデータ損失に対する高レベルの保護を提供します。ただし、トランザクションがコミットされたものと見なされる前にマルチプルのノードからの確認が必要であるため、多少のレイテンシーが発生する場合があります。

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

.. code:: text

   MAJORITY ORIGIN GROUP SYNCHRONOUS COMMIT DEGRADE ON (timeout = 10s, require_write_lead = true) TO ASYNCHRONOUS COMMIT

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

このコミットスコープは、データの一貫性と耐久性が重要であるが、潜在的な遅延に対処するためにある程度の柔軟性が必要であるシナリオに適しています。
``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グループの\ ``adaptive protect``
  コミットスコープを設定します。

.. code:: sql

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

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