Skip to content
dev-marco-song
Go back

RDBMS 검토 과정

Edit page

RDBMS 선정 과정

1. 내가 사용하려는 DB의 구조를 파악하자 - ERD 다이어그램 작성

RDBMS를 선정하기에 앞서, 어떤 데이터를 어떤 구조로 저장할지 생각해야 한다. 현업에서는 Entity-Relation Diagram(ERD)라는 기법으로 DB의 큰그림을 그리고 있었다.

위키 사전 https://ko.wikipedia.org/wiki/%EA%B0%9C%EC%B2%B4-%EA%B4%80%EA%B3%84_%EB%AA%A8%EB%8D%B8 데브시스터즈의 쿠키런 설계 프로젝트 쉐어 https://www.slideshare.net/_ce/db-42498020

ERD를 그리는 다양한 제품이 있었는데,  무료로 온라인에서 간단하게 ERD를 그려볼 수 있는 툴이 있어 사용해보았다. http://aquerytool.com/ 이곳에서 사용할 수 있다.

dasasd.PNG

다이어그램을 그린 결과, 두 가지 설계 이슈를 찾아낼 수 있었다.

성능 이슈

- Foreign key 사용이 많음

테이블에 여러 컬럼들이 담길 때, 두 가지 선택을 할 수 있다.

하나는 테이블의 컬럼들을 따로 테이블로 쪼개는 정규화, 다른 하나는 테이블을 통으로 사용하는 비정규화다.

테이블을 나눌 경우 테이블을 통으로 사용할 때 사용하지 않는 컬럼까지  불러오게 되는 오버헤드를 방지할 수 있지만, JOIN 문을 자주 사용하기 때문에 CPU에 오버헤드가 생길 수 있다. (어떤 하드웨어에 부하가 생기는지 탐구할 것)

반면에 테이블을 통으로 사용한다면 JOIN 문을 사용하지 않고 단순한 쿼리로 데이터를 불러올 수 있겠으나, 쓸데없는 컬럼을 불러오는 것으로 인한 오버헤드가 생긴다. 서버의 I/O가 느리다면 문제가 생길 수 있다.

-> DB 구조에 따른 성능 비교도 벤치마크해볼 가치가 있구나!

- Update 위주의 쿼리 사용

- Row를 한 개씩 자주 호출(point query)

웹 사이트나 앱에서는 게시판처럼 여러 게시물을 SELECT로 가져오곤 한다.

그러나 게임에서는 아이템/골드의 획득 및 거래/레벨업 등  SELECT 보다는 UPDATE를 쓸 일이 많다.

또한 캐릭터 하나 하나에 대한 정보를 수정하게 되므로 한 개의 Row를 자주 호출하게 된다. 이를 포인트 쿼리라고 한다.

안정성 이슈

2. RDBMS 선정 기준

위의 두 이슈로부터 선정 기준을 생각할 수 있었다.

  1. QUERY 성능 : JOIN+SELECT/UPDATE  2. 대량의 포인트 쿼리에 대한 성능

  2. 트랜잭션 정확도를 보장하는가 4. 백업 및 복구 기능을 지원하는가?

  3. 무자본 개발자가 앱 출시를 위해 사용할 수 있는가?

3~5번은 제품 설명에서 파악이 가능하니까 이것을 먼저 살펴보고, 1차 선정 후에 1, 2번을 벤치마크로 비교한다.

3. 어떤 RDBMS 제품들이 있는가?

db 랭킹 사이트 - 인기순위 보여줌. 상업 / 오픈소스 별 랭킹도 확인 가능. https://db-engines.com/en/ranking

블로그 레벨 분석 참고자료 https://m.blog.naver.com/PostView.nhn?blogId=babo9880&logNo=110153517784&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

mySQL

mariaDB

postgreSQL

Ms SQL server

MS Access SQLite

IBM DB2

Oracle DB

Sybase

Teradata?

어떤 제품을 어떻게 벤치마크할지 신중히 검토할 것.

위키에만 수십 개의 RDBMS 제품 존재 https://en.wikipedia.org/wiki/List_of_relational_database_management_systems#Current

RDBMS와 noSQL http://www.ciokorea.com/tags/1714/RDBMS/38041


Edit page
Share this post on:

Previous Post
RDBMS -트랜잭션 검토
Next Post
RDBMS 개념 정리