문제를 업데이트하는 두 사람이 처리 할 수 있습니까? Ruby on Rails - 카운터 캐시 트랜잭션이 안전합니까?
내가 봤와 API의 보였지만 동일한 트랜잭션에서 수행됩니다 counter_cache, 레코드 삽입 및 카운터 업데이트를 사용하는 경우 아무것도레일 3+, 루비 1.9.3
문제를 업데이트하는 두 사람이 처리 할 수 있습니까? Ruby on Rails - 카운터 캐시 트랜잭션이 안전합니까?
내가 봤와 API의 보였지만 동일한 트랜잭션에서 수행됩니다 counter_cache, 레코드 삽입 및 카운터 업데이트를 사용하는 경우 아무것도레일 3+, 루비 1.9.3
하는 결과가 없습니다. 그러나 이것이 조작의 원 자성을 보장하지는 않습니다. 두 사람의 업데이트 문제를 피하기 위해 레코드를 "잠가"해야 할 수도 있습니다.
this excellent article을 참조하십시오. 그것은 redis-objects 보석에 관한 것이지만 처음 두 부분은 ActiveRecord로 문제와 솔루션을 완벽하게 설명합니다.
짧은 대답 : 아니오. Cédric이 언급했듯이 Rails는 거래 내에서 counter_cache
을 업데이트하므로 동일한 레코드를 업데이트하는 백그라운드 프로세스가 있다고 가정하면 레코드에 with_lock
블록을 사용하여 두 업데이트를 실행하지 않으면 교착 상태 오류가 발생합니다.