pm2와 함께 클러스터 모드에서 실행되는 노드 응용 프로그램이 있습니다.Node.js는 클러스터/pm2와 db 경쟁 조건을 피합니다.
또한 특정 행이 db 테이블에 있는지 확인하는 기능이 있습니다. 행이 누락 된 경우 행을 작성하고 그렇지 않으면 값이 설정되고 저장됩니다.
userId와 groupId의 조합마다 하나의 행만 있으면됩니다.
function someFunction()={
return Activation.findOne({ where: { userId: userId, groupId: groupId } })
.then(activationObject => {
if (!activationObject) {
return Activation.create({ userId: userId, groupId: groupId, activationTime: sequelize.fn('NOW') })
} else {
activationObject.activationTime = sequelize.fn('NOW');
return activationObject.save()
}
})
}
클러스터 모드에서 노드를 실행할 때 어떻게 경쟁 조건을 피할 수 있습니까? 현재 첫 번째 작업자가 행을 사용할 수 있는지 확인하고 두 번째 검사가 동시에 결과를 얻지 못하고 결국에는 하나 대신 새로 만든 행이 두 개 있습니다.
나는 Sequelize가 findOrCreate()
방법을 제공한다는 것을 알고 있지만 쉽게 이해할 수있는 예제를 원했습니다.
이 문제에 대한 좋은 해결책입니다. 하지만 노드 js에 공유 뮤텍스 나 세마포어 같은 것이 없습니까? – Andybanandy
https://www.npmjs.com/browse/keyword/mutex 및 https://www.npmjs.com/browse/keyword/semaphore에서 살펴보십시오. – Originato