본 게시판의 장점은
"게시물의 갯수와 상관없이 (DB용량이 받쳐주는대로) 페이징/페이지 검색 속도가 동일하다는 것"입니다.
대신 단점은
1. 오래된 게시물의 답변 글을 쓸 경우에는 timeout 이 발생할 수 있다.
2. 삭제시 레코드를 직접 삭제하는 방법보다는 "xxx에 의해 삭제되었다.."라는 형태를 쓰는 것을 권장한다.
1번같은 경우는 먼저도 말했지만
게시판이라는것이 주로 테이블의 윗부분(최근글)에서 빈번한 삽입과 답변이 이루어지는 것을 감안하였을 때
심각하게 고려할 만한 사항은 아니라고 봅니다. 아무리 중간에 삽입하는 것이 느리더라도
테스트해보시면 아시겠지만, 100페이지 정도에서 답변글을 달아도 느리다는 느낌을 전혀 주지 않습니다.
그럼... 설명에 앞서 준비를 하겠습니다.
두 개의 소스를 준비하였습니다. QA에서 실행시키면 될 것입니다.
*************************************************************************
1. 테이블 (편의상 [t3]이라는 테이블로 작성하였습니다.
*************************************************************************
/****** Object: Table [dbo].[t3] Script Date: 2003-07-19 오전 12:37:23 ******/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t3]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t3]
GO
/****** Object: Table [dbo].[t3] Script Date: 2003-07-19 오전 12:37:23 ******/
CREATE TABLE [dbo].[t3] (
[seq] [int] IDENTITY (1, 1) NOT NULL ,
[ref] [int] NOT NULL ,
[depth] [smallint] NOT NULL ,
[name] [varchar] (20) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[email] [varchar] (50) COLLATE Korean_Wansung_CI_AS NULL ,
[password] [varchar] (16) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[title] [varchar] (100) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[writeday] [datetime] NOT NULL ,
[readnum] [smallint] NOT NULL ,
[ip] [varchar] (15) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[content] [text] COLLATE Korean_Wansung_CI_AS NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[t3] WITH NOCHECK ADD
CONSTRAINT [PK_t3] PRIMARY KEY CLUSTERED
(
[seq] DESC
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[t3] ADD
CONSTRAINT [DF_t3_depth] DEFAULT (0) FOR [depth],
CONSTRAINT [DF_t3_writeday] DEFAULT (getdate()) FOR [writeday],
CONSTRAINT [DF_t3_readcount] DEFAULT (0) FOR [readnum]
GO
CREATE INDEX [IX_t3] ON [dbo].[t3]([ref] DESC ) ON [PRIMARY]
GO
*************************************************************************
2. 데이터 입력
*************************************************************************
set nocount on
--변수 선언
declare @name varchar(20)
declare @email varchar(50)
declare @password varchar(20)
declare @title varchar(100)
declare @ip varchar(15)
declare @content varchar(200)
--루프용변수
declare @iCount int
--초기화
set @name = '이성근'
set @email = 'rainn@rainn.pe.kr'
set @password = 'abcdefg'
set @ip = '127.0.0.1'
select @iCount = max(seq) from t3
set @iCount = @iCount + 1
while (@iCount <= 1000000) -- 이 조건문에 1,000,000 을 주면 100만개의 레코드를 만듭니다.
begin
set @title = cast(@iCount as varchar) + ' 번째 글입니다.'
set @content = cast(@iCount as varchar) + ' 번째 글의 내용입니다.'
insert into t3 (ref, name, email, password, title, ip, content) values (@iCount, @name, @email,@password, @title, @ip, @content)
set @iCount = @iCount + 1
end
이하 설명은 다음 강좌에서 하겠습니다. ^^*
집어치우라고 돌던지셔도 좋습니다 ^^;;
===============================
이성근 (rainn@rainn.pe.kr)
SoongSil Univ.95
===============================
'asp' 카테고리의 다른 글
대용량 게시판 만들기 강좌 #3/4 (LIST) (2) | 2007.05.02 |
---|---|
대용량 게시판 만들기 강좌 #2/4 (게시판 로직) (0) | 2007.05.02 |
이전 URL 검사하는 팁 (0) | 2007.05.02 |
ASP 서버변수 값들 확인 스크립트 (0) | 2007.05.02 |
동적으로 배열 크기 조절하는 팁 (0) | 2007.05.02 |