문제

저는 현재 회사 내의 모든 워크스테이션에 배포될 Windows 서비스를 개발하는 중입니다.서비스의 목적은 다양한 통계를 수집하여 중앙 위치에 기록하는 것입니다.

첫 번째 반복의 경우 서비스는 기록할 데이터가 있을 때마다 SQL을 직접 호출하여 기록합니다.약 120개의 워크스테이션에서 테스트한 결과 이는 좋은 생각이 아니며 확장되지도 않는다는 결과가 나왔습니다.

데이터베이스 서버에 과부하가 걸리지 않는 문제의 데이터 수집을 위한 대체 전략을 추천할 수 있는 사람이 있습니까?이는 약 2000대의 머신에 배포될 예정입니다.

저는 C#으로 작업하고 있습니다.

감사해요.

도움이 되었습니까?

해결책 2

질문을 마무리하기 위해 대답하십시오. 내가 그것을 구현하게 된 방법은 다음과 같습니다.

데이터 수집

  • AC# 서비스는 워크 스테이션에서 실행됩니다. 다른 간격으로 (시스템의 특정 이벤트를 기반으로 미리 정해되지 않음) 데이터 수집이 시작됩니다.
  • 데이터는 로컬 워크 스테이션의 파일에 기록됩니다.
  • 그런 다음 데이터 파일이 네트워크 위치에 복사됩니다.

데이터 구문 분석

  • "수입업자"프로그램은 일정에 따라 실행됩니다. 마지막으로 실행 된 이후로 생성 된 모든 텍스트 파일을 거쳐서 구문 분석하여 SQL로 가져옵니다.

내가 이런 식으로 구현 한 이유는 다음과 같습니다.

  • 원래 질문에서 언급 한 SQL 서버의 리소스 문제를 피하십시오.
  • 생성 된 파일은 실제로 1-2KB입니다
  • 수입업자는 과거에 몇 분 동안 진행중인 사본과 충돌하지 않도록합니다.
  • Importer는 처리 된 파일을 삭제하고 "LastScantime"및 "CurrentTime-Xminute"창 내에없는 파일을 건너 뜁니다.

다른 팁

귀하의 질문에 따르면 이미 작동하는 솔루션이 있고 이를 확장하는 방법에 대한 조언이 필요한 것으로 보입니다.내 두 센트는 다음과 같습니다.

  • 워크스테이션 서비스에서 SQL 연결을 열어두지 마십시오.
  • 메모리에서 데이터 업데이트를 일괄적으로 시도하고 특정 양의 데이터가 수집되거나 특정 간격이 경과한 후에만 데이터베이스를 업데이트하십시오(연결이 덜 수다스럽고 더 복잡해집니다).
  • 중복 데이터를 피하기 위해 데이터베이스가 올바르게 정규화되었는지 확인하십시오.

개인적으로 2000개의 워크스테이션으로 확장해야 하는 미션 크리티컬한 작업의 경우 상용 제품을 사용하고 휠을 다시 개발하지는 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top