2011-09-03 5 views
0

다음 유스 케이스의 최적 설계를 찾고 있습니다.스케쥴 작업 - 최적 설계

사용자가 종료 날짜/시간이있는 엔티티를 만드는 시스템을 구축하고 있습니다. 종료 시간에 도달하자 마자 이러한 엔티티의 상태를 만료 됨으로 변경하는 작업을 스케줄해야합니다.

내가 작업 분마다 실행 만료 된 엔티티 (endTime- 사용자> SYSDATE)를 확인하는 쿼리를 실행

  • 생각할 수있는 두 가지 솔루션입니다. 문제 : 데이터베이스에로드, 매분이 쿼리를 실행하면 데이터베이스에 부하가 걸릴 수 있습니다.
  • 엔티티가 작성되는 즉시 각 엔티티에 대한 작업을 스케줄하십시오. 문제 : 시스템에 작업이 너무 많습니다.이 엔티티 중 1000 개가 매일 생성됩니다.

위의 두 가지보다 나은 해결책이 있습니까? 사람들이 일반적으로 어떻게합니까?

답변

0

매분의 쿼리는 매우 부하가 크지 않습니다. 다음을 수행하는 Windows 서비스가 있습니다.

voip 세션의 일정을 관리하고 시작하고 종료하며 녹음을 시작하고 녹음을 종료하며 녹음 드라이브의 녹음 공간을 지우고 OSD 메시지를 표시합니다. 이 작업들 각각은 타이머가있는 자체 스레드에 있으며 매 4 초마다 쿼리를 실행합니다. 한 번에이 데이터베이스에 액세스하는 데이터베이스에는 100,000 개가 넘는 레코드가 있고 웹 응용 프로그램 사용자는 100 개가 넘습니다. 그것은 잘 실행되며 약 3 년 동안되었습니다.

프레임 워크에 따라 더 나은 옵션이있을 수 있지만 지금은 찾지 못했습니다. 예를 들어, .NET에는 아직 사용하지 않은 Task Parallel Library가 있으며 여기에는 몇 가지 제안 사항이 있습니다. 어쨌든, 나는 수년간 접근 # 1을 사용 해왔다.

생각해 보면 이벤트 기반 시스템조차도 일부 기능 포인터가있는 어딘가에 루프에 앉아 있습니다. 질문은 수동으로 관리하는지 여부와 스레드가 어떻게 처리되는지 여부입니다. DB로드는 중요하지 않아야합니다.

0

제 생각에는 두 가지 아이디어를 결합 할 수 있습니다.

매 시간마다 데이터를 가져 오는 작업을 실행하십시오. 이제 다음 60 분 만에 만료되는 각 개체에 대한 작업을 만듭니다.

이제 60 분 시간이 단지 예입니다. 필요에 맞게 변경하십시오.

+0

감사합니다. Gaurav, 나는 처음에는 abt라고 생각했습니다. 그러나 사용자가 endtime을 30 분으로 선택하면 필요한 다른 것들이 있습니다. 그런 다음 이러한 시나리오를 처리하기 위해 추가 논리를 작성해야합니다. – firefly

+0

정확히 .. 그걸 생각하지 못했습니다 ... –