[英]How to handle multiple Nodejs requests reading, modifying and updating the same document in MongoDB at same time?
我在使用 MongoDB 和 Nodejs 的地方有以下代码。 我从集合中读取数据,对数据执行一些算术运算,然后更新文档。 我的问题是,当多个请求同时出现时,会导致一些数据丢失。 我怎样才能避免这种情况?
//Read the Document
const commissionRecord = await CommissionTable.getCommissionRecord(
publicKey
);
// Check if A record Exists or Not
if (commissionRecord.responseData.exists === true) {
// Assigning values to variables
commissionLimit =
commissionRecord.responseData.data.commissionLimit;
commission = commissionRecord.responseData.data.commission;
}
// Perform Arithmetic Operations
commissionLimit = parseInt(commissionLimit) + parseInt(amount);
if (commissionLimit >= 20) {
remainder = commissionLimit % 20;
commission =
parseInt(commission) + Math.floor(commissionLimit / 20);
commissionLimit = parseInt(remainder);
}
if (commissionRecord.responseData.exists === true) {
//Update the document
const result = await CommissionTable.updateCommissionNormal(
publicKey,
commission,
commissionLimit
);
if (result.success) {
return result;
}
问题在于,当所有请求同时到来时,它们都会一起读取数据,并且所有更新都是基于它们读取的数据进行的。 如何解决这种情况?
为避免竞争条件,您可以使用互斥锁,Nodejs 有一个模块异步互斥锁https://www.npmjs.com/package/async-mutex这个想法是锁定所有进程以不同时运行特定的 function,所有进程将异步工作直到调用此 function,为此 function 将创建队列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.