지금 부터 대용량 계층형 게시판을 만들려고 합니다.
개발 환경은
언어: JSP+STRUTS2
DB: MS-SQL
기타: iBatis, WINDOWS 2003
개발툴: Eclipse
1. 단계 DB 구축
- 데이터 베이스 스키마
CREATE TABLE [dbo].[BOARD_MASTER](
[BOARD_NU] [int] NOT NULL,
[CONTENT_NU] [int] NOT NULL,
[TITLE] [varchar](256) COLLATE Korean_Wansung_CI_AS NULL,
[CONTENTS] [text] COLLATE Korean_Wansung_CI_AS NULL,
[WRITE_DT] [datetime] NULL,
[ADJUST_DT] [datetime] NULL,
[USER_ID] [varchar](20) COLLATE Korean_Wansung_CI_AS NULL,
[WRITER] [varchar](50) COLLATE Korean_Wansung_CI_AS NULL,
[RESULT] [varchar](50) COLLATE Korean_Wansung_CI_AS NULL,
[KIND] [varchar](50) COLLATE Korean_Wansung_CI_AS NULL,
[DEPTH_NU] [int] NULL,
[ORDER_NU] [int] NOT NULL,
[STEP_NU] [int] NOT NULL,
[COUNTS] [int] NULL,
CONSTRAINT [PK_BOARD_MASTER] PRIMARY KEY NONCLUSTERED
(
[BOARD_NU] ASC,
[CONTENT_NU] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
연결 테이블이 더 있지만 가장 기본 로직이 되는 부분 설명하기 위해 관계는 모두 끊었습니다.
위 스크립트의 특징은 기본키인 [BOARD_NU] , [CONTENT_NU] 를 nonclustered로 설정하였고, [ORDER_NU] , [STEP_NU] 으로 구성되어 있는 index를 clustered로 설정하였습니다. 이와 같이 설정한 이유는 게시판 특성에 맞게 최신글이 상단 오래된 글이 하단으로 표출 되도록 하기위해 별도의 order by 구문을 사용하지 않게 하여 성능을 향상 시키기 위해서 입니다.
보충 설명
clustered index 는 한번에 원하는 데이타는 찾는 것이고, nonclustered index는 찾아보기를 통해서 원하는 데이타가 있는 곳에 근접하는 것이라 생각하면 됩니다. index는 검색할때 빠른 속도로 원하는 데이타를 찾아보기 위한 것이지만, 데이타를 변경하는 insert, update 같은 쿼리는 해당 색인을 만들어야 하기에 속도에 부담을 주게 됩니다.
보충 설명에서 알 수 있듯이 글의 정렬 컬럼을 [ORDER_NU] 하나만으로도 충분히 구성이 가능하시만, 오래된 글에 대한 답글이 달릴경우 time out이 걸릴정도의 많은 시간이 소요 됩니다. 그래서 [STEP_NU] 이란 컬럼을 두어 update를 최소로 구성 하였습니다.
개발 환경은
언어: JSP+STRUTS2
DB: MS-SQL
기타: iBatis, WINDOWS 2003
개발툴: Eclipse
1. 단계 DB 구축
- 데이터 베이스 스키마
CREATE TABLE [dbo].[BOARD_MASTER](
[BOARD_NU] [int] NOT NULL,
[CONTENT_NU] [int] NOT NULL,
[TITLE] [varchar](256) COLLATE Korean_Wansung_CI_AS NULL,
[CONTENTS] [text] COLLATE Korean_Wansung_CI_AS NULL,
[WRITE_DT] [datetime] NULL,
[ADJUST_DT] [datetime] NULL,
[USER_ID] [varchar](20) COLLATE Korean_Wansung_CI_AS NULL,
[WRITER] [varchar](50) COLLATE Korean_Wansung_CI_AS NULL,
[RESULT] [varchar](50) COLLATE Korean_Wansung_CI_AS NULL,
[KIND] [varchar](50) COLLATE Korean_Wansung_CI_AS NULL,
[DEPTH_NU] [int] NULL,
[ORDER_NU] [int] NOT NULL,
[STEP_NU] [int] NOT NULL,
[COUNTS] [int] NULL,
CONSTRAINT [PK_BOARD_MASTER] PRIMARY KEY NONCLUSTERED
(
[BOARD_NU] ASC,
[CONTENT_NU] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
(스크립트 파일 첨부 되었음)
연결 테이블이 더 있지만 가장 기본 로직이 되는 부분 설명하기 위해 관계는 모두 끊었습니다.
위 스크립트의 특징은 기본키인 [BOARD_NU] , [CONTENT_NU] 를 nonclustered로 설정하였고, [ORDER_NU] , [STEP_NU] 으로 구성되어 있는 index를 clustered로 설정하였습니다. 이와 같이 설정한 이유는 게시판 특성에 맞게 최신글이 상단 오래된 글이 하단으로 표출 되도록 하기위해 별도의 order by 구문을 사용하지 않게 하여 성능을 향상 시키기 위해서 입니다.
보충 설명
clustered index 는 한번에 원하는 데이타는 찾는 것이고, nonclustered index는 찾아보기를 통해서 원하는 데이타가 있는 곳에 근접하는 것이라 생각하면 됩니다. index는 검색할때 빠른 속도로 원하는 데이타를 찾아보기 위한 것이지만, 데이타를 변경하는 insert, update 같은 쿼리는 해당 색인을 만들어야 하기에 속도에 부담을 주게 됩니다.
보충 설명에서 알 수 있듯이 글의 정렬 컬럼을 [ORDER_NU] 하나만으로도 충분히 구성이 가능하시만, 오래된 글에 대한 답글이 달릴경우 time out이 걸릴정도의 많은 시간이 소요 됩니다. 그래서 [STEP_NU] 이란 컬럼을 두어 update를 최소로 구성 하였습니다.
컬럼 | 설명 |
BOARD_NU | 보드 ID |
CONTENT_NU | 글번호 |
TITLE | 글 제목 |
CONTENTS | 글 내용 |
WRITE_DT | 작성 날짜 |
ADJUST_DT | 수정 날짜 |
USER_ID | 사용자 ID |
WRITER | 사용자 이름 |
RESULT | 옵션] 글처리 상태 |
KIND | 옵션] 글 분류(구분) |
DEPTH_NU | 답글의 깊이 |
ORDER_NU | 글 정렬 번호 |
STEP_NU | 부모글에 대한 글 정렬 번호 |
COUNTS | 조회수 |
'프로그래밍언어 > 패턴, 알고리즘, 프로토콜' 카테고리의 다른 글
STRUTS2+iBatis 계층형 게시판 만들기 (3) (0) | 2009.12.14 |
---|---|
STRUTS2+iBatis 계층형 게시판 만들기 (2) (0) | 2009.12.14 |
VB 프로세스 끝내기 (1) | 2009.11.26 |
Internet Explorer의 작동이 중지 되었습니다. 비스타 오류 (0) | 2009.10.21 |
<s:submit /> 에서 이미지 사용하면서 값 전달 하기 (0) | 2009.10.20 |
댓글