2

イベントのシーケンスを 1 つのアトミック トランザクションにグループ化するのに苦労しています。

酸状態で保存されたを考えて、Mapを実装したいと想像してくださいData.Map.alter。多分値を受け取って値を返す関数は変更ログに保存できないため、酸性イベントを定義することはできませんAlterquery st Lookup ...ただし、古い値を検索してから新しい値を書き込む (または古い値を削除する)ように呼び出す関数を作成するupdate st Insert ...と、競合状態が発生し、その間に発生した更新から情報が破棄される可能性があります。

https://github.com/acid-state/acid-state/pull/48では、手動ロックを行うためにエクストラを使用しましたMVarが、より良い解決策があるはずです。

何か案は?

4

1 に答える 1

3

酸性状態の著者はこちら。

解決策は、「alter」のような高階関数を使用しないことです。アシッド ステートの利点 (ACID の保証、コードのリモート実行など) は、シリアライズ可能なデータのみを使用するという代償を伴います。この制限が解除される可能性はほとんどありません。

通常、これは大きな問題ではありません。コードを特殊化するだけです。これでうまくいかない場合は、状態を MVar に保持したいかもしれません。

乾杯、デビッド。

于 2014-12-05T16:38:22.837 に答える