테이블 스키마를 알지 못하면 무엇이 가장 좋을지 알려주는 것이 약간 어렵습니다. 많은 사용자가 폴링을 수행 할 경우 클라이언트에서 필터링을 수행하는 것이 좋습니다. 내 말은, 쿼리에서 얻은 각각의 열린 작업을 추적하고 해당 작업과 관련된 폴링 시간이 5 분 미만인 경우 쿼리에서이를 필터링 할 수 있습니다. 해당 작업과 관련된 폴링 시간이 5 분 이상 경과하면 다시 요청하십시오. 서버를 조회하고 1, 2, 3 열 일자리를 얻는 경우에
는 예를 들어, 각 시간 값 (이 동일합니다)를 연결합니다.
(이 경우 10 초 후) 서버에 쿼리 다음에 당신이 5 분 미만 오래된 해당 작업 필터링 확인 : 5 분 통과되면
select * from table
where status = 'open' and jobid not in (1, 2, 3)
, 당신은 제거해야합니다을 not in
조항의 작업 ID
참고이 솔루션을 사용하면 클라이언트에 작업이 남겨 지므로 데이터베이스 스키마 수정이 필요하지 않습니다.
편집 :
재미있는, 그러나 작업의 오픈 시간은 보통 1 8 분 사이의 평균 오분에 있습니다. - 크리스
은
알고리즘은 여전히 적용됩니다. 적절한 timeout
을 선택해야합니다. 1 분을 선택하면 클라이언트는 더 자주 불필요한 데이터를 가져옵니다 (단, 상태 변경을 더 빨리 알 수 있음). 8 분을 선택하면 클라이언트는 불필요한 데이터를 덜 자주 받지만 (최대 8 분 후에 상태가 변경됨을 알 수 있습니다). 소프트웨어 요구 사항에 따라 적절한 시간 초과를 선택해야합니다. 그것은 컴퓨팅의 모든 것과 마찬가지로 단점입니다.
내 의견 : 모바일 응용 프로그램입니다. 매 10 초마다 50kb를 다운로드하지 마십시오. 응용 프로그램이 현재 식당이 '오픈'상태 일 때 알려주는 용도입니까? 그렇다면 8 분의 지연이 있으면 괜찮습니다. 작업이 원자로의 센서 인 경우에는, 다음 1 분 지연은 많은 :)
당신은'LastChangeTime' 열 및 쿼리 마지막 요청 이후 업데이트 된 작업 만 추가 할 수 있습니다 보일 수 있습니다. 테이블에서 레코드를 물리적으로 삭제하는 것만으로도주의를 기울여야합니다. 그러면 클라이언트는 사라진 것을 절대로 볼 수 없기 때문입니다. – DCoder