NHN NBD 벤치마크 결과
(인터넷 게시판 응용 중심으로 MySQL과 성능 비교)
1.2. 인터넷 게시판 서비스 시스템 참조 모델... 3
1.3. NBD Benchmark 시스템 참조 구조... 4
2.2.1. CUBRID 7.3 : 10(thread)*7(process) SqlMap-DBCP. 6
2.2.2. MySQL: 10(thread)*7(process) SqlMap-DBCP. 6
2.3.1. CUBRID vs MySQL TPS비교... 7
2.3.2. CUBRID vs MySQL CPU 사용율 비교... 7
2.3.3. CUBRID vs MySQL DISK사용율 비교... 8
3.1.1. Entities and Relationships. 9
3.2.1. Services Definitions. 14
3.2.2. Transaction Definitions. 18
3.2.3. Workload Type – Hotspot read. 33
3.2.4. Database Scaling and Population. 34
본 문서는 인터넷 게시판 응용 프로그램에서 큐브리드 데이터베이스의 성능을 검증할 목적으로 작성되었으며, 시험 방법 및 시험 결과를 포함하고 있다.
본 문서는 NHN Internet Bulletin Board Application Database Benchmark(이후 NBD Benchmark)의 사양(Specification)을 간략히 기술하고 1차 시험 결과를 제공한다. NBD Benchmark는 인터넷 서비스에서 대표되는 응용 프로그램인 게시판 류의 서비스에 대한 데이터베이스 시스템(혹은 DBMS)의 성능 벤치마크를 정의한 것이다.
NBD Benchmark는 게시판 류의 웹 서비스를 구현하면서 사용되는 데이터베이스 시스템의 성능을 서비스 관점에서 측정하여 시스템들의 성능을 상호 비교하기 위한 것이다. NBD Benchmark는 데이터베이스 시스템의 성능에만 초점을 맞추며, 전체 서비스에 관여되는 웹 서버 등은 배제한 상태로 성능을 측정한다.
1.2. 인터넷 게시판 서비스 시스템 참조 모델
NBD Benchmark의 모델이 되는 인터넷 게시판 서비스에 대한 참조 시스템의 구조는 그림 1과 같다.
l 웹 서비스 클라이언트: 인터넷 게시판 서비스를 이용하는 웹 브라우저와 사용자를 의미한다.
l 인터넷 웹 어플리케이션 서버: 웹 브라우저가 접속하는 웹 서버와 서비스 로직을 수행하는 어플리케이션 서버를 합해서 지칭한다.
l 내부 네트워크: 웹 어플리케이션 서버와 데이터베이스 시스템 사이에 존재하는 네트워크이다. (NBD Benchmark 에서는 웹 어플리케이션 서버와 데이터베이스 시스템이 네트워크 연결 없이 하나의 서버에서 시스템 구성은 고려하지 않는다.)
l 데이터베이스 시스템: 인터넷 게시판 데이터베이스를 저장 관리하고 웹 어플리케이션의 데이터베이스 요청을 처리하는 시스템이다.
그림 1 서비스 시스템 참조 모델
1.3. NBD Benchmark 시스템 참조 구조
NBD Benchmark는 1.2 인터넷 게시판 서비스 시스템 참조 모델에서 웹 어플리케이션 서버가 웹 브라우저(사용자)의 서비스 요청을 처리하기 위해 데이터베이스 시스템에 요청을 보내고 결과를 얻는 과정에서 데이터베이스 시스템의 성능을 측정하기 위한 것으로, (1) 워크로드를 제공하는 테스트 드라이버 프로그램과 (2) 성능 측정 대상인 데이터베이스시스템, 그리고 (3) 데이터를 생성하는 데이터베이스 생성기로 구성된다. (그림 2)
테스트 드라이버는 서비스를 사용하는 웹 브라우저와 서비스를 제공하는 웹 어플리케이션 서버의 역할을 수행하는 프로그램으로 정의된 워크로드를 생성하며, 데이터베이스의 응답 결과를 서비스와 트랜잭션, 그리고 트랜잭션을 구성하는 SQL 쿼리 수준에서 측정한다.
데이터베이스 생성기는 대상 데이터베이스 시스템을 이용해 Database Design에 정의된 NBD 데이터베이스를 생성/구성하는 프로그램이다.
그림 2 NBD Benchmark 시스템 참조 구조
2. 시험 결과
2.1. 시험 환경
항목 |
소항목 |
CUBRID |
MySQL |
데이터베이스 |
버전 |
CUBRID Release 7.3.0.1085 |
5.0.40-nhn_standard_64-log MySQL NHN Standard 64bit Version |
서버 정보 |
시스템 정보 |
시험에 사용된 모든 장비의 SPEC은 동일함. Linux d78741 2.6.18-8.el5 #1 SMP Thu Mar 15 19:46:53 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux | |
CPU |
4 * ( model name: Intel(R) Xeon(R) CPU 5148 @ 2.33GHz cpu MHz : 2327.528 cache size : 4096 KB ) | ||
MEM |
8G | ||
데이터 베이스 구성 |
스케일 |
small-scaled board (게시물 수 1000 ± 10%) 2개 medium-scaled board (게시물 수 100000 ± 10%) 6개 | |
워크로드 유형 |
|
Hotspot read | |
워크로드 설정 |
|
각 DBMS 서버의 CPU 사용률을 극대화 하는 work load 생성. 다음 run을 20분간 3회 연속 순차 수행 CUBRID: 10(thread)*7(process) SqlMap-DBCP MySQL: 10(thread)*7(process) SqlMap-DBCP | |
테스트 드라이버 |
Font-end |
NBench (2007/11/8일 버전) | |
Backend 구성 |
SQL Map + DBCP, JDBC + DBCP | ||
Backend 구성 package |
SQL Map : ibatis-2.3.0.677.jar DBCP : commons-dbcp-1.1.jar JDBC : cubrid_jdbc_1085.jar (CUBRID), mysql-connector-java-5.1.3-rc-bin.jar (MySQL) | ||
기타 소프트웨어 |
|
없음 |
NOTICE:
서비스 적용 시에는 대부분 HA(High Availability) 구성이 필요하므로 복제 기능을 이용하여 Active ó Standby를 구성한다. 따라서 2대의 DB 서버를 구성하는 것을 목표 모델로 하여 시험한다.
2.2. 시험 결과
2.2.1. CUBRID 7.3 : 10(thread)*7(process) SqlMap-DBCP
항목 |
RUN1 |
RUN2 |
RUN3 |
수행 시간 (msec) |
1,207,635 |
1,205,475 |
1,204,228 |
서비스 요청수 |
6,739,478 |
6,688,506 |
6,702,216 |
실패한 서비스 요청수 |
2 |
0 |
0 |
페이지 뷰 (PV/sec) |
944 |
938 |
941 |
초당 트랜잭션 처리수(TPS/sec) |
5,580 |
5,548 |
5,565 |
2.2.2. MySQL: 10(thread)*7(process) SqlMap-DBCP
항목 |
RUN1 |
RUN2 |
RUN3 |
수행 시간 (msec) |
1,207,710 |
1,208,835 |
1,209,678 |
서비스 요청수 |
3,709,017 |
3,709,882 |
3,693,530 |
실패한 서비스 요청수 |
49 |
40 |
32 |
페이지 뷰 (PV/sec) |
540 |
540 |
537 |
초당 트랜잭션 처리수(TPS/sec) |
3,071 |
3,068 |
3,053 |
2.3. 시험 결과 분석
구분 |
CUBRID 7.3 |
MySQL 5.0.40 |
CUBRID vs MySQL |
수행 시간 (msec) |
1,205,779 |
1,208,741 |
182% |
서비스 요청수 |
6,710,067 |
3,704,143 | |
실패한 서비스 요청수 |
1 |
40 | |
페이지 뷰 (PV/sec) |
941 |
539 | |
초당 트랜잭션 처리수(TPS/sec) |
5,564 |
3,064 |
##########2*
2.3.2. CUBRID vs MySQL CPU 사용율 비교
NOTE:
m 수집 방식 : sar –r
m 수집 항목
① USER : Percentage of CPU utilization that occurred while executing at the user level
② SYSTEM: Percentage of CPU utilization that occurred while executing at the system level
③ TOTAL : USER + SYSTEM
2.3.3. CUBRID vs MySQL DISK사용율 비교
NOTE:
m 수집 방법: sar –B
m 수집 항목
① pgpgin/s : Total number of kilobytes the system paged in from disk per second
② pgpgout/s : Total number of kilobytes the system paged out to disk per second
③ faults/s : Number of page faults (major + minor) made by the system per second
n
3. 시험 시나리오
3.1.1. Entities and Relationships
다음 그림은 NBD Benchmark의 데이터베이스에 대한 간단한 ER Diagram이다.
그림 3 NBD 데이터베이스 ER 다이어그램
범례: PK – Primary Key, FK – Foreign Key, NL – Not NULL constraint, U – Unique constraint
NBD_BOARD_INFO 테이블은 데이터베이스에 있는 게시판들의 정보를 포함한다.
표 1 NBD_BOARD_INFO 테이블
필드명 |
필드 정의 (데이터타입) |
제약 조건 |
설명 |
BOARD_ID |
Decimal digits (10) |
PK |
게시판 식별자, |
BOARD_TITLE |
Variable character (100) |
NL |
게시판 제목 |
BOARD_DESCRIPTION |
Variable character (300) |
|
게시판에 대한 설명 |
SERVICE_INFO |
Variable character (30) |
NL |
게시판이 사용되는 서비스 |
BOARD_TYPE |
Variable character (10) |
NL |
게시판의 종류 (예. UCC, Text, Picture) |
BOARD_STATUS |
Variable character (10) |
NL |
게시판의 상태 (예. Active, Closed) |
AUTH_CONTROL |
Variable character (200) |
|
권한을 나타내는 스트링 |
ADMIN_ID |
Variable character (20) |
|
관리자의 ID |
OPEN_DATE |
Date |
|
서비스 시작된 날짜 |
CLOSE_DATE |
Date |
|
서비스 중지된 날짜 |
EXTRA_1 |
|
|
|
EXTRA_2 |
|
|
|
EXTRA_3 |
|
|
|
EXTRA_4 |
|
|
|
n NBD_CATEGORY
NBD_CATEGORY 테이블은 게시판 내에서 게시물들의 주제 구분을 의미한다. 예를 들어, ‘세계 여행’ 게시판이라면 ‘여행 준비’, ‘맛집 소개’, ‘숙소 정보’, ‘여행기’, ‘기타’ 등으로 구분할 수 있다. 게시물을 작성할 때는 특정 주제를 선택할 수도 있고, 주제 선택 없이 ‘전체’가 될 수도 있다.
CATEGORY_ID는 데이터베이스 범위에서 유일해야 한다. BOARD_ID로 어떤 게시판에서 정의된 카테고리인지 나타낸다.
표 2 NBD_CATEGORY 테이블
필드명 |
필드 정의 (데이터타입) |
제약 조건 |
설명 |
BOARD_ID |
Decimal digits (10) |
FK |
게시판 식별자, |
CATEGORY_ID |
Decimal digits (10) |
PK |
카테고리 식별자 |
CATEGORY_NAME |
Variable character (20) |
NL |
카테고리명 |
EXTRA_1 |
|
|
|
EXTRA_2 |
|
|
|
EXTRA_3 |
|
|
|
EXTRA_4 |
|
|
|
n NBD_ARTICLE_INFO
NBD_ARTICLE_INFO 테이블은 모든 게시물에 대한 상세 정보를 저장하고 있다. NBD Benchmark 데이터베이스 모델에서는 게시판 별로 테이블이 분리되지 않고 모든 게시물은 보드 식별자(BOARD_ID)를 가지고 있다.
ARTICLE_ID는 게시판 내에서가 아닌 데이터베이스 범위 내에서 유일해야 한다.
ARTICLE_NO는 게시판 내에서 등록되는 순서로 일련번호를 할당한다. 또한, 게시물이 답글인 경우는 원래 게시물과 동일한 ARTICLE_NO를 갖는다. 답글도 하나의 게시물이므로 ARTICLE_ID는 별도로 부여된다.
REPLY_NO_SEQ는 게시물이 답글인 경우 값을 가지며, 대상 게시물의 ARTICLE_NO에 답글 내에서의 순서 번호를 덧붙인 형태를 스트링으로 인코딩하여 만든다. 예를 들어, 10번 게시물에 대한 3번째 답글인 경우는 ARTICLE_NO는 10이며 REPLY_NO_SEQ는 “10,3”의 값을 가지며, 10번 게시물의 5번째 답글에 대한 첫번째 답글인 경우는 REPLY_NO_SEQ로 “10,5,1”의 값을 가진다.
REPLY_DEPTH는 답글인 경우 중첩 깊이를 표시한다. 예를 들어, 10번 게시물에 대한 3번째 답글인 경우는 REPLY_DEPTH가 1이며, REPLY_NO_SEQ가 “10,5,1”인 답글은 REPLY_DEPTH가 2이다. 답글이 아닌 게시물은 REPLY_DEPTH가 0이다.
READ_COUNTER, RECOMMENDED_COUNTER, COMMENT_COUNTER, SCRAP_COUNTER의 기본값은 0이다.
표 3 NBD_ARTICLE_INFO 테이블
필드명 |
필드 정의 (데이터타입) |
제약 조건 |
설명 |
BOARD_ID |
Decimal digits (10) |
FK |
게시물의 게시판 식별자 |
ARTICLE_ID |
Decimal digits (20) |
PK |
게시물 식별자 |
ARTICLE_NO |
Decimal digits (10) |
NL |
보드 내에서 게시물의 순서 번호 |
REPLY_NO_SEQ |
Variable character (30) |
U |
답글 번호의 시퀀스 (예. ARTICLE_NO 10에 대한 두 번째 답글인 경우 10,2) |
REPLY_DEPTH |
Decimal digits (10) |
|
답글 깊이 (예. REPLY_NO_SEQ가 10,2,1인 경우 2) |
ARTICLE_TITLE |
Variable character (300) |
NL |
게시물 제목 |
PREVIEW_TEXT |
Variable character (500) |
|
미리 보기 텍스트 내용 |
THUMBNAIL_IMAGE |
Variable character (200) |
|
썸네일 이미지의 URI |
ARTICLE_TYPE |
Variable character (10) |
NL |
게시물의 종류 (예. Text, Picture, UCC(Video Clip)) |
ARTICLE_CATEGORY |
Decimal digits (10) |
FK |
게시물의 카테고리 |
ARTICLE_STATUS |
Variable character (10) |
NL |
게시물의 상태 (예. Deleted, Restricted, …) |
WRITER_ID |
Variable character (20) |
NL |
작성자 ID |
WRITER_NICKNAME |
Variable character (50) |
NL |
작성자 필명 |
WRITER_INFO |
Variable character (200) |
|
작성자 정보 (예. IP 주소, e-mail, 성별, 브라우저 쿠키 등) |
POSTED_TIME |
Timestamp |
NL |
게시물 등록 시간 |
MODIFIED_TIME |
Timestamp |
|
게시물 수정 시간 |
ARTICLE_PASSWORD |
Variable character (20) |
|
게시물 암호 |
HAS_ATTACHMENTS |
Character (1) |
|
첨부 포함 여부 (Y / N) |
IS_PRIVATE |
Character (1) |
|
비공개 여부 (Y/N) |
IS_SEARCHABLE |
Character (1) |
|
검색 허용 여부 (Y/N) |
IS_SCRAPED |
Character (1) |
|
스크랩 여부 (Y/N) |
IS_POPULAR |
Character (1) |
|
인기 글 여부 (Y/N) |
READ_COUNTER |
Decimal digits (10) |
NL |
조회수 |
RECOMMENDED_COUNTER |
Decimal digits (10) |
NL |
추천수 |
COMMENT_COUNTER |
Decimal digits (10) |
NL |
덧글 수 |
SCRAP_COUNTER |
Decimal digits (10) |
NL |
스크랩 수 |
EXTRA_1 |
|
|
|
EXTRA_2 |
|
|
|
EXTRA_3 |
|
|
|
EXTRA_4 |
|
|
|
n NBD_CONTENT
NBD_CONTENT 테이블은 NBD_ARTICLE_INFO에 등록된 게시물의 내용을 저장한다.
각 레코드는 ARICLE_ID로 구별한다. (ARTICLE_ID가 Foreign Key 이다.)
표 4 NBD_CONTENT 테이블
필드명 |
필드 정의 (데이터타입) |
제약 조건 |
설명 |
BOARD_ID |
Decimal digits (10) |
FK |
게시판 식별자 |
ARTICLE_ID |
Decimal digits (20) |
PK, FK |
게시물 식별자 |
CONTENT |
LOB (>=1G) |
|
게시물 내용 |
EXTRA_1 |
|
|
|
EXTRA_2 |
|
|
|
EXTRA_3 |
|
|
|
EXTRA_4 |
|
|
|
n NBD_ATTACHMENT
NBD_ATTACHMENT 테이블의 레코드는 NBD_ARTICLE_INFO에 등록된 게시물의 첨부들이다. 하나의 게시물은 여러 개의 첨부를 가질 수 있으므로 게시물 당 ATTACHEMENT_NO를 순서대로 부여한다. (ARTICLE_ID, ATTACHMENT_NO)가 기본키(Primary Key)가 된다. 첨부 데이터 자체는 데이터베이스에 저장하지 않고 별도의 외부 시스템에 저장되므로 해당 URI만을 저장한다.
표 5 NBD_ATTACHEMENT 테이블
필드명 |
필드 정의 (데이터타입) |
제약 조건 |
설명 |
BOARD_ID |
Decimal digits (10) |
FK |
게시판 식별자 |
ARTICLE_ID |
Decimal digits (20) |
PK, FK |
게시물 식별자 |
ATTACHEMENT_NO |
Decimal digits (10) |
PK |
첨부 번호 |
ATTACHEMENT_NAME |
Variable character (20) |
|
첨부 이름 |
ATTACHEMENT_TYPE |
Variable character (10) |
NL |
첨부 종류 (예. Text, Image, File) |
ATTACHEMENT |
Variable character (200) |
|
첨부의 URI |
ATTACHEMENT_SIZE |
Decimal digits (10) |
|
첨부 크기 |
EXTRA_1 |
|
|
|
EXTRA_2 |
|
|
|
EXTRA_3 |
|
|
|
EXTRA_4 |
|
|
|
n NBD_COMMENT
NBD_COMMENT 테이블은 NBD_ARTICLE_INFO에 등록된 게시물의 덧글들을 저장한다.
COMMENT_NO는 게시물 별로 덧글의 게시 순서대로 부여된다. (ARTICLE_ID, COMMENT_NO)가 기본키가 된다.
표 6 NBD_COMMENT 테이블
필드명 |
필드 정의 (데이터타입) |
제약 조건 |
설명 |
BOARD_ID |
Decimal digits (10) |
FK |
보드 식별자 |
ARTICLE_ID |
Decimal digits (20) |
PK, FK |
게시물 식별자 |
COMMENT_NO |
Decimal digits (10) |
PK |
덧글 번호 |
COMMENT_TEXT |
Text or Variable character (500) |
|
덧글 |
COMMENT_STATUS |
Variable character (10) |
NL |
덧글의 상태 (예. Deleted, Restricted, …) |
WRITER_ID |
Variable character (20) |
|
작성자 ID |
WRITER_NICKNAME |
Variable character (50) |
NL |
작성자 필명 |
WRITER_INFO |
Variable character (200) |
|
작성자 정보 (예. IP 주소, e-mail, 성별, 브라우저 쿠키 등) |
POSTED_TIME |
Timestamp |
NL |
게시물 등록 시간 |
RECOMMENDED_COUNTER |
Decimal digits (10) |
NL |
추천수 |
EXTRA_1 |
|
|
|
EXTRA_2 |
|
|
|
EXTRA_3 |
|
|
|
EXTRA_4 |
|
|
|
본 절에서는 NBD Benchmark에서 모델링하고 있는 게시판 서비스를 제공해야 하는 액션 중심으로 정의한다. 본 절에서 정의된 서비스 액션들은 테스트 워크로드를 정의하는 구성요소가 된다.
n Selecting an article
‘게시물 읽기 (Selecting an article)’ 서비스 액션은 게시판에서 특정 게시물 한 개를 선택하여 그 내용을 표시하는 작업으로 다음과 같은 세부 사항을 포함한다.
l 게시물 제목
l 게시물 내용
l 작성자 ID와 필명
l 게시물 등록 시간
l 조회수, 추천수, 스크랩수
l 첨부 리스트 (첨부 리스트에는 첨부 번호, 첨부 이름, 첨부 종류, 첨부 크기 정보가 제공되어야 한다.)
l 덧글 리스트 (덧글 리스트는 덧글 등록 시간 역순으로 나열되어야 하며, 작성자 필명과 조회수, 추천수 정보가 제공되어야 한다.)
l 인접 게시물 리스트 (답글을 제외한 리스트 상에서 이전 게시물과 다음 게시물)
l 답글 리스트 (답글 리스트는 대상 게시물 다음에 답글 게시물 등록 시간의 역순으로 정렬되어야 한다. 이는 중첩된 모든 답글에 해당된다.)
‘게시물 읽기’가 수행되면 해당 게시물의 조회수(READ_COUNTER)가 1 증가되어야 한다.
n Showing article list (pagination) – ordering by article timestamp
‘리스트 보기 (Showing article list)’ 서비스 액션은 선택된 게시판의 게시물 리스트를 페이지 형태로 보여주는 작업으로 다음과 같은 내용을 포함한다. (삭제된 게시물은 리스트에 포함되지 않는다.)
l 총 게시물 수
l 페이지 당 게시물 수
l 게시물 번호 (ARTICLE_NO가 아닌 리스트에 나타나는 순서 번호)
l 썸네일 이미지
l 게시물 제목
l 미리 보기 내용
l 답글 여부 (어떤 게시물에 대한 답글인지 구분되어야 한다.)
l 작성자 필명
l 게시물 작성 시간
l 조회수
l 추천수
l 덧글 수
l 첨부 포함 여부
l 인기 글 여부
l 페이지 번호 리스트
‘게시물 리스트’의 한 페이지에 나타나는 게시물의 개수는 다음과 같이 조정될 수 있다.
l 한 페이지 당 15개 게시물
l 한 페이지 당 30개 게시물
l 한 페이지 당 50개 게시물
‘리스트 보기 – 등록 시간 순 (Ordering by article timestamp)’은 게시물 리스트를 다음과 같은 조건으로 정렬하여야 한다.
l 게시물 등록 시간의 역순 – 최근에 등록된 게시물이 먼저 나옴
l 게시물의 답글은 대상 게시물 다음에 답글 게시물 등록 시간의 역순으로 정렬되어야 한다. 이는 중첩된 모든 답글에 해당된다.
n Showing article list (pagination) – ordering by read counter
‘리스트 보기 – 조회수 순 (Ordering by read counter)’은 다음과 같은 정렬 조건을 선택할 수 있도록 해야 한다.
l 게시물(답글 포함) 조회수의 역순 – 조회수가 많은 게시물이 먼저 나옴
l 게시물(답글 포함) 조회수 순 – 조회수가 적은 게시물이 먼저 나옴
n Showing article list (pagination) – ordering by recommended counter
‘리스트 보기 – 추천수 순 (Ordering by recommended counter)’은 다음과 같은 정렬 조건을 선택할 수 있도록 해야 한다.
l 게시물(답글 포함) 추천수의 역순 – 추천수가 많은 게시물이 먼저 나옴
l 게시물(답글 포함) 추천수 순 – 추천수가 적은 게시물이 먼저 나옴
n Writing a new article
‘게시물 쓰기 (Writing a new article)’ 서비스 액션은 선택된 게시판에 새로운 게시물을 등록하는 작업으로 다음과 같은 정보가 사용자로부터 입력되거나 서비스 시스템으로부터 제공된다.
l 게시판 식별자
l 게시물 제목
l 게시물 종류
l 게시물 카테고리 (NBD_CATEGORY.CATEGORY_ID 형태로 주어지며 해당 게시판에 카테고리가 없거나 카테고리 지정이 없는 경우는 NULL이 주어진다.)
l 게시물 내용
l 미리보기 텍스트 내용 (게시물 내용의 앞부분이 시스템에서 자동으로 생성된다고 가정한다.)
l 썸네일 이미지
l 작성자 ID와 필명 (필명은 선택 사항으로 NULL이 될 수 있다.)
l 작성자 정보
l 게시물 암호 (NULL일 수 있다.)
l 답글 여부 (답글일 경우는 대상 게시물의 ARTICLE_ID가 주어진다.)
l 첨부 여부 (HAS_ATTACHEMENTS)
l 개인글 여부 (IS_PRIVATE)
l 검색 노출 여부 (IS_SEARCHABLE)
게시물 식별자(ARTICLE_ID)는 데이터베이스 시스템에서 제공되어야 한다.
게시물 번호(ARTICLE_NO)는 데이터베이스 시스템에서 제공되어야 한다.
게시물 등록 시간(POSTED_TIME)은 데이터베이스 시스템에서 제공되어야 한다.
n Writing a new article with attachments
‘게시물 쓰기’에서 첨부가 있는 경우는 다음과 같은 첨부에 관한 정보 N개가 추가로 제공된다.
l 첨부 이름
l 첨부 종류
l 첨부 URI
l 첨부 크기
첨부 번호(ATTACHEMENT_NO)는 데이터베이스 시스템에서 제공되어야 한다.
n Deleting an article
‘게시물 삭제 (Deleting an article)’ 서비스 액션은 ‘게시물 읽기’로 선택된 게시물을 삭제하는 작업으로 다음과 같은 정보가 사용자로부터 입력되거나 서비스 시스템으로부터 제공된다.
l 게시판 식별자
l 게시물 식별자
l 현재 사용자 ID (관리자인 경우는 관리자 ID)
게시물 삭제는 사용자 ID가 게시물 작성자 ID와 동일할 경우이거나 관리자일 경우에만 가능하다.
삭제된 게시물은 데이터베이스에서 삭제되지 않는다. 게시물의 상태만 Deleted로 변경되며, 실제 데이터 삭제는 사용자 서비스가 아닌 별도의 작업으로 진행된다. 즉, NBD Benchmark에서는 실제 데이터 삭제를 포함하지 않는다.
게시물 변경 시간(MODIFIED_TIME)은 데이터베이스 시스템에서 제공되어야 한다.
n Canceling deletion of the article
‘게시물 삭제 취소 (Canceling deletion of the article)’ 서비스 액션은 ‘게시물 삭제’로 삭제된 게시물을 다시 정상 게시물로 되돌리는 작업이다. 다음과 같은 정보가 주어진다.
l 게시판 식별자
l 게시물 식별자
l 관리자 ID
삭제 취소 작업은 관리자만 사용 가능하다.
n Adding a comment to the article
‘덧글 쓰기 (Adding a comment to the article)’ 서비스 액션은 ‘게시물 읽기’로 선택된 게시물에 덧글을 추가하는 작업으로 사용자나 서비스 시스템으로부터 다음과 같은 정보가 제공된다.
l 게시판 식별자
l 게시물 식별자
l 덧글 내용
l 작성자 ID와 필명 (필명은 선택 사항으로 NULL이 될 수 있다.)
l 작성자 정보
덧글 번호(COMMENT_NO)는 데이터베이스 시스템에서 제공되어야 한다.
덧글 등록 시간(POSTED_TIME)은 데이터베이스 시스템에서 제공되어야 한다.
n Recommending an article
‘추천하기 (Recommending an article)’ 서비스 액션은 ‘게시물 읽기’로 선택된 게시물이나 함께 표시된 덧글의 추천수를 증가시키는 작업으로 사용자나 서비스 시스템으로부터 다음과 같은 정보가 제공된다.
l 게시판 식별자
l 게시물 식별자
l 사용자 ID
본인이 작성한 게시물이나 덧글에 대해서는 추천하기를 수행할 수 없다. 즉 WRITER_ID가 주어진 사용자 ID와 동일하지 않아야 한다.
n Deleting the comment
‘덧글 삭제 (Deleting the comment)’ 서비스 액션은 ‘게시물 읽기’로 선택된 게시물에 함께 표신된 덧글 리스트 중에 선택된 덧글을 삭제하는 작업으로 다음과 같은 정보가 사용자로부터 입력되거나 서비스 시스템으로부터 제공된다.
l 게시판 식별자
l 게시물 식별자
l 덧글 번호
l 현재 사용자 ID (관리자인 경우는 관리자 ID)
덧글 삭제는 사용자 ID가 게시물 작성자 ID와 동일할 경우이거나 관리자일 경우에만 가능하다.
n Selecting popular (top most read) articles
‘인기글 뽑기 (Selecting popular articles)’ 서비스 액션은 다음 두 가지 작업을 포함한다.
l 서비스 시스템에서 주기적으로 수행되어 게시판 별로 추천수가 일정 값(10)을 넘은 게시물들을 추천수가 많은 순서로 지정된 수만큼 선택해 NBD_ARTICLE_INFO.IS_POPULAR를 설정하여 리스트 보기에 표시될 수 있게 하는 작업‘
l 게시판 별로 인기글로 선정된 게시글 들의 리스트를 ‘리스트 보기 – 조회수 순’과 같은 방식으로 제공하는 작업
‘인기 글 뽑기’의 선택되는 게시물의 수는 다음과 같이 설정될 수 있다.
l 게시판 별로 10개 게시물
l 게시판 별로 20개 게시물
3.2.2. Transaction Definitions
본 절에서는 NBD Benchmark를 수행하는데 사용되는 트랜잭션을 정의한다. NBD Benchmark의 테스트 워크로드는 트랜잭션들의 혼합(mix)으로 구성되며, 성능 측정 중 처리양(throughput)의 단위가 된다. 하나의 서비스 액션은 다수의 트랜잭션으로 구성되고 워크로드의 트랜잭션 믹스에서 정의된 순서로 수행된다.
n Select_Article_Info_And_Update_Read_Counter
‘Select_Article_Info_And_Update_Read_Counter’ 트랜잭션은 ‘게시물 읽기’ 서비스 액션에서 사용된다. 이 트랜잭션은 NBD_ARTICLE_INFO 테이블에서 한 레코드를 조회하고 READ_COUNTER 필드를 변경한다.
입력 조건
데이터베이스에 존재하는 게시물의 식별자
l ARTICLE_ID
l ARTICLE_STATUS = ‘Normal’
l IS_PRIVATE = ‘N’
출력 조건
선택된 1개 튜플
l BOARD_ID
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l POSTED_TIME
l HAS_ATTACHMENTS
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
선택된 게시물의 조회수 증가
l READ_COUNTER = READ_COUNTER + 1
n Select_Content
‘Select_Content’ 트랜잭션은 ‘게시물 읽기’ 서비스 액션에서 Select_Article_Info_And_Update_ Read_Counter 트랜잭션 다음에 연속적으로 사용되며 NBD_CONTENT 테이블에서 한 레코드를. 조회한다.
입력 조건
Select_Article_Info_And_Update_Read_Counter의 게시물 식별자
l ARTICLE_ID
출력 조건
선택된 1개 튜플
l CONTENT
데이터베이스 변경 조건
없음
n Select_Attachement_List
‘Select_Attachement_List’ 트랜잭션은 ‘게시물 읽기’ 서비스 액션에서 Select_Article_Info_And_ Update_Read_Counter 트랜잭션의 결과 중 HAS_ATTACHEMENT의 값이 ‘Y’인 경우에 Select_Content 트랜잭션 다음에 연속적으로 사용되며 NBD_ATTACHEMENT 테이블의 레코드들을. 조회한다.
입력 조건
Select_Article_Info_And_Update_Read_Counter의 게시물 식별자
l ARTICLE_ID
출력 조건
ARTICLE_NO 순으로 정렬된 N개의 튜플
l ATTACHEMENT_NO
l ATTACHEMENT_NAME
l ATTACHEMENT_TYPE
l ATTACHEMENT
l ATTACHEMENT_SIZE
데이터베이스 변경 조건
없음
n Select_Comment_List
‘Select_Comment_List’ 트랜잭션은 ‘게시물 읽기’ 서비스 액션에서 Select_Article_Info_And_ Update_Read_Counter 트랜잭션의 결과 중 COMMENT_COUNTER의 값이 1이상인 경우에 Select_Attachement_List 트랜잭션 다음에 연속적으로 사용되며 NBD_COMMENT 테이블의 레코드들을. 최대 100개까지 조회한다.
입력 조건
Select_Article_Info_And_Update_Read_Counter의 게시물 식별자
l ARTICLE_ID
l COMMENT_STATUS = ‘Normal’
l 출력할 덧글의 최대 개수 100
출력 조건
등록된 날짜 역순으로 정렬된 지정된 개수의 튜플
l COMMENT_NO
l COMMENT_TEXT
l COMMENT_STATUS
l WRITER_ID
l WRITER_NICKNAME
l POSTED_TIME
l RECOMMENDED_COUNTER
데이터베이스 변경 조건
없음
n Select_Before_And_After_Article_Info
‘Select_Comment_List’ 트랜잭션은 ‘게시물 읽기’ 서비스 액션에서 사용되며 NBD_ARTICLE_INFO 테이블의 레코드들을. 2개까지 조회한다.
입력 조건
Select_Article_Info_And_Update_Read_Counter의 게시물 번호
l BOARD_ID (Select_Article_Info_And_Update_Read_Counter의 출력값)
l ARTICLE_NO (Select_Article_Info_And_Update_Read_Counter의 출력값)
l REPLY_NO_SEQ (Select_Article_Info_And_Update_Read_Counter의 출력값)
l REPLY_DEPTH_NO (Select_Article_Info_And_Update_Read_Counter의 출력값)
l ARTICLE_CATEGORY (Select_Article_Info_And_Update_Read_Counter의 출력값)
l ARTICLE_STATUS=’Normal’
l IS_PRIVATE=’N’
출력 조건
이전 게시물 정보와 다음 게시물 정보를 순서대로 나타내는 두 개의 튜플. 이전 게시물이 없거나 다음 게시물이 없는 경우는 하나의 튜플
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l ARTICLE_STATUS
l WRITER_ID
l WRITER_NICKNAME
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Select_Reply_Articles_Info
‘Select_Reply_Articles_Info’ 트랜잭션은 ‘게시물 읽기’ 서비스 액션에서 사용되며, Select_Article_Info_And_Content 트랜잭션에서 선택된 게시글에 대한 모든 답글 리스트를 얻는다. (ARTICLE_NO는 선택된 게시물과 같고, REPLY_NO_SEQ는 선택된 게시물의 REPLY_NO_SEQ로 시작되는 스트링이며, REPLY_DEPTH_NO는 선택된 게시물보다 크다.)
입력 조건
Select_Article_Info_And_Update_Read_Counter의 게시물 식별자
l BOARD_ID (Select_Article_Info_And_Update_Read_Counter의 출력값)
l ARTICLE_NO (Select_Article_Info_And_Update_Read_Counter의 출력값)
l REPLY_NO_SEQ (Select_Article_Info_And_Update_Read_Counter의 출력값)
l REPLY_DEPTH_NO (Select_Article_Info_And_Update_Read_Counter의 출력값)
l ARTICLE_CATEGORY (Select_Article_Info_And_Update_Read_Counter의 출력값)
l ARTICLE_STATUS=’Normal’
l IS_PRIVATE=’N’
출력 조건
대상 게시물에 대한 모든 답글 게시물의 정보를 등록 시간의 역순으로 정렬한 튜플들
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l ARTICLE_STATUS
l WRITER_ID
l WRITER_NICKNAME
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Select_Count_Board
‘Select_Count_Board’ 트랜잭션은 ‘리스트 보기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 특정 게시판의 게시물 수를 조회한다.
입력 조건
NBD_BOARD_INFO에 등록된 게시판 식별자
l BOARD_ID
출력 조건
게시판에 등록된 게시물 수
l COUNT()
데이터베이스 변경 조건
없음
n Select_List_Page_By_Posted_Time
‘Select_List_Page_By_Posted_Time’ 트랜잭션은 ‘리스트 보기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 페이지 당 리스트 개수만큼의 레코드들을 선택 선택하며 등록 시간 역순으로 정렬된 결과를 얻는다. (ARTICLE_NO는 답글이 아닌 게시물에 대해 등록 시간 순으로 부여된다.)
입력 조건
게시물 리스트를 얻을 게시판 식별자와 카테고리. 리스트 페이지의 게시물 시작 순서 번호와 페이지 당 게시물 리스트 개수
l BOARD_ID
l ARTICLE_CATEGORY (카테고리가 없는 경우는 입력에서 빠짐)
l ARTICLE_STATUS = ‘Normal’
l IS_PRIVATE = ‘N’
l 페이지 시작 게시물 순서 번호 (전체 게시물 개수 보다는 작은 값)
l 페이지 당 게시물 리스트 개수: 15 혹은 20 혹은 50 (3.3.2. Showing article list (pagination) – ordering by article timestamp 참조)
출력 조건
선택된 게시판의 게시물 리스트 중에 지정된 페이지에 포함되는 게시물들의 정보를 나타내는 튜플들. Showing article list (pagination) – ordering by article timestamp에 정의된 조건으로 정렬됨
l 게시물 번호 (페이지 시작 게시물 순서 번호에서 페이지 끝 게시물 순서 번호)
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Select_List_Page_By_Read_Counter_Descending
‘Select_List_Page_By_Read_Counter_Descending’ 트랜잭션은 ‘리스트 보기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 페이지 당 리스트 개수만큼의 레코드들을 선택하며 조회수 역순으로 정렬된 결과를 얻는다.
입력 조건
게시물 리스트를 얻을 게시판 식별자와 카테고리. 리스트 페이지의 게시물 시작 순서 번호와 페이지 당 게시물 리스트 개수.
l BOARD_ID
l ARTICLE_CATEGORY (카테고리가 없는 경우는 입력에서 빠짐)
l ARTICLE_STATUS = ‘Normal’
l IS_PRIVATE = ‘N’
l 페이지 시작 게시물 순서 번호 (전체 게시물 개수 보다는 작은 값)
l 페이지 당 게시물 리스트 개수: 15 혹은 20 혹은 50
출력 조건
선택된 게시판의 게시물 리스트 중에 지정된 페이지에 포함되는 게시물들의 정보를 나타내는 튜플들. READ_COUNTER 역순으로 정렬됨
l 게시물 번호 (페이지 시작 게시물 순서 번호에서 페이지 끝 게시물 순서 번호)
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Select_List_Page_By_Read_Counter_Ascending
‘Select_List_Page_By_Read_Counter_Ascending’ 트랜잭션은 ‘리스트 보기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 페이지 당 리스트 개수만큼의 레코드들을 선택하며 조회수 순으로 정렬된 결과를 얻는다.
입력 조건
게시물 리스트를 얻을 게시판 식별자와 카테고리. 리스트 페이지의 게시물 시작 순서 번호와 페이지 당 게시물 리스트 개수.
l BOARD_ID
l ARTICLE_CATEGORY (카테고리가 없는 경우는 입력에서 빠짐)
l ARTICLE_STATUS = ‘Normal’
l IS_PRIVATE = ‘N’
l 페이지 시작 게시물 순서 번호 (전체 게시물 개수 보다는 작은 값)
l 페이지 당 게시물 리스트 개수: 15 혹은 20 혹은 50
출력 조건
선택된 게시판의 게시물 리스트 중에 지정된 페이지에 포함되는 게시물들의 정보를 나타내는 튜플들. READ_COUNTER 순으로 정렬됨
l 게시물 번호 (페이지 시작 게시물 순서 번호에서 페이지 끝 게시물 순서 번호)
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Select_List_Page_By_Recommended_Counter_Descending
‘Select_List_Page_By_Recommended_Counter_Descending’ 트랜잭션은 ‘리스트 보기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 페이지 당 리스트 개수만큼의 레코드들을 선택하며 추천수 역순으로 정렬된 결과를 얻는다.
입력 조건
게시물 리스트를 얻을 게시판 식별자와 카테고리. 리스트 페이지의 게시물 시작 순서 번호와 페이지 당 게시물 리스트 개수.
l BOARD_ID
l ARTICLE_CATEGORY (카테고리가 없는 경우는 입력에서 빠짐)
l ARTICLE_STATUS = ‘Normal’
l IS_PRIVATE = ‘N’
l 페이지 시작 게시물 순서 번호 (전체 게시물 개수 보다는 작은 값)
l 페이지 당 게시물 리스트 개수: 15 혹은 20 혹은 50
출력 조건
선택된 게시판의 게시물 리스트 중에 지정된 페이지에 포함되는 게시물들의 정보를 나타내는 튜플들. RECOMMENDED_COUNTER 역순으로 정렬됨
l 게시물 번호 (페이지 시작 게시물 순서 번호에서 페이지 끝 게시물 순서 번호)
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Select_List_Page_By_Recommended_Counter_Ascending
‘Select_List_Page_By_Recommended_Counter_Ascending’ 트랜잭션은 ‘리스트 보기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 페이지 당 리스트 개수만큼의 레코드들을 선택하며 추천수 순으로 정렬된 결과를 얻는다.
입력 조건
게시물 리스트를 얻을 게시판 식별자와 카테고리. 리스트 페이지의 게시물 시작 순서 번호와 페이지 당 게시물 리스트 개수.
l BOARD_ID
l ARTICLE_CATEGORY (카테고리가 없는 경우는 입력에서 빠짐)
l ARTICLE_STATUS = ‘Normal’
l IS_PRIVATE = ‘N’
l 페이지 시작 게시물 순서 번호 (전체 게시물 개수 보다는 작은 값)
l 페이지 당 게시물 리스트 개수: 15 혹은 20 혹은 50
출력 조건
선택된 게시판의 게시물 리스트 중에 지정된 페이지에 포함되는 게시물들의 정보를 나타내는 튜플들. RECOMMENDED_COUNTER 순으로 정렬됨
l 게시물 번호 (페이지 시작 게시물 순서 번호에서 페이지 끝 게시물 순서 번호)
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Get_Article_ID
‘Get_Article_ID’ 트랜잭션은 ‘게시물 쓰기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO에 새로운 레코드를 추가하기 위해 필요한 ARTICLE_ID를 데이터베이스 시스템에서 얻는다.
입력 조건
유일한 ARTICLE_ID를 얻기 위해 데이터베이스 시스템에 필요한 정보
출력 조건
데이터베이스 내에서 유일한 ARTICLE_ID 값
l ARTICLE_ID
데이터베이스 변경 조건
유일한 ARTICLE_ID를 얻기 위해 데이터베이스 시스템에 필요한 내용
n Insert_Article_Info_And_Content
‘Insert_Article_Info_And_Content’ 트랜잭션은 ‘게시물 쓰기’ 서비스 액션에서 사용되며, Get_Article_ID 트랜잭션에서 얻은 ARTICLE_ID를 사용하여 NBD_ARTICLE_INFO 테이블과 NBD_CONTENT 테이블에 새로운 레코드를 추가한다.
입력 조건
Get_Article_ID의 ARTICLE_ID. NBD_ARTICLE_INFO 테이블과 NBD_CONTENT 테이블의 레코드 가운데 사용자와 서비스 시스템으로부터 제공되는 데이터 이외에는 데이터베이스 시스템에서 제공됨.
l BOARD_ID
l ARTICLE_ID
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l ARTICLE_STATUS = ‘Normal’
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l ARTICLE_PASSWORD
l HAS_ATTACHMENTS
l IS_PRIVATE
l IS_SEARCHABLE
l CONTENT
출력 조건
없음
데이터베이스 변경 조건
l NBD_ARTICLE_INFO 테이블 레코드
l NBD_CONTENT 테이블 레코드
n Insert_Reply_Article_Info_And_Content
‘Insert_Reply_Article_Info_And_Content’ 트랜잭션은 ‘게시물 쓰기’ 서비스 액션에서 사용되며, 지정된 게시물의 답글을 등록한다. Get_Article_ID 트랜잭션에서 얻은 ARTICLE_ID를 사용하여 NBD_ARTICLE_INFO 테이블과 NBD_CONTENT 테이블에 REPLY_NO_SEQ가 NULL이 아닌 새로운 레코드를 추가한다.
입력 조건
Get_Article_ID의 ARTICLE_ID. NBD_ARTICLE_INFO 테이블과 NBD_CONTENT 테이블의 레코드 가운데 사용자와 서비스 시스템으로부터 제공되는 데이터 이외에는 데이터베이스 시스템에서 제공됨.
l BOARD_ID
l ARTICLE_ID
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l ARTICLE_STATUS = ‘Normal’
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l ARTICLE_PASSWORD
l HAS_ATTACHMENTS
l IS_PRIVATE
l IS_SEARCHABLE
l CONTENT
출력 조건
없음
데이터베이스 변경 조건
l NBD_ARTICLE_INFO 테이블 레코드
l NBD_CONTENT 테이블 레코드
n Insert_Attachement
‘Insert_Attachement’ 트랜잭션은 ‘게시물 쓰기’ 서비스 액션에서 Insert_Article_Info_And_Content / Insert_Reply_Article_Info_And_Conetnt 트랜잭션에서 HAS_ATTACHEMENT가 ‘Y’인 경우에 사용된다. Get_Article_ID 트랜잭션에서 얻어서 Insert_Article_Info_And_Content / Insert_Reply_Article_Info_And_ Conetnt에서 사용한 ARTICLE_ID를 사용하여 NBD_ATTACHMENT 테이블에 새로운 레코드를 N개 추가한다.
입력 조건
Get_Article_ID의 ARTICLE_ID. NBD_ATTACHEMENT 테이블의 N개의 레코드. 사용자와 서비스 시스템으로부터 제공되는 데이터 이외에는 데이터베이스 시스템에서 제공됨
l BOARD_ID
l ARTICLE_ID
N개의 다음 값들
l ATTACHEMENT_NAME
l ATTACHEMENT_TYPE
l ATTACHEMENT
l ATTACHEMENT_SIZE
출력 조건
없음
데이터베이스 변경 조건
l NBD_ATTACHEMENT 테이블 레코드 N개
n Delete_Article_Info_And_Content
‘Delete_Article_Info_And_Content’ 트랜잭션은 ‘게시물 삭제’ 서비스 액션에서 사용된다. ‘게시물 삭제’ 서비스 액션이 ‘게시물 읽기’로 선택된 게시물을 삭제하는 작업이므로, Select_Article_Info_And_ Content 트랜잭션에서 선택된 BOARD_ID와 ARTICLE_ID에 해당하는 NBD_ARTICLE_INFO와 NBD_CONTENT 테이블의 레코드를 삭제한다.
입력 조건
l BOARD_ID
l ARTICLE_ID
출력 조건
없음
데이터베이스 변경 조건
l NBD_ARTICLE_INFO 테이블 레코드
l NBD_CONTENT 테이블 레코드
n Insert_Comment
‘Insert_Comment’ 트랜잭션은 ‘덧글 쓰기’ 서비스 액션에서 사용된다. ‘덧글 쓰기’ 서비스 액션이 ‘게시물 읽기’로 선택된 게시물에 덧글을 추가하는 것이므로, Select_Article_Info_And_Content 트랜잭션에서 선택된 BOARD_ID와 ARTICLE_ID를 사용하여 NBD_COMMENT 테이블에 새로운 레코드를 N개 추가한다.
입력 조건
사용자와 서비스 시스템으로부터 제공되는 데이터 이외에는 데이터베이스 시스템에서 제공됨
l BOARD_ID
l ARTICLE_ID
N개의 다음 값들
l COMMENT_TEXT
l COMMENT_STATUS = ‘Normal’
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
출력 조건
없음
데이터베이스 변경 조건
l NBD_COMMENT 테이블 레코드 N개
n Delete_Comment
‘Delete_Comment’ 트랜잭션은 ‘덧글 삭제’ 서비스 액션에서 사용된다. 입력된 WRITER_ID가 NBD_COMMENT 테이블 레코드의 WRITER_ID와 동일한 경우만 레코드가 삭제된다.
입력 조건
l BOARD_ID
l ARTICLE_ID
l WRITER_ID
출력 조건
없음
데이터베이스 변경 조건
l NBD_COMMENT 테이블 레코드
n Update_Recommended_Counter
‘Update_Recommended_Counter’ 트랜잭션은 ‘추천하기’ 서비스 액션에서 사용된다. 입력된 WRITER_ID가 NBD_ARTICLE_INFO 테이블 레코드의 WRITER_ID와 다른 경우만 RECOMMENDED_COUNTER가 증가한다.
입력 조건
l ARTICLE_ID
l WRITER_ID
출력 조건
없음
데이터베이스 변경 조건
선택된 게시물의 추천수 증가
l RECOMMENDED_COUNTER = RECOMMENDED_COUNTER + 1
n Update_Comment_Recommended_Counter
‘Update_Comment_Recommended_Counter’ 트랜잭션은 ‘추천하기’ 서비스 액션에서 사용된다. 입력된 WRITER_ID가 NBD_COMMENT 테이블 레코드의 WRITER_ID와 다른 경우만 RECOMMENDED_COUNTER가 증가한다.
입력 조건
l ARTICLE_ID
l WRITER_ID
출력 조건
없음
데이터베이스 변경 조건
선택된 덧글의 추천수 증가
l RECOMMENDED_COUNTER = RECOMMENDED_COUNTER + 1
n Update_Scrap_Counter
‘Update_Scrap_Counter’ 트랜잭션은 ‘스크랩 하기’ 서비스 액션에서 사용된다
입력 조건
l BOARD_ID
l ARTICLE_ID
출력 조건
없음
데이터베이스 변경 조건
선택된 게시물의 추천수 증가
l SCRAP_COUNTER = SCRAP_COUNTER + 1
n Select_Popular_Articles
‘Select_Popular_Article’ 트랜잭션은 ‘인기글 뽑기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 IS_POPULAR = ‘Y’인 게시물 정보들을 선택한다.
입력 조건
l BOARD_ID
l 선택할 인기글 수 (10 혹은 20)
출력 조건
Update_Popular_Articles에서 사용된 인기글 수개의 튜플들
l ARTICLE_ID
l ARTICLE_NO
l REPLY_NO_SEQ
l REPLY_DEPTH
l ARTICLE_TITLE
l PREVIEW_TEXT
l THUMBNAIL_IMAGE
l ARTICLE_TYPE
l ARTICLE_CATEGORY
l WRITER_ID
l WRITER_NICKNAME
l WRITER_INFO
l POSTED_TIME
l HAS_ATTACHMENTS
l IS_SCRAPED
l IS_POPULAR
l READ_COUNTER
l RECOMMENDED_COUNTER
l COMMENT_COUNTER
l SCRAP_COUNTER
데이터베이스 변경 조건
없음
n Update_Popular_Articles
‘Update_Popular_Articles’ 트랜잭션은 ‘인기글 뽑기’ 서비스 액션에서 사용된다. NBD_ARTICLE_INFO 테이블에서 IS_POPULAR = ‘Y’인 게시물 정보들을 ‘N’으로 바꾸고, 추천수가 10이 넘은 게시물들 중 추선수가 많은 순서로 지정된 개수의 게시물들의 IS_POPULAR를 ‘Y’로 바꾼다.
입력 조건
l BOARD_ID
l 선택할 인기글 수 (10 혹은 20)
출력 조건
없음
데이터베이스 변경 조건
l IS_POPULAR = ‘Y’였던 레코드들은 IS_POPULAR=’N’
l 레코드들은 IS_POPULAR = ‘Y’
3.2.3. Workload Type – Hotspot read
Hotspot read 워크로드는 지정된 개수의 특정 게시글들을 주어진 시간 동안 ‘게시글 읽기’와 ‘리스트 보기 – 등록 시간 순’ 서비스 액션이 일정 비율로 반복되는 테스트이다. 이 워크로드는 전체 트래픽의 대부분이 특정 인기 게시물에 집중되는 경우를 모델링 한 것이다.
n Transaction Mix
Mix 1
BOARD_ID와 ARTICLE_ID를 가지고 다음 트랜잭션들을 순서대로 실행한다.
l Select_Article_Info_And_Update_Read_Counter
l Select_Content
l Select_Attachement_List
l Select_Comment_List
l Select_Before_And_After_Article_Info
l Select_Reply_Articles_Info
l 대기 시간 5msec
Mix 2
BOARD_ID와 ARTICLE_ID를 가지고 다음 트랜잭션들을 순서대로 실행한다.
l Select_Article_Info_And_Update_Read_Counter
l Select_Content
l Select_Attachement_List
l Select_Comment_List
l Select_Before_And_After_Article_Info
l Select_Reply_Articles_Info
l Select_List_Page_By_Posted_Time (이전 트랜잭션에서 선택된 게시물이 포함되는 페이지를 출력)
l 대기 시간 5msec
Mix 3
BOARD_ID와 페이지 번호 1을 가지고 다음 트랜잭션을 실행한다.
l Select_List_Page_By_Posted_Time
l 대기 시간 50msec
n Workload Parameters
l 전체 수행 시간: 10분 / 30분 / 1시간
l 데이터베이스 스케일: 최소 1단계 구성 이상
l 트랜잭션 믹스별 동시 수행 개수
l 워크로드 전체에서 사용되는 핫스팟 게시물의 수 (Mix 1과 Mix 2에서 구별되는 게시물의 개수): 3개 / 6개 / 9개 / 12개
n Requirements
l 데이터베이스는 2.6.2 Scaling Requirements에서 정의한 최소 데이터베이스 구성 이상이어야 한다.
l 트랜잭션 믹스 1, 트랜잭션 믹스 2, 트랜잭션 믹스 3을 7:2:1의 비율로 정해진 시간 동안 반복 실행한다.
l 핫스팟 게시물들은 중간 규모 게시판들과 대규모 게시판들에서 균등하게 선택된다.
l 모든 핫스팟 게시물들은 서로 인접한 게시물이 아니며, 첫 번째와 마지막 게시물이 아니다. (인접글이 있다.)
l 모든 핫스팟 게시물은 3개 이상의 첨부와 50개 이상의 덧글, 그리고 1개 이상의 답글을 가지고 있어야 한다.
l 핫스팟 게시물들은 트랜잭션 믹스 1과 믹스 2에 순차적으로 배분된다. (예를 들어, 핫스팟이 6개이고 믹스 1이 7개 수행되고 믹스 2가 2개 수행된다면, 첫 번째 믹스 1이 첫 번째 게시물, 두 번째 믹스 1이 두 번째 게시물, … 첫 번째 믹스 2가 두 번째 게시물, 두 번째 믹스 2가 세 번째 게시물을 조회하게 된다.)
l 트랜잭션 믹스 3은 핫스팟 게시물이 속한 게시판 중에 하나를 선택하여 수행한다. 페이지 당 게시물 리스트 개수는 20으로 한다.
3.2.4. Database Scaling and Population
본 절에서는 NBD Benchmark에서 사용되는 데이터베이스의 구성 단위와 크기를 증가시키는 방법에 대해 정의한다.
n Board Data Set
NBD Benchmark 데이터베이스에 저장되는 게시판 데이터에는 다음과 같은 세가지 유형이 있다.
Small-scaled Board Data Set
l 소규모의 게시판으로 게시물의 수가 1,000개 ± 10%인 게시판 데이터 집합이다. 일반적으로 ‘공지사항’ 유형의 게시판을 의미한다.
l 게시판에 카테고리가 지정되지 않는다.
l 게시물의 유형은 Text로 한정되며 90% 게시물의 크기가 1K를 넘지 않는다.
l 모든 게시물의 작성자는 1명이다.
l 첨부를 가지는 게시물은 없다.
l 게시판에는 답글 게시물은 없다.
Medium-scaled Board Data Set
l 중간 규모의 게시판으로 게시물의 수가 100,000개 ± 10%인 게시판 데이터 집합이다.
l 게시판에 3개 이상 10개 미만의 카테고리가 지정된다.
l 게시물의 10%는 카테고리가 지정되지 않는다.
l 게시물의 유형은 제한이 없으며 게시물의 크기는 50%가 1K 이하, 30%가 1K~10K, 나머지 20%가 10K~64K를 차지한다.
l 1명의 작성자가 평균 10개의 글을 작성한다.
l 게시물의 50%가 첨부를 평균 5개를 가진다.
l 게시물의 10%가 덧글을 평균 100개, 50%가 평균 10개, 나머지 40%는 덧글이 없다.
l 게시물의 10%가 답글이다.
Large-scaled Board Data Set
l 대규모의 게시판으로 게시물의 수가 10,000,000개 ± 10%인 게시판 데이터 집합이다.
l 다른 조건은 중간 규모 게시판과 동일하다.
n Scaling Requirements
NBD Benchmark 데이터베이스의 데이터는 다음에 정의된 방법에 따라 생성되며 증가되어야 한다. 게시판 데이터 집합은 2.6.1 Board Data Set에 정의된 바를 따른다.
l 최소 (1단계) 데이터베이스 구성: 소규모 게시판 1개 + 중간 규모 게시판 1개
l 5단계까지의 데이터베이스 증가 단위: 소규모 게시판 1개 + 중간 규모 게시판 5개
l 이후 데이터베이스 증가 단위: 소규모 게시판 1개 + 중간 규모 게시판 5개 + 대규모 게시판 2개
l 결과 보고서에는 테스트에 사용된 데이터베이스의 구성을 명시해야 한다.
NBD Benchmark는 게시판 별로 워크로드의 한계가 정해지므로 테스트 데이터베이스 게시판의 크기와 수가 증가함에 따라 측정 대상 데이터베이스 시스템의 처리량(throughput)이 비례적으로 증가하게 된다. (3.10 Workload Scaling 참조)
n Database Population
NBD Benchmark에서는 테스트 중에 게시판 증가나 감소는 허용되지 않는다. 반면에 테스트 수행 중에 데이터베이스의 게시판 별 데이터는 증가 및 감소될 수 있다. 각 테스트 실행 준비로 데이터베이스의 상태를 초기 상태(initial population)로 재구성하는 것이 허용되지만 반드시 그럴 필요는 없다. 워크로드 정의만 위배되지 않는다면 이전 테스트에서 변화된 데이터베이스 상태에서 다음 테스트를 수행해도 상관없다. 데이터 증가 및 감소에는 다음 사항이 지켜져야 한다.
l 소규모 게시판은 테스트 중 데이터의 변화가 없다.
l 중간 규모 게시판은 테스트 중 게시물 수가 최대 10% 증가할 수 있으며, 최대 1% 감소할 수 있다.
l 대규모 게시판은 테스트 중 게시물 수가 최대 20% 증가할 수 있으며, 최대 1% 감소할 수 있다.
l 데이터베이스 전체는 최대 20% 증가할 수 있으며, 최대 1% 감소할 수 있다.
n Total number of service requests processed
‘처리된 전체 서비스 요청 수’는 일정 기간 동안 웹 어플리케이션 서버에서 정상 처리된 웹 브라우저(사용자)의 서비스 액션 요청 수를 의미한다.
벤치마크 결과로는 테스트 드라이버가, 수행하는 워크로드에서 steady state period 동안 성공한 서비스 요청의 수를 측정한다.
n Total number of service requests failed
‘실패한 서비스 요청 수’는 일정 기간 동안 웹 어플리케이션 서버에서 실패 처리된 웹 브라우저(사용자)의 서비스 액션 요청 수를 의미한다.
벤치마크 결과로는 테스트 드라이버가, 수행하는 워크로드에서 steady state period 동안 실패한 서비스 요청의 수를 측정한다. 따라서, 테스트 드라이버가 데이터베이스 시스템에 요청한 전체 트랜잭션의 수는 ‘처리된 전체 서비스 요청 수’와 ‘실패한 서비스 요청 수’의 합과 같다.
n Service throughput – PV (Page View)
인터넷 게시판 서비스에서 각 서비스 요청의 결과로는 웹 페이지가 출력된다. ‘서비스 처리량 – 페이지 뷰’는 일정 기간 동안 웹 브라우저(사용자)의 요청에 따라 웹 어플리케이션을 통해 제공된 웹 페이지의 수와 같다.
벤치마크 결과로는 테스트 드라이버가, 수행하는 워크로드에서 steady state period 동안 초당 성공 처리된 서비스 요청의 수를 측정한다.
n TPS (Transaction Per Second)
‘초당 트랜잭션 처리 수’는 데이터베이스 시스템이 1초 동안 오류 없이 처리한 트랜잭션의 수이다. 트랜잭션의 종류와는 상관없다.
벤치마크 결과로는 테스트 드라이버가, 수행하는 워크로드에서 Transaction Definitions에 정의된 트랜잭션이 초당 처리되는 수를 측정한다.
n QPS (Query Per Second)
‘초당 쿼리 처리 수’는 데이터베이스 시스템이 1초 동안 expected response time을 만족하며 오류 없이 처리한 SQL 쿼리의 수이다. SQL 문의 종류와는 상관없다. (일반적으로 하나의 트랜잭션은 하나 혹은 그 이상의 쿼리로 이루어져 있으므로 QPS는 TPS 보다 상회하는 결과값이 나온다.)
벤치마크 결과로는 테스트 드라이버가, 수행하는 워크로드에서 초당 처리된 SQL문의 수를 측정한다.
출처 : 큐브리드
'DataBase > MySQL' 카테고리의 다른 글
mysql 버젼 확인 (0) | 2010.04.24 |
---|---|
innodb 와 myisam 의 차이점과 성능비교 (0) | 2010.04.24 |
블로그 테이블 구조 (0) | 2010.04.24 |
[MYSQL] 우선순위, LOW_PRIORITY, DELAYED, ... (0) | 2010.04.24 |
[본문스크랩] Optimize Table (0) | 2010.04.24 |