나는 데이터베이스에서 100 개의 레코드를 선택하고 루비 데몬을 가지고 작업을 수행한다.Ruby에서 여러 프로세스간에 작업을 배포하려면 어떻게해야합니까?
더 빠르게 만들려면 대개 동일한 데몬의 인스턴스를 3 개 만듭니다. 그리고 각각은 mysql LIMIT
과 OFFSET
을 사용하여 다른 데이터를 선택합니다.
문제는 동일한 데이터 레코드로 2 ~ 3 번 작업이 수행되는 경우가 종종 있습니다.
그래서 데이터베이스 LIMIT
과 OFFSET
만을 신뢰한다고해서 충분하지 않습니다 ... 2 개 이상의 데몬이 동일한 데이터를 동시에 수집 할 수 있기 때문에 가끔씩입니다.
어떻게 안전하게 처리 할 수 있습니까? 2 개 인스턴스를 피하는 것은 동일한 데이터를 선택
- 데몬 1 => 선택 1
- (100) 데몬의 레코드 2 => 선택 101
- (200) 데몬의 레코드 3 => 201 300에 레코드를 선택
현재 저는 Ruby의 Daemons gem (github.com/mikehale/daemons)을 사용하고 있습니다. 내가하는 일은 실행중인 인스턴스 수를 확인하고 각 데몬 인스턴스에 LIMIT 및 OFFSET이있는 PARAMS를 전달하는 것입니다. 그래서 ... 1000 개의 이메일을 보낼 경우 각 데몬 인스턴스는 100 개의 데이터베이스 행을 선택합니다. 하지만 때로는 2 ~ 3 번 배달되는 행이나 이메일을 받고 있습니다. 두 데몬의 인스턴스가 동일한 데이터베이스 행을 선택한다는 것을 의미합니다. – newx
나는 당신의 문제가 무엇인지 이해합니다. 내가 말하고자하는 것은 당신이이 논리를 다루는 당신의 시간을 낭비하지 말아야한다는 것입니다. 사람들은 이미 배경 작업을 처리하는 데 큰 도움이되는 도서관을 만들기 위해 수 시간의 시간을 투자했습니다. 당신은 일 자체에 집중해야합니다. 즉, 당신은 방금 SQL에서 버그를 발견했습니다. – bloudermilk
답변 해 주셔서 감사합니다 ... 지금 Resque를 검토하여 응용 프로그램을 개선 할 수있는 방법을 알려드립니다 ... 감사합니다. – newx