2012-02-01 3 views
1

ActiveRecord의 낙관적 잠금 및 비관적 잠금 기능에 대해 읽었으며 레일즈 코드에서이 기능을 전혀 사용하지 않고 있습니다. 언제 사용하는지 알기위한 좋은 경험 법칙은 무엇입니까? 두 사람이 같은 대상을 편집하려고 할 때 한 가지 예가 될 것입니다.언제 ActiveRecord 잠금에 대해 걱정해야합니까?

답변

1

동일한 데이터를 동시에 변경할 수 있고 변경 사항이 "이기기"에 대한 명확한 규칙이없는 경우 동일한 문제에 대한 다른 솔루션이나 솔루션을 사용해야합니다. 그것은 두 사람이 같은 대상을 편집하는 시대의 하위 집합입니다.

일반적으로 낙관적 인 잠금은 충돌이 발생할 가능성이 낮을 때 적합합니다. 사람들이 오버 헤드가 적기 때문입니다. 다른 사람이 개체를 변경했기 때문에 편집하고 매우 일순간에 작업을 다시해야한다는 메시지가 나타납니다.

비관적 잠금은 충돌이 발생할 가능성이 높으며 작업을 다시 시도하기위한 노력의 양이 많으며 사용자가 오랫동안 변경하지 않으려 고하며 예를 들어 예의 바르게 신뢰할 수 있습니다. 완료되면 잠금을 해제합니다.

같은 데이터에 관심이있는 사용자 수가 비교적 적은 경우에만 모두 잘 작동합니다. 두 모델 모두 충돌이있을 때 사용자가 작업을 다시 실행하도록 강요하거나 다른 사람이 작업을 완료하기 전에 완료 될 때까지 기다릴 수 있기 때문에 동시 편집의 수가 많으면 좋지 않은 경우도 있습니다.

충돌이 예상되고 동일한 데이터에서 작동하는 사용자가 거의 없을 경우 CQRS와 같은 고급 접근 방식을 사용하여 동시성 문제를 해결하고자합니다.

관련 문제