DB

1
2
3
4
5
6
7
Stateless 서버에서는 Statefull 서버와 달리 DB를 통해 데이터 저장하게 되고 , DB가 최신데이터가 된다.

StateFull 서버는 Stateless 서버와 달리 메모리에 상주하고 잇는 데이터가 최신데이터이다 DB는 사실상 백업용이다.

어떠한 행위일때마다 DB에 저장시키는 방식을 사용하자.

요즘은 PCI Express X16 에다가 SSD 박아넣으니 DB를 Scale Up할 필요가 없다.

Scale Up, Scale Off

Scale Up Scale Out Scale Out & Up
개요 기존 스토리지에 필요한 만큼의 용량 증가 용량과 성능 요구조건에 맞추기 위해 Node 단위로 증가하고 하나의 시스템처럼 운영 Sclae Up 아키텍쳐와 Scale Out 아키텍쳐를 합함
비용 컨트롤러나 네트워크 인프라 비용은 별도로 발생하지 않고 디스크만 추가됨.(상대적으로 비용이 적게 든다.) 추가된 노드들이 하나의 시스템으로 운영되기 위한 NW 장비 필요. 컨트롤러도 추가
용량 하나의 스토리지 컨트롤러에 붙일수 있는 Device 가 한정적, 용량확장에 제약 Scale Up 형태의 스토리지보다는 용량 확장성이 크지만 무한대로 확장하지는 않음.
성능 Multple Storage Controller의 IOPS, 대역폭 등이 합친 성능이 나온다.
복잡성 심플한 구성 상대적으로 복잡
가용성 노드가 추가될수록 가용성 높아짐.

SQL

1
Struct Query Language 구조적 질의 언어

DB 설계

1
DB 테이블 설계는 칼럼을 늘려서 옆으로 늘리는것 보다. 다른 테이블을 통해 위로 세우는게 좋다. (성능 저하)
  • 위로 세운다는 표현은 데이터 베이스 정규화작업(칼럼을 쪼갠다.)

트랜젝션

1
2
3
4
DB에서의 처리 단위. 저장하는 과정에서 순차적으로 저장되어야 되는 상황에서 하나라도 중단되어 버린다면 전부 롤백한다.

커밋을 하지 않으면 작업이 완료되지 않는다. 롤백됨.
게임서버에서 주로 쓰는건 거래, 퀘스트 등이 있다.
  • 중간에 물리적인 중단이 없다면, 굳이 필요가 없어져버린다.
  • 트랜젝션은 오버헤드가 존재한다.
  • 이게 말이 많은데, 미리 검증되어 있다면 트랜젝션이 필요 없다는 주장도 존재한다.
1
2
3
4
5
6
set autocommit = 0;
begin;
/*
처리할 쿼리문들
*/
end;

트랜젝션 동기화

1
2
3
트랜젝션도 자체적으로 동기화가 필요하다.
같은 데이터의 Row 단위로 서로 다른 세션에서 트랜젝션으로 접근해도 락이 된다.
SharedSRWLock 과 비슷하게 락이 걸린다. 즉 게임에서는 사용못함.
  1. Lock Tables Syntax

    1
    2
    3
    4
    5
    6
    7
    lock tables `테이블명` READ; /* 또는 Write */
    /*
    테이블 전체를 락 걸어버린다. READ로 락을 걸었다면 외부세션에서는 Select로 조회가 가능하다.
    데이터가 변경만 안되게 동기화를 맞춰주면 된다.
    WRITE 로 락을 걸었다면 외부에서 아예접근이 불가능하다.
    */
    Unlock Tables
  2. SelectForUpdate Syntax

1
2
-- 가능한 이걸 권장한다.
select * from 테이블 where 조건 for update; -- 특정 행에서만 락을 건다. 해당 칼럼에 대해 Interlocked개념과 비슷하게 동작한다. 커밋이나 롤백하면 풀린다.

Table Tuning

1
2
3
4
5
애매하거나 속도 프로파일링을 원한다면 explain을 적어준다.
type이 const라면 인덱스 개념으로 찾은거라 빠르다.
ALL이라면 지금 행을 전부 검색해서 찾은거라 매우 느리다. 인덱스를 쓰자. (이 형태는 ref로 나온다.)

하지만 인덱스일경우 삽입 삭제가 빈번하면 느려진다는 단점이 있다.

Scale Out

  • 애초에 DB는 샤딩이 가능하게 만들어야 된다.(해쉬같은 느낌으로 저장한다.)
  • 게임 DB를 동일한 테이블들로 만든뒤 이걸 여러개로 나눈다.
  • 게임에는 DB분산은 그렇게 좋지 않다.

Sharding

1
샤딩은 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법을 말한다.

샤딩 NHN 문서

저장 프로시저(Stored Procedure)

1
일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다.

장점

  1. 하나의 요청으로 여러 SQL 문을 실행할수 있다.
  2. DB 트리거와 결합하여 복잡한 규칙에 의한 데이터의 참조무결성 유지가 가능하게 된다.

단점

  1. 호환성이 낮아서 재사용성이 나쁘다.