2

我正在努力将事件序列分组到一个原子事务中。

考虑Map以酸状态存储,并想象您想要实现Data.Map.alter. 接受可能值并返回 1 的函数无法存储在更改日志中,因此无法定义酸性事件Alter。但是,如果我编写一个调用query 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 回答