General rules for applications
==============================

背景
----

PGDは、レプリカID値を使用して、変更する行を識別します。アプリケーションが同じ一意の識別子を挿入、削除、および後で再利用すると、問題が発生する可能性があります。これは、
 `ABA problem <https://en.wikipedia.org/wiki/ABA_problem>`_  と呼ばれます。
PGDは、行が現在の行、最後の行、またはかなり古い行であるかどうかを知ることができません。

同様に、
PGDはテーブル名を使用して、変更が再生されるテーブルを識別するため、同じオブジェクト名を作成、ドロップ、および後で再利用するアプリケーションにも同様のABA問題が存在します。

アプリケーションのルール
------------------------

これらの問題により、アプリケーションが従うべき単純なルールがいくつか発生します。

-  行の一意の識別子を使用します INSERT

-  一意の識別子UPDATEの変更を避けます。

-  削除された一意の識別子の再利用は避けてください。

-  ドロップされたオブジェクト名の再利用は避けてください。

一般に、これらのルールに違反すると、データの異常と発散が発生する可能性があります。アプリケーションは、特定の条件が満たされる限り、これらのルールを破ることができます。ただし、注意してください。異常が発生する可能性は低いですが、不可能ではありません。たとえば、ダウンしたノードを含むすべてのノードでDELETEが再生された限り、行値を再利用できます。これは通常1秒以内に発生しますが、1つのノードで重大な問題が発生し、正しく再起動できなかった場合には数日かかる場合があります。
