1. 로직 작업과 DB작업을 분리 시키자
게임의 로직과 DB 작업 부분을 별도의 모듈로 분리 시키는 것이, 추후 유지보수 할 때 훠얼씬 편하다. DB작업은 어쨌든 파일 처리에 해당하기 때문에, 느린 작업에 속한다. 클라이언트와의 빠른 응답을 위해선, 요청 후 응답을 받는 구조로 설계하는 것이 좋다. 최근에는 [로비], [인게임], [db] 별로 서버를 따로 두는 경우가 많다.
2. DB간 join은 피하자
db간 join은(테이블 조인은 ok) 성능이 좋지 않다. 차라리 코드 상에서 질의를 여러 번 하는 것이 좋다. DB간 연관관계를 적게 적용할 수록, 운영 시 편하다.
3. 테이블 독립성
한 테이블에 많은 데이터를 무리하게 담는 것보다, 테이블을 쪼개는 것이 좋다. 추후 운영 시, 수정하기 편하다.
4. 동시에 많은 update, insert를 해야할 경우, 쪼개서 하자
예를 들어, 오후 6시에 접속한 유저에게 선물상자를 모든 유저에게 준다고 할 때, 한번에 모든 유저에게 insert나 update를 하는 것이 아닌, 1초마다 100개 혹은 500개 단위로 끊어서 순차적으로 하는 것이 좋다.
5. 게임 로그 관리
로그를 파일로 관리하는 경우, 속도가 빠르다는 점이다. 반대로 DB에 저장 할 경우, 운영 시 편리함이 있다. 우선 로그를 파일에 저장하고, 5분 한번 db로 옮기자.
6. 실시간 랭킹
실시간 랭킹을 해야하는 경우에는 Redis와 같은 메모리 DB를 쓰도록 하자.
7. 유니코드 사용
한글이나 영어가 아닌 다른 언어 데이터를 저장하는 경우 유니코드를 사용하도록 하자.
'게임을 만들자 > 게임 서버(C#)' 카테고리의 다른 글
Mysql, Select결과를 Update 문에 반영하기 (1) | 2020.02.05 |
---|---|
Mysql, Percentage 질의 구현하기 (0) | 2020.02.01 |
c# 싱글톤 제네릭 클래스 (0) | 2020.01.07 |
파이썬으로 구글 스프레드시트 다운받고, Json으로 변경하기 (0) | 2019.12.28 |
c# 실시간 게임 서버 만들기 3 - 서버 (1) | 2019.12.22 |