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