누군가가 포트폴리오에 주식을 추가 할 때마다 activerecord import gem을 사용하여 주가 기록을 가져옵니다. 주가 기록을 추가하기 전에 함수는 먼저 해당 주식이 테이블에 이미 있는지 확인합니다. 그렇게하면 2 명의 사람들이 Google 주식을 보유하고 있어도 주가 기록을 두 번 채우지 않습니다.activerecord-import gem은 동시 가져 오기를 어떻게 처리합니까? 테이블을 잠그고 있습니까?
그러나 이것은 동시에 추가 할 생각입니다. 2 명이 동시에 Google을 추가했고 가격 내역이 모델에없는 경우 '가져 오기'기능이 동시에 두 번 발생합니다.
내 질문에 나를 데려다 준다. activerecord-import는 동시에 2 개의 import를 방지하기 위해 테이블을 lock합니까?
편집 : StockHistory에 가져 오는 기능을 실행하기 위해 after_save
을 사용 그래서 같은 StockHistory을 잠글 내 주식 모델에서
:
def populatepricehistory
#columns and prices defined here
StockHistory.transaction do
StockHistory.lock
StockHistory.import columns,prices
end
Ty. 필자가 작성한 내용에 따라 필자의 기능으로 내 질문을 업데이트했습니다. 그것은 꽤 똑바로 보인다하지만 그것은 동시 수정 오류를 혼자서 복제하는 것이 어렵 기 때문에 나는 이중 검사를 원했다. 그 기능에 문제가있는 것을 보시겠습니까? 또한 레일 가이드에 따르면 .lock은 Exclusive로 Lock을 의미합니다. 그냥 postgresql과 같은 LOCK WITH EXCLUSIVE가 맞는지 확인하기 위해서입니까? Lock을 사용할 때 Postgresql의 기본 Lock이 Access Exclusive로 Lock되어 있기 때문에 나는 묻습니다. 그래서 레일즈 잠금이 다른 타입으로 기본 설정되어 있는지 확인하기를 원합니다. –
그건 나에게 잘 어울려. 어떤 잠금 메커니즘을 사용할 것인지, 또는 잠금 메커니즘을 선택하는 방법을 모르지만 코드를 실행하고 레일 로그에서 생성하는 SQL을 살펴 보는 것이 가장 쉬운 방법입니다. –
TY 선생님. 나는 그렇게 할 것이다! –