使事件序列成为酸态的原子序列

时间:2014-12-05 16:21:27

标签: haskell acid-state

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

考虑存储在酸状态的Map,并想象你想要实现Data.Map.alter。采用可能值并返回一个的函数无法存储在更改日志中,因此无法定义酸性事件Alter。但是,如果我编写一个调用query st Lookup ...来查找旧值然后update st Insert ...来编写新值(或删除旧值)的函数,则存在竞争条件,我可能会从更新中删除信息发生在两者之间。

https://github.com/acid-state/acid-state/pull/48中,我使用额外的MVar进行手动锁定,但必须有更好的解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这里有酸州的作者。

解决方案是不使用像'alter'这样的高阶函数。酸状态(ACID保证,远程运行代码等)的好处是以仅使用可序列化数据为代价。这种限制不太可能被取消。

通常这不是一个大问题;只需专门化您的代码。如果这没有削减它,也许你想让你的状态保持在MVar中。

干杯,   大卫。