我正在将事件序列分组到一个原子事务中。
考虑存储在酸状态的Map
,并想象你想要实现Data.Map.alter
。采用可能值并返回一个的函数无法存储在更改日志中,因此无法定义酸性事件Alter
。但是,如果我编写一个调用query st Lookup ...
来查找旧值然后update st Insert ...
来编写新值(或删除旧值)的函数,则存在竞争条件,我可能会从更新中删除信息发生在两者之间。
在https://github.com/acid-state/acid-state/pull/48中,我使用额外的MVar
进行手动锁定,但必须有更好的解决方案。
有什么想法吗?
答案 0 :(得分:3)
这里有酸州的作者。
解决方案是不使用像'alter'这样的高阶函数。酸状态(ACID保证,远程运行代码等)的好处是以仅使用可序列化数据为代价。这种限制不太可能被取消。
通常这不是一个大问题;只需专门化您的代码。如果这没有削减它,也许你想让你的状态保持在MVar中。
干杯, 大卫。