2013-06-17 4 views
0

기본적으로 자바 스크립트는 데이터베이스의 테이블에있는 특정 행이 변경되었는지 30 초마다 GET 요청을 보냈지 만 ASP.NET MVC 응용 프로그램을 작성하고 있습니다.주기적으로 업데이트를 확인하는 "가장 저렴한"방법은 무엇입니까?

나는 OutputCache 속성을 살펴 봤지만 컨텐츠를 캐시하고 실제로 업데이트가되었는지 확인하지 않기 때문에 작동하지 않는 것처럼 보입니다.

이 작업을 수행하는 "가장 저렴한"방법은 무엇입니까? 서버를 가장 부담스럽게하는 방법을 의미합니까?

+8

아마도 데이터베이스에 변경이있을 때 푸시 알림을 사용하는 [SignalR] (http://signalr.net/) 일 수 있습니다 (데이터베이스에 따라 수동 또는 'SqlDependency'에 의해 추적 될 수 있음) ... –

+0

한가지 명심해야 할 점은 시스템에 많은 사용자가 있다면 빠른 HTTP get은 일반적으로 긴 폴링 또는 웹 소켓보다 훨씬 저렴합니다. 서버가 몇 백만 번의 빠른 가져 오기를 처리하는 데 능숙하기 때문입니다. 소켓 연결을 몇 만 개 열어두면 좋을 것입니다. –

답변

0

아마 SignalR (그 중 하나는 데이터베이스에 따라 수동으로 또는 SqlDependency에 의해 추적 될 수있다) ...

나는 와이어트 바넷의 제안을 사용하고 작동 큰.

답변 해 주셔서 감사합니다. 감사합니다.

Btw 답변으로 자신의 의견을 표시 할 수 없기 때문에 나는 대답하고 있습니다.

0

HEAD 요청은 빠르지 만 보장 할 수는 없지만 조사 할 가치가 있습니다.

0

변경 사항을 스트리밍 할 수없는 경우 가장 싼 방법은 날짜를 사용하는 API를 사용하고 변경이 발생했는지 여부를 나타내는 부울 플래그 또는 정수를 반환하는 것입니다. 본질적으로 폴링 (polling)이며, SignalR 또는 다른 메시지 수신 프로세스가 불가능한 경우, 이것이 가장 작은 응답이기 때문에 최소화됩니다.

0

원하는대로 롱 폴링을 고려해 보셨습니까? 예를 들어, 자바 스크립트를 사용하여 GET/POST 요청을 만들고 '이벤트'가 발생할 때까지 서버가 응답을 보류하도록 허용하십시오.

0

OutputCache 완벽하게 작동합니다. 하지만 만료 시간은 폴링 시간의 구분자 여야합니다. 예를 들어 10 초 -이 경우 클라이언트 크기는 30 초입니다.

저는 EF에 대한 전문가가 아니지만 데이터베이스가 트리거를 지원하는 경우; 그건 옵션이 될 것이고 트리거가 설정되어 있지 않으면 오랜 기간 동안 결과를 캐싱 할 수 있습니다 (예 : 1 시간).

그러나 기록이 매우 빠르게 업데이트되는 경우 비용이 많이 듭니다.

그런 경우에는 캐싱 + 타임 스탬프 메커니즘 (예 : NoSQL db 또는 오라클의 타임 스탬프)과 함께 갈 것입니다.

그리고 레코드를 변경할 때마다 30 초마다 레코드를 가져 오는 것을 기억하십시오. 그것은 당신의 솔루션을 훨씬 단순하게 만들어주기 때문에 좋은 일입니다.

데이터베이스에 변화가있을 푸시 알림과
관련 문제