有没有办法在执行批量保存时在Couchdb中创建锁?我相信没有内置的方法来实现这一目标,但是有可能通过解决方法来解决这个问题吗?我有一个类似于以下的场景(我使用Node.js与couchdb数据库进行交互):
用户支付另一个用户创建新文档对象,如下所示:
{
_id: SOMEID
type: "PAYMENT"
username: SOMEUSER
paidto: ANOTHERUSER
amount: 10
}
当保存时,我还需要更新用户在他/她account document
中的剩余余额(从他/她的钱包中减去10)。然后我使用bulk_docs(新创建的transaction document
和更新的account document
)一次保存这两个文档。
但是,如果在此过程中用户通过其他方法对account document
进行了更改(让我们在另一个标签中说),我们遇到的问题是,新的transaction document
会被保存,而account document
无法更新。这会产生很大的问题和一致性问题。
要解决此问题,我们必须锁定account document
,直到批量保存过程结束,在此过程中,第二个标签中的进程将等待锁定被释放。
我正在尝试部署Couchdb是一个文档之间的一致性非常重要但没有锁定的环境,这种情况非常困难。
答案 0 :(得分:1)
保存后,我还需要更新用户在其帐户文件中的剩余余额(从他/她的钱包中减去10)。
别。银行业务是文档数据库的very well documented example。最佳做法是仅将交易存储为文档,并将帐户余额视为对视图的查询(由帐户索引的交易)。
function(o) {
if (o.paidto && o.amount && o.username) {
emit(o.paidto, o.amount);
emit(o.username, -o.amount);
}
}
_sum
GET /mydb/_design/mydesign/_view/myview/?group=true&key=SOMEUSER