使事件序列在酸态中原子化

  • 本文关键字:事件 haskell acid-state
  • 更新时间 :
  • 英文 :


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

考虑一个以酸态存储的Map,并假设您要实现Data.Map.alter。 接受 maybe-value 并返回 1 的函数不能存储在更改日志中,因此无法定义酸性事件Alter。 但是,如果我编写一个函数,调用query st Lookup ...来查找旧值,然后update st Insert ...编写新值(或删除旧值),则存在争用条件,我可能会破坏中间发生的更新中的信息。

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

有什么想法吗?

这里的酸态作者。

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

通常这不是一个大问题;只需专门化您的代码即可。如果这不能解决问题,也许您想将您的状态保持在 MVar 中。

干杯 大卫。

相关内容

  • 没有找到相关文章