繁体   English   中英

如何处理多个Nodejs请求同时读取、修改、更新MongoDB同一个文档?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM