望ましい動作:
Clojure のエージェントの実装では、エージェントを更新するために新しい値を送信しません。古い値で呼び出される関数を送信すると、戻り値がエージェントの新しい値として設定されます。
これにより、特定のことが簡単になります。たとえば、キューがあり、キューに追加する 2 つの同時スレッドがある場合 (追加する順序は気にしません)、各スレッドは ( fn [x] (cons x new_value)) ...そしてそれはうまくいきます。一方、値で更新している場合は、ある種の比較と交換を行う必要があります。
質問:
このタイプの更新をサポートするデータベースはありますか? たとえば、私は最近 MongoDB を見ていました。ただし、MongoDB は $inc/$dec のみをサポートしており、ドキュメントを更新するための任意の関数はサポートしていません。
ありがとう!
PS -- トランザクションは必要ありません / ACID / BASE / ... 私が本当に欲しいのは、値ではなく関数による更新をサポートする単純なドキュメント ストアだけです。