DB
1 | Stateless 서버에서는 Statefull 서버와 달리 DB를 통해 데이터 저장하게 되고 , DB가 최신데이터가 된다. |
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 | DB에서의 처리 단위. 저장하는 과정에서 순차적으로 저장되어야 되는 상황에서 하나라도 중단되어 버린다면 전부 롤백한다. |
- 중간에 물리적인 중단이 없다면, 굳이 필요가 없어져버린다.
- 트랜젝션은 오버헤드가 존재한다.
- 이게 말이 많은데, 미리 검증되어 있다면 트랜젝션이 필요 없다는 주장도 존재한다.
1 | set autocommit = 0; |
트랜젝션 동기화
1 | 트랜젝션도 자체적으로 동기화가 필요하다. |
Lock Tables Syntax
1
2
3
4
5
6
7lock tables `테이블명` READ; /* 또는 Write */
/*
테이블 전체를 락 걸어버린다. READ로 락을 걸었다면 외부세션에서는 Select로 조회가 가능하다.
데이터가 변경만 안되게 동기화를 맞춰주면 된다.
WRITE 로 락을 걸었다면 외부에서 아예접근이 불가능하다.
*/
Unlock TablesSelectForUpdate Syntax
1 | -- 가능한 이걸 권장한다. |
Table Tuning
1 | 애매하거나 속도 프로파일링을 원한다면 explain을 적어준다. |
Scale Out
- 애초에 DB는 샤딩이 가능하게 만들어야 된다.(해쉬같은 느낌으로 저장한다.)
- 게임 DB를 동일한 테이블들로 만든뒤 이걸 여러개로 나눈다.
- 게임에는 DB분산은 그렇게 좋지 않다.
Sharding
1 | 샤딩은 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법을 말한다. |
저장 프로시저(Stored Procedure)
1 | 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. |
장점
- 하나의 요청으로 여러 SQL 문을 실행할수 있다.
- DB 트리거와 결합하여 복잡한 규칙에 의한 데이터의 참조무결성 유지가 가능하게 된다.
단점
- 호환성이 낮아서 재사용성이 나쁘다.