問題タブ [crdt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
distributed-transactions - CRDT でトランザクションを実装することは可能ですか?
定義により、CRDT (競合のない複製データ型) は競合のないものです。したがって、1 つのノードで行われた更新は、最終的に他のすべてのノードに適用 (マージ) されることを意味します。
そのため、環境が通常の状態 (ハードウェア障害がないなど) にある場合、CRDT は論理的に更新を制限したり、拒否したり、拒否したりすることはできないという仮定につながります。
一方、定義上、トランザクションは承認または拒否され、要件が満たされない場合 (競合が検出された場合) はロールバックされます。したがって、(競合に基づく) トランザクションは (競合のない) CRDT では実装できないことを意味します。そうですか?
例を考えてみましょう - 簡単な銀行口座。残高は負でない数値です。PN-Counter(Positive-Negative Counter)で実装してみました。私はそれを非負にしたかった-残高がゼロを下回った場合、支出を制限します。しかし、それは不可能のようです。PN-Counter で実装されているため、ゼロ未満にすることができます。または、それを制限したい場合は、確認を得るためにすべてのノードを同期 (ロック) する必要があります。
CRDT を使用して単純なトランザクションを実装できる場合は、与えられた例 (非負の数) を使用してどのように実装できるかを説明してください。