문제

전환율 및 기타 흥미로운 데이터를 측정하는 데 도움이되는 웹 사이트의 통계 모듈을 개발하고 있습니다.

내가 사용하는 메커니즘은 - 통계 테이블에 데이터베이스 항목을 저장하는 것입니다 - 사용자가 내 DB에 특정 영역을 입력 할 때마다 (쿠키의 도움으로 중복 레코드를 피합니다).

예를 들어, 다음 영역이 있습니다.

  1. 웹 사이트 - 최근 Google 웹 로그 분석 신뢰를 중단하면서 고유 한 사용자를 계산하는 데 사용되는 일반 구역.
  2. 카테고리 - 자기 설명.
  3. 미니 사이트 - 자기 설명.
  4. 제품 이미지 - 사용자가 제품과 리드 제출 양식을 볼 때마다.

문제는 한 달 후에 통계 테이블이 포장되어 있습니다. 많이 줄과 데이터로드를 구문 분석하기 위해 쓴 ASP.NET 페이지 진짜 느린.

나는 어떻게 든 데이터를 구문 분석 할 서비스를 작성한다고 생각했지만 유연성을 잃지 않고도 그렇게 할 수있는 방법을 볼 수 없습니다.

내 질문 :

  1. Google Analytics와 같은 대규모 데이터 구문 분석 응용 프로그램은 데이터를 너무 빠르게로드합니까?
  2. 내가하는 가장 좋은 방법은 무엇입니까?
  3. 어쩌면 내 DB 디자인이 잘못되었고 데이터를 하나의 테이블에만 저장해야합니까?

도움을주는 모든 사람에게 감사합니다.

Eytan.

도움이 되었습니까?

해결책

당신이 찾고있는 기본 접근법을 호출합니다 집합.

데이터를 통해 계산 된 특정 기능에 관심이 있으며 표시 웹 사이트를 시작할 때 데이터를 "온라인"계산하는 대신 밤에 배치 프로세스를 통해 또는 로그 레코드가 작성 될 때 점차 오프라인으로 계산합니다.

간단한 향상은 모든 히트를 저장하고 계산하는 대신 사용자/세션 당 카운트를 저장하는 것입니다. 이는 세션 당 히트 순서대로 분석 처리 요구 사항을 줄입니다. 물론 로그 항목을 삽입 할 때 처리 비용이 증가합니다.

또 다른 종류의 집계가 호출됩니다 온라인 분석 처리, 데이터의 일부 차원을 따라 집계하고 사용자가 다른 차원을 브라우징 모드에서 집계 할 수 있습니다. 이것은 성능, 저장 및 유연성을 상환합니다.

다른 팁

두 개의 데이터베이스를 사용하여 잘 할 수있는 것 같습니다. 하나는 트랜잭션 데이터를위한 것이며 모든 삽입 문을 처리합니다. 다른 하나는 모든 쿼리 요청을보고하고 처리하기위한 것입니다.

보고 데이터베이스에서 코골이를 색인화하거나 데이터를 제거 할 수 있으므로 쿼리에 더 적은 결합이 사용됩니다. 트랜잭션 데이터베이스에서보고 데이터베이스로 데이터를 주기적으로 내 보냅니다. 이 법은 앞에서 언급 한 집계 아이디어와 함께보고 대응 시간을 개선 할 것입니다.

알아야 할 또 다른 속임수입니다 분할. 선택한 데이터베이스에서 어떻게 수행되는지를 찾아보십시오. 그러나 기본적으로 아이디어는 데이터베이스에 테이블을 여러 하위 테이블에 분할하여 각각 동일한 값을 기준으로 동일한 정의로 유지하도록합니다.

당신의 경우, 무엇입니까? 매우 유용한 것은 "범위 파티셔닝"입니다. 값이 떨어지는 범위를 기반으로 파티션을 선택합니다. 날짜 범위별로 분할하는 경우 매주 (또는 매일 또는 매월-데이터 사용 방법과 그에 따라 별도의 하위 테이블을 만들 수 있습니다).

즉, 쿼리를 발행 할 때 날짜 범위를 지정하면 해당 범위 외부의 데이터가 고려되지 않습니다. 이는 인덱스보다 훨씬 더 큰 시간 절약으로 이어질 수 있습니다 (색인은 모든 행을 고려해야하므로 데이터와 함께 성장할 것입니다. 파티션은 하루에 1 개입니다).

이렇게하면 온라인 쿼리 (ASP 페이지를 누르면 발행 된 것)와 필요한 통계를 사전 계산하는 데 사용하는 집계 쿼리가 훨씬 빠릅니다.

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