MSSQL에 큐와 같은 데이터베이스 테이블 2005 여러 응용 프로그램이 테이블을 작성하고, 하나의 응용 프로그램은 FIFO 방식으로 읽고 처리되어 작은 시스템이 있습니다.병렬 처리
나는 그것을 조금 더 고급 여러 처리 응용 프로그램을 실행할 수있는 분산 시스템을 만들 수 있도록해야한다. 결과는 2-10 처리 응용 프로그램을 실행할 수 있어야하며 작업 중에 서로 간섭하지 않아야합니다.
제 아이디어는 프로세스가 이미 작업 중임을 나타내는 행으로 큐 테이블을 확장하는 것입니다. 처리 응용 프로그램은 먼저 IDetifyer로 테이블을 업데이트 한 다음 업데이트 된 레코드를 요청합니다.
그래서 이런 식으로 뭔가 :
start transaction
update top(10) queue set processing = 'myid' where processing is null
select * from processing where processing = 'myid'
end transaction
처리 후에는 '완료', 또는 무엇이든처럼, 뭔가 다른 테이블의 처리 열을 설정합니다.
이 접근법에 대해 3 가지 질문이 있습니다.
첫 번째 :이 양식에서 사용할 수 있습니까?
둘째 : 작동하는 경우 효과적입니까? 그런 배포판을 만드는 다른 아이디어가 있습니까?
셋째 행은 록킹 기반하지만, 열의 양이 고정 된 후, 로크 전체 테이블로 확장 MSSQL있다. 따라서 첫 번째 응용 프로그램이 트랜잭션을 릴리스하지 않는 한 두 번째 응용 프로그램은이를 액세스 할 수 없습니다. 테이블 전체를 잠그지 않고 행 잠금 만 생성하려면 선택 (top x)을 얼마나 크게 할 수 있습니까?
이것은 매우 좋으며 정확히 내가 필요한 것입니다. 감사. – Biri
니스. 나는 흥미가있을 것이라고 말했다 ;-) – philsquared
주의해야 할 것은 시스템이 정보를 대기열에서 제외하지만 처리하기 전에 충돌/중지하는 처리되지 않은 코드이다. 작업을 다시 큐업하기 전에 타임 아웃하면 문제를 해결할 수 있지만 상당히 엉망이 될 수 있습니다. – mjallday