我正在寻找一种在 Berkeley DB 中实现比较和交换操作的有效方法。现在我使用的是非常旧的版本,但乍一看,即使是最新的版本(从 Oracle 网站分发)也没有单一的方法来进行这种操作。
我正在寻找某种方法,例如
replace(Transaction, Key, ExpectedValue, NewValue)
具有以下语义:DB 获取与给定键关联的值,如果该值存在且等于 ExpectedValue,则该值将更改为 NewValue,否则方法返回不成功的 OperationStatus。
看起来没有这样的方法,所以我想知道这应该如何以最有效的方式完成。
现在我正在使用以下方法:我做
db.get(null, key) -> {currentValue, version}
db.put(null, key, {currentValue, newRandomIdVersion})
db.get(null, key)
我比较值和版本,如果它们匹配,我会进行最终更新,删除旧版本。如果任何步骤失败,则整个过程重新开始。
我觉得这是非常不理想的——我错了吗?