게임의 정보는 db에 저장해야지, 멀티스레딩에서도 좋고, 안전하며, rollback 같은 기능도 존재한다
정보를 저장할 때 한 플레이어의 기능을 모두 db에 json방식으로 저장하면 저장할 때는 쉽지만, 데이터를 읽어올 때 파싱하기가 힘들다 그래서 보통 저장할 때 각 기능별로 저장을 많이하고, 서로의 테이블을 참고하기 위해서 외래키(하나의 필드가 다른 테이블의 필드를 참조하는 것)를 두어서 사용한다, 외래키 + (개체 + 관계 다이어그램인 E R 다이어 그램) 을 사용하면 좋다
- UML을 사용하면 테이블끼리의 관계를 파악할 수 있다 A테이블 B테이블이 존재할 때 A테이블쪽에 마름모가 존재한다면 소유자쪽이라는 것이다. 그리고 두 테이블의 레코드 간 개수 관계를 표현할 때 카디널리티나 멀티플리시티를 사용한다. 0,,* 은 0개 혹은 그이상이라는 의미이다.
- 게임서버에서 DB로 질의를 할 때 SELECT문의 100번한다면 굉장히 부하가 심할 것이다. 그래서 나온 것이 저장 프로시저이다. 저장 프로시저는 사용되기전에 실행계획 준비 작업이 완료된 상태로 보관됩니다.
저장 프로시저 예
create procedure LoadCharacterAndItem
@ID nvarchar(50) -- 저장 프로시저의 입력 매개변수..
as
begin
select * from Character whre ID = ...
end
- 게임서버에서 사용할 때는 EXEC LoadCharacterAndItem @ID='XXX'
관계형 데이터베이스에서 확장성
DB에서 10개가 있을 때 하나의 DB에만 엑세스 되고, 해당 DB에 1억개의 record가 있다면 이럴 때는 해당 테이블을 수평확산을 해야한다, 그렇게 되면 수평으로 확산된 데이터베이스에서는 각 컴퓨터가 큰 테이블 1개를 조각조각 가졌는데 이를 샤드(조각)이라고한다.
관계형 데이터베이스 고갸용성
고가용성이란 멀까 ? 일단 그것은 서버나 네트워크가 상당이 오랫동안 지속적으로 정상 운영가능하다는 것이다.
출처 : 게임서버프로그래밍 교과서.
'데이터베이스' 카테고리의 다른 글
VIEW (0) | 2022.07.14 |
---|---|
ADO.NET (0) | 2022.07.14 |
데이터베이스 격리수준 (0) | 2022.06.22 |
데이터베이스의 deadlock.. 데드락. (0) | 2022.06.22 |
집계 함수(SUM, MAX, MIN, AVG, group by, having) (0) | 2021.12.30 |