겨울팥죽 여름빙수
Mysql, Select결과를 Update 문에 반영하기

게임 운영을 하다보면, 질의 결과를 Update해야 하는 경우가 있다. 이때 문제는 Mysql과 다른 db 프레임워크의 질의 방법이 다르다. 1. 일반적인 Update문 일반적인 Update문은 아래와 같은 방식을 아래와 같은 방식이다. UPDATE [테이블명] SET [필드명 = 새로운 값] WHERE [조건문] 2. Select 결과와 Join 앞서 말한 것 처럼, Mysql과 다른 DB프레임워크의 방식이 다르다. Mssql 버전 UPDATE [테이블A] SET [테이블A].필드 = [테이블B].필드 FROM [테이블A],[테이블B] WHERE [테이블A].id = [테이블B].id Mysql 버전 UPDATE [테이블A],[Select 질의] B SET [테이블A].필드 = B.필드 WHERE [테..

Mysql, Percentage 질의 구현하기

게임 운영 시, 매 시즌 상위 랭커에서 보상을 지급 하는 경우가 있다. 이때, mysql 질의를 통해 상위 % 랭커를 검색해야 한다. mysql 8.0부터는 [RANK / DENSE_RANK / PERCENT_RANK / ROW_NUMBER] 함수를 제공하지만, 그 이전 버전에서는 사용 할 수 없다. 우선 내가 쓰는 UserPoint의 테이블 구조이다. id season point play_count 1 2 1000 10 2 2 1001 10 여기서 point 내림차순으로 %를 구한다. 아래 코드는 mysql 8.0 이전 버전에서 상위 % 랭커를 찾을 때 쓰는 질의 예제 이다. INSERT INTO UserMail (user_id, mail_type, reward_type, data_id, count, ..

게임 서버 DB설계 시, Tips

1. 로직 작업과 DB작업을 분리 시키자 게임의 로직과 DB 작업 부분을 별도의 모듈로 분리 시키는 것이, 추후 유지보수 할 때 훠얼씬 편하다. DB작업은 어쨌든 파일 처리에 해당하기 때문에, 느린 작업에 속한다. 클라이언트와의 빠른 응답을 위해선, 요청 후 응답을 받는 구조로 설계하는 것이 좋다. 최근에는 [로비], [인게임], [db] 별로 서버를 따로 두는 경우가 많다. 2. DB간 join은 피하자 db간 join은(테이블 조인은 ok) 성능이 좋지 않다. 차라리 코드 상에서 질의를 여러 번 하는 것이 좋다. DB간 연관관계를 적게 적용할 수록, 운영 시 편하다. 3. 테이블 독립성 한 테이블에 많은 데이터를 무리하게 담는 것보다, 테이블을 쪼개는 것이 좋다. 추후 운영 시, 수정하기 편하다. 4..