database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1536 게시물 읽기
No. 1536
로그(카운터, 통계) 테이블 설계시 조언좀 부탁합니다. [왼료됨]
작성자
김찬수(sqlkim)
작성일
2004-09-08 10:23ⓒ
2004-09-22 11:04ⓜ
조회수
10,758

로그(카운터, 통계기초) 테이블을 설계하려고 합니다.

로그 테이블을 일반 테이블과 같이 설계하는 것보다

MSSQL의 특성과 로그 테이블의 특성에 맞게 설계하는

것이 좋을 것 같다는 생각이 드닌데여

예를들어)

- 테이블을 여러게 쓰면 속도가 느려지나요?

- 릴레이션이 없어야 속도가 빠른가요?

- 속도가 가장 빠른 저장형태의 테이블 구조는?

- 통계처리시 접근이 편하게 하기 위해 Key를 어떻게 쓰면 좋은가요?

-  접속로그 테이블에서 필요한 Key는 어떻한 형태로만드나요?

- pk와 CLUSTERED 옵션이 없는 테이블이 좋은가요?

기타등등 필요한 조언을 듣고 싶구요

테일블 설계 예제도를 알고 싶습니다.

 

선배님들께 한수 조언을 듣고자 합니다.

 

부탁해요~

이 글에 대한 댓글이 총 3건 있습니다.

페이지별 로그 분석이 아닌 접속로그에 대한 것이라면

하나의 테이블로도 분석이 가능하지 않을까 싶습니다.

 

그리고 실제 제가 일하는 곳에서는 userid부분을 넣지 않았지만,

로그인시 당일의 ipaddress를 검색하여 update시키면

사이트에서 로그인을 하는 회원에 대한 분석도 함께 갈 수 있습니다.

 

테이블의 설계는

CREATE TABLE COUNTER (
 Num int IDENTITY(1, 1) NOT NULL , --증가분
 UserID varchar(100) NULL  , --사용자 아이디
 IP varchar (15)  NOT NULL , --아이피
 YY smallint   NOT NULL , --접속년도
 MM tinyint    NOT NULL , --접속월
 DD tinyint    NOT NULL , --접속일
 HH tinyint    NOT NULL , --접속시간의 시
 MT tinyint    NOT NULL , --접속시간의 분
 Season tinyint   NOT NULL , --접속 계절
 DW tinyint    NOT NULL , --접속 요일
 Browser varchar (50) NOT NULL , --사용자 브라우져
 OS varchar (50)  NOT NULL , --사용자 OS
 Referer varchar (200) NOT NULL , --접속전 주소
 Target varchar (200) NOT NULL   --사이트 접속 주소
) ON PRIMARY
GO

 

아래와 같이 되구요.

프로그램의 소스는 global.asa에서 삽입을 시키겠지요.

그리고 나면 분석하는 것은 위의 정보대로 출력할 수도 있고

userid가 Null이 아닌 것만 때어서 검색한다면

로그인 회원에 대한 분석이 될껀데 이부분은 view로 만들어

검색하시는 것이 훨씬 더 많은 분석을 가능토록 할 겁니다.

 

 

여리님이 2004-09-08 16:06에 작성한 댓글입니다. Edit

기본적인 테이블 설계에 대한 것은 아니고요.
로그 테이블을 운영하는 것에 대하여 저의 경험을 말씀드리려고 합니다.
원하시는 고속의 데이타 처리가 필요한 경우, 사용자의 정보를 받는 곳과 분석하는 테이블을 별로로 운영하세요.
즉 INSERT나 DELETE용 테이블과 SELECT 테이블을 구분하여 운영하세요.
그리고 원하시는 데이타들의 집계 테이블을 별로 운영하시면, 기초 데이타를 직접 조회를 해야 하는 것이 아니라
그것들을 이용하여 통계를 봐야 한다면 그 자료들을 미리 미리 준비해 두세요. 이렇게 해야 사이트를 사용하는
고객들과 통계자료를 보는 회사내 사용자들에게 너무 느려서 못 사용하게다는 말을 안 들을 확률이 높습니다.

 

그리고 작업 순서는 아래 정도면 될 것 같습니다.
1. 로그 테이블(기록과 삭제 전용) 로그을 기록함
2. 일정 시간마다 별도의 기초 데이타 테이블(SELECT전용)로 이동시킴(배치 작업 실행)
   1) 1번의 내용 이동시, 1번 테이블에 있는 내용은 삭제함.
   2) 기초 데이타 테이블은 일정 기간단위(월별)로 다른 테이블에 데이타를 넣음.
      (1) 레코드가 500만건 정도 되니까, 계속해서 쌓인 상태에서 통계를
          생성하는 것도 부하가 많이 걸리는 작업이더군요. 특히나 기초 데이타로
   사용되는 것들이 거이 index를 잡기 힘든 내용들이라
   3) 매일 또는 1주일에 한 번 정도 로그 테이블을 DBCC dbreindex를 이용하여 페이지들을 정리해 주세요..
3. 일정 시간마다 기초 데이타 테이블의 데이타를 근거로 집계 테이블의 내용 생성합니다.

가을남자님이 2004-09-08 21:36에 작성한 댓글입니다. Edit

답변주신 분들 대단히 감사합니다.

 

많은 도움 되었습니다';

김찬수님이 2004-09-11 01:43에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1540백만건이상의 데이터처리중 궁금한점
질문자
2004-09-10
3191
1538[질문] 테이블 설계시 각종 key 와 default 값을 줄경우... [1]
AmadeusM
2004-09-08
2630
1537특정테이블에 있는 내용중 2000라인 이상이 지워졌어요.. [1]
곽성진
2004-09-08
2136
1536로그(카운터, 통계) 테이블 설계시 조언좀 부탁합니다. [왼료됨] [3]
김찬수
2004-09-08
10758
1535Like절에서 Index사용 여부... [2]
알바트로스
2004-09-07
3487
1534[급 !! 질문]한자 깨짐 현상 ? [2]
이리
2004-09-07
2533
1533두개의 테이블을 엮어서 쿼리를 만들어야 합니다
권기찬
2004-09-07
2401
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다