MySQL InnoDB 테이블에 엄청난 URL 목록이 있고 처리 할 URL 집합을 MySQL에 쿼리하는 작업자 프로세스가 있습니다. URL은 처리중인 것으로 즉시 표시되어야하므로 다른 작업자 프로세스가 동일한 작업 프로세스를 시작함으로써 리소스를 낭비하지 않습니다.MySQL을 사용하여 작업자 프로세스에 작업을 할당하는 올바른 방법
현재 내가 먼저 일부 URL을 얻기 위해이 작업을 수행 :
이SELECT DISTINCT url FROM urls WHERE task_assigned is NULL ORDER BY id LIMIT 100
다음 코드에서 나는 그 각 URL을 통해 순진 루프를 표시하는 처리되는 같이
UPDATE urls SET task_assigned = NOW() WHERE url = ? COLLATE utf8_bin
난 완벽 해요 이것이 얼마나 어리 석고 비능률적인지를 깨닫는다. 더 중요한 것은 다른 작업자 프로세스가 업데이트 중에 목록을 가져 오지 않을 것이라는 보장이 없습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 어떻게해야 거래를 할 수 있을까요?
감사합니다. 그러나 쉼표로 구분 된 [URL 목록]을 먼저 코드에 만들 필요없이 순수한 SQL 방식으로 생각할 수 있습니까? – Bemmu
글쎄, 당신은 항상 그 비트를 하위 쿼리 (SELECT 문을 복사하여 붙여 넣기)로 대체 할 수 있습니다. 그 코드가 실제로 얼마나 잘 수행 될지 모르겠다. 실제로 코드 버전보다 낫다. – kquinn