Conflict Management

Conflict Management#

EDB Postgres Distributedは、アクティブ/アクティブまたはマルチマスターDBMSです。非同期で使用される場合、標準のデータ型を使用する場合、複数の異なるノードから同じまたは関連する行への書き込みにより、データが bdr_read_all_conflicts になる場合があります。

競合はエラーではありません。ほとんどの場合、これらは発生時にPGDが検出および解決できるイベントです。解決策はアプリケーションの性質とデータの意味によって異なるため、 PGDがアプリケーションにそれらを解決する方法に関して幅広い選択肢を提供することが重要です。

デフォルトでは、競合は行レベルで解決されます。 2つのノードからの変更が競合する場合、ローカルまたはリモートのタプルのいずれかが選択され、他方は破棄されます。たとえば、コミットタイムスタンプは、2つの競合する変更と新しい方が保持されると比較される場合があります。このアプローチでは、すべてのノードが同じ結果に収束し、クラスター全体でコミットオーダーのようなセマンティクスを確立します。

列レベルの競合の検出と解決は、 CLCD で説明しているPGDで利用できます。

競合を回避したい場合は、 How Quorum Commit works または CRDTデータ型を使用した列レベルの競合の処理 で説明している競合フリーデータ型CRDTを使用します。接続マネージャーを使用して、すべての書き込みを1つの書き込みリーダーにルーティングし、ノード間の競合の可能性を排除することもできます。