많은 수의 클라이언트의 데이터를 받아서 데이터베이스에 저장해야하는 .NET 데이터 로깅 응용 프로그램을 만들고 있습니다.자주 업데이트되는 데이터 캐싱 및 저장
클라이언트가 서버에 시작 이벤트를 보내고 하트 비트 이벤트를 보내면 데이터의 마지막 활동 시간이 업데이트됩니다. 클라이언트 응용 프로그램이 이러한 이벤트를 보낼 기회가 없기 때문에 종료 이벤트를 사용할 수 없습니다.
간단한 방법은 시작 이벤트에서 db 삽입을 수행 한 다음 각 하트 비트에서 db 업데이트를 수행하는 것이지만 많은 수의 클라이언트 각각에서 몇 초마다 하트 비트가 발생하면 매우 많은 db 집약적입니다. 데이터베이스 테이블이 커지면 업데이트도 비용이 많이 듭니다.
따라서 클라이언트에서 하트 비트 전송을 중단 할 때 데이터를 메모리에 캐시 한 다음 데이터베이스로 플러시합니다.
그래서 난에 적합한 데이터 구조와 전략이 필요 : 클라이언트가 시작 이벤트를 보낼 때- 는 세션 객체를 만들기
- 하트 비트 이벤트가
- 확인 세션을 수신 할 때 효율적으로 개체를 업데이트하는 시간이 초과되어 데이터베이스에 저장 중입니다.
주기적으로 반복되는 메모리의 해시 테이블 행을 생각하고 있습니다. 시간 초과 된 세션을 확인하기위한 타이머 트리거 이벤트.
이런 종류의 문제에 대한 더 나은 접근 방법이 있습니까?
(1 - 서버의 가동 시간 pctg) – Unreason
서버 장애로 인해 소량의 데이터가 손실되면 문제가되지 않습니다. 사실,이 경우 세션은 정확하지 않은 종료 시간으로 지속되는 것이 아니라 전체적으로 손실 될 수 있습니다. – DanK