CRDT Disk-space requirements#

重要な考慮事項は、CRDTタイプ、特にディスク上のサイズに関連するオーバーヘッドです。

オペレーションベースのCRDTディスク領域要求#

operation-based types の場合、タイプは他のタイプの単なるドメインであるため、これは簡単です。ノードの数に関係なく、必要なディスク領域は同じです。

  • crdt_delta_counter - bigint と同じ8バイト

  • crdt_delta_sum - numeric と同じ変数、精度とスケールに応じて異なります

操作ベースのCRDTタイプはノードごとの情報を保存しないため、ノードの数への依存関係はありません。

状態ベースのCRDTディスク領域要求#

state-based types の場合、状況はより複雑です。すべてのタイプは可変長であり、基本的にbytea 列として保存され、ヘッダーと、値を変更した各ノードの特定の量のノードごとの情報で構成されています。

bigint バリアントの場合、おおよそのサイズを計算する式は次のとおりです。

  • crdt_gcounter - 32B (header) + N * 12B (per-node)

  • crdt_pncounter –48B (header) + N * 20B (per-node)

N は、この値を変更したノードの数を示します。

numeric バリアントの場合、ヘッダー部分とノードごとの部分の両方にnumeric 可変長値が含まれるため、正確な式はありません。保持する必要があるこのような値の数を知るには

  • crdt_gsum

  • 固定 20B (header) + N * 4B (per-node)

  • 変数 (2 + N) numeric 値

  • crdt_pnsum

  • 固定 20B (header) + N  *4B (per-node)

  • 変数 (4 + 2*  N) numeric 値

注釈

複数のノードで値が更新されない場合、クラスター内のノードの数は関係ありません。また、更新が同時実行されたかどうか、競合が発生したかどうかも関係ありません。

さらに、これらのノードのうちのいくつがクラスターから既に削除されたかは関係ありません。状態を圧縮する方法はまだありません。