2012-12-13 5 views
0

메모리 대신 디스크에 대기중인 BlockingQueue의 기능을 찾고 있습니다. 오히려 헤비급 솔루션 (예 : JMS)을 피할 것입니다. 이상적으로 대기열은 JVM에서 클라이언트 (생산자) 및 고객과 동일한 프로세스에서 실행되어야합니다. 소비자가 중지되고 재시작해도 계속 대기열에 있어야합니다.JVM 용 영구 대기열 라이브러리가 있습니까?

+0

관계형 테이블의 해킹은 어떻게해야합니까? 이러한 접근 방식에는 몇 가지 장점이 있습니다. – usr

+0

유혹에 빠졌지 만 큐에있는 패턴에 대한 몇 가지 기사를 안티 패턴으로 읽었으므로이 접근법을 추구하는 데 약간의 어려움이 있습니다. Berkley DB (Java Edition)를 사용하는 몇 가지 솔루션을 보았습니다. – Andrew

답변

1

관계형 테이블의 맨 위에있는 해킹은 어떻게해야합니까? 이러한 접근 방식에는 몇 가지 장점이 있습니다.

가끔 반 패턴 일 수 있습니다. 함정이 있습니다 (특히 경합은 특별한주의없이 높을 수 있습니다).

다른 데이터와 큐 데이터를 통합 할 수 있고 ACID 의미를 얻을 수 있으며 일관된 백업을 얻을 수 있습니다. DB와 정확히 같은 시간), 프로젝트에 새로운 기술을 사용하여 저장하십시오.

각 큐 항목에 상태 및 색인을 할당하십시오.

다음은 간단한 경합 관리 기술입니다. 각 큐 행에 임의의 숫자를 추가하십시오. 큐를 풀 때, select TOP 1 * from QueueTable where RandomNumberColumn > RAND() order by RandomNumberColumn을 요청하십시오. 이렇게하면 임의의 위치에서 항목을 가져올 수 있으므로 X 잠금으로 인해 차단이 크게 감소합니다.

+0

Berkeley DB (Java)를 사용하기로 결정했습니다. 그것은 임베디드 및 낮은 수준 API를 잘 대기열 impl에 적합 것 같다. – Andrew

관련 문제