2012-03-18 3 views
1

열려있는 작업 ($ .getJSON)에 대해 10 초마다 db를 폴링하는 모바일 애플리케이션을 구축 중입니다. 쿼리 결과는 꽤 무거울 수 있습니다 (약 50kb JSON). 그래서 밝게하는 방법을 찾고 있습니다. db의 변경 내용 만 검색하는 방법이 있다고 가정하지만 머리를 감쌀 수는 없습니다. MySQL에서 마지막 쿼리 이후 차등 데이터 가져 오기

은 현재 PHP 부분에서 나는 단순히 SELECT * FROM table WHERE status = 'open'을한다. 잡스는 약 5 분 동안 열려있을 것이므로 그 시간 동안 나는 이미 가지고있는 많은 데이터를 쓸데없이 얻는다. 내가 대신 검색해야 할 것은 새로운 작업 (마지막 쿼리 이후에 추가) 일 뿐이며 그 사이에 작업이 닫히기 때문에 목록에서 제거 할 수 있습니다.

이것을 수행 할 수있는 실용적인 방법이 있습니까? 어쩌면 PHP 쪽입니까?

감사합니다.

+1

당신은'LastChangeTime' 열 및 쿼리 마지막 요청 이후 업데이트 된 작업 만 추가 할 수 있습니다 보일 수 있습니다. 테이블에서 레코드를 물리적으로 삭제하는 것만으로도주의를 기울여야합니다. 그러면 클라이언트는 사라진 것을 절대로 볼 수 없기 때문입니다. – DCoder

답변

0

테이블 스키마를 알지 못하면 무엇이 가장 좋을지 알려주는 것이 약간 어렵습니다. 많은 사용자가 폴링을 수행 할 경우 클라이언트에서 필터링을 수행하는 것이 좋습니다. 내 말은, 쿼리에서 얻은 각각의 열린 작업을 추적하고 해당 작업과 관련된 폴링 시간이 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 분 지연은 많은 :)

+0

흥미 롭지 만 직장의 오픈 시간은 평균 5 분, 보통 1 ~ 8 분입니다. – chris

+0

답변에 대한 귀하의 의견에 직접 답변했습니다. –

관련 문제