期望的行为:
在 Clojure 的代理实现中,要更新代理,不会发送新值。发送一个函数,在旧值上调用,返回值设置为Agent的新值。
这使某些事情变得容易:例如,如果我有一个队列,并且我有两个并发线程都想追加到队列中(而且我不在乎它们追加的顺序),每个线程都可以触发一个 ( fn [x] (cons x new_value)) ... 它就可以工作。然而,如果它是按值更新的,我必须进行某种比较和交换。
问题:
有没有支持这种更新的数据库?例如,我最近在看 MongoDB。但是,MongoDB 仅支持 $inc/$dec,不支持用于更新文档的任意函数。
谢谢!
PS——我不需要事务/ACID/BASE/……我真正想要的只是一个简单的文档存储,它支持通过函数而不是值进行更新。