CRDTs vs conflict handling/reporting

CRDTs vs conflict handling/reporting#

CRDTタイプと競合処理#

テーブルにはCRDT列と非CRDT列の両方を含めることができるため、ほとんどの列は非CRDTであることが予想されるため、通常の競合解決とCRDTマージの両方を行う必要があります。

競合の解決は最初に発生し、保持するタプルapplytupleと破棄するタプルを決定します。次にマージフェーズが発生し、CRDT列のデータを破棄タプルから適用タプルにマージします。

注釈

この処理により、毎回マージが発生する必要があるため、単純な競合解決に比べてCRDTタイプのコストが多少高くなります。これは、競合解決で高速パスのいずれか現在のトランザクションで変更されたパスなどを使用できる場合でも、当てはまります。

CRDTタイプと競合レポート#

デフォルトでは、検出された競合は個別に報告されます。 CRDTタイプがなければ、競合解決は本質的に使用可能な情報の半分を破棄するため、これは理にかなっています構成に応じてローカルまたはリモート行。これにより、データの損失が発生します。

CRDTタイプを使用すると、何も捨てずに情報の両方の部分を組み合わせることができ、データ損失の問題を排除します。このアプローチにより、競合報告が不要になります。

このため、CRDTマージによって競合を完全に解決できる場合、競合レポートはスキップされます。各列は、次の2つの条件の少なくとも1つを満たす必要があります。

  • ローカルタプルとリモートタプルの値が同じNULLまたは等しい。

  • CRDTデータ型を使用するため、マージできます。

注釈

CRDT列はないが、ローカル/リモートタプルのすべての値が等しい場合にも、競合レポートはスキップされます。