2014-02-19 2 views
0

페이지 추적기 데이터베이스 테이블을 디자인하고 싶지만 그 문제가 거의 없습니다. 내가 pageviewspageVisits 특정 SessionID에 해당하는 업데이트하면 웹 페이지 추적기를위한 데이터베이스 디자인

create table pageTracker(
ID bigint(20) NOT NULL, 
TrackerID bigint(20) NOT NULL, 
SessionID varchar(100) NOT NULL, 
pageViews bigint, 
pageVisits bigint, 
primary key(ID) 
); 

나는 특정 시간 간격 내에 pageViewspageVisits를 쿼리 할 수 ​​없습니다.

create table pageTracker(
    ID bigint(20) NOT NULL, 
    TrackerID bigint(20) NOT NULL, 
    SessionID varchar(100) NOT NULL, 
    pageViews bigint, 
    pageVisits bigint, 
    time TimeStamp, 
    primary key(ID) 
    ); 

하지만 pageViews하고 테이블에있는 항목의 큰 숫자를 만들어 특정 시간에 대한 새로운 항목으로 pageVisits 각을 삽입 할 경우 나는 여분의 열 시간을 추가합니다.

효율적인 방법이 있습니까?

답변

1

매번 SessionID에 대해 pageViewspageVisits을 업데이트하려고한다고 가정합니다. 이 경우 첫 번째 삽입 말 것 : 동일한 사용자가 동일한 페이지를 다시 방문 할 경우

Session ID = 23R4E11, pageViews = 1, pageVisits = 1 

지금, 당신이로 기존 행을 업데이트 할 것입니다 : 모든 업데이트를 유지하기 위해이 경우

Session ID = 23R4E11, pageViews = 2, pageVisits = 1 

, 당신은 만들 수 있습니다 1 개의 테이블이 pageTrackerHistory이라고 불려, pageTracker 테이블로 갱신 할 때마다 테이블을 pageTrackerHistory 테이블에 삽입 할 수있는 트리거를 써주세요.

이렇게하면 운영 테이블 pageTracker에 최소한의 행이 포함되고 pageTrackerHistory 테이블에는 거대한 감사 레코드가 포함됩니다.

희망이 있으면 방향을 제시 할 수 있습니다. :-)

+0

나는 시간/일/주간을 기반으로 쿼리해야하며 쿼리는 pageTrackerHistory 테이블에 대해 많은 비용이 듭니다. –

+0

타임 스탬프에서 세부 사항을 추출 할 수 있습니다 - (A) SELECT DAYOFMONTH ('1998-02-03'); (B) SELECT DAYOFWEEK ('1998-02-03'); - 감사 테이블에서 값 비싼 쿼리를 실행할 수 있으므로 성능에 영향을주지 않고 작업 테이블이 그대로 유지됩니다. –

+0

거대한 데이터 입력에서 pageTracker 테이블을 구제하는 아이디어. 하지만 내가 daywise/weekly/month 기반 추적기 데이터를 쿼리 할 때 나는 쿼리 테이블을 가지고 있고 더 많은 시간이 걸릴 것이다. 그것은 더 효율적으로 히스토리 테이블을 검색 할 수 있는가? –

관련 문제