특정 게임 정보 내용 초기화가 필요한 경우

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 베이스/채팅/데이터베이스/월드 SDK 버전 : 5.18.6
  • 프로젝트명 : OrcWar_Dev
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

게임에서 특정 동작을 하면
게임 내 정보 일부가 초기화되고 보상을 받는 시스템을 제작하려 하는데
서버 호출 최적화에대한 조언을 구하고 싶습니다.

일단 뒤끝 펑션에서 모두 처리하고 있는데
USER_SOLDIER 게임정보 초기화에서 문제를 겪고 있습니다.
최대 50마리 +@의 유닛을 초기화를 해야하는데
어떻게 처리해야 될지 고민하고 있습니다.

현재는 DeleteV2를 유닛 수 만큼 호출하고 있는데 이건 아닌거 같고
TransactionValue도 10개 이상은 동시 호출이 불가능하다고 들었습니다.

혹시 비슷한 문제를 겪었던 분의 해결 사례가 없을까요?

안녕하세요 개발자님,
남겨주신 정보만으로는 안내에 어려움이 있습니다.
테이블 내 여러 row를 한번에 처리하셔야하는 상황일까요?
보다 구체적인 기획 정보 등을 남겨주시면 확인하여 안내드릴 수 있도록 하겠습니다.

USER_SOLDIER 게임 정보에 최대 50개의 row가 존재할 수 있고
유저가 특정 기능을 이용하면
게임내 일부 정보들이 맨 처음로 초기화가 되는데
그중 USER_SOLDIER 정보만 한 유저가 여러 개의 row를 가질 수 있는 구조라
이를 초기화 하는 최적의 방법에 대해서 고민하고 있는 중입니다.

신규 출시된 데이터베이스 기능을 활용하는 경우 여러 row를 한번에 처리하는 것이 가능하나,
말씀해주신 것과 같이 게임정보 내 다수의 row에 대해서는 트랜잭션을 통한 처리 외에는 일괄적인 처리가 불가하며, 트랜잭션 역시 1회 최대 10건의 제한이 있습니다.

게임정보 테이블 내 데이터에 대해서는 한 유저가 과도하게 많은 row를 가지는 것을 권장하지 않고 있으며,
50개 이상의 유닛 정보를 관리하시는 경우 정보에 따라 10개 이하의 row에 JSON 형태로 통합 저장하는 구조(한 컬럼 또는 병사별 개별 컬럼)를 검토해 보시는 것을 권장드립니다. (1개의 row로 관리할 수도 있겠으나 이경우는 row 크기가 커짐에 따라 db요금이 부담될 수 있기에 적절히 분배하여 구성하시는 것을 추천드립니다.)

USER_SOLDIER 내부 데이터를 재구성 했는데 한 번 확인해봐주실 수 있을까요?
서버 게임 정보 내부 구조를 여기에 올리기에는 좀 그래서…

확인이 가능하시다면
이런 정보가 50개 있을 때 row 1개로 구성해도 큰 무리가 없을지 봐주시면 감사하겠습니다.

좋아요 1

확인 결과, 현재 구조로 50개의 데이터가 저장될 경우 전체 용량이 약 4KB를 초과하는 것으로 확인됩니다.
해당 구성으로도 트랜잭션 없이 처리가 가능하여 DB 요금 측면에서 큰 부담은 발생하지 않으나, 데이터 구조를 간소화하면 사용량을 더욱 줄일 수 있습니다.

예를 들어, 현재 구조가 아래와 같을 경우

{
    "1": {
        "A": 100,
        "B": 1,
        "C": "1",
        "D": 0,
        "E": 1
    },
    "2": {
        "A": 400,
        "B": 2,
        "C": "6",
        "D": 0,
        "E": 2
    }
}

이를 다음과 같이 문자열 형태로 압축하여 저장할 수 있습니다.

{
    "1": "100|1|1|0|1",
    "2": "400|2|6|0|2"
}

위와 같이 데이터를 단일 문자열로 구성하면 필드명 및 JSON 구조에 따른 오버헤드를 줄일 수 있어, 전체 저장 용량 감소에 도움이 됩니다.
비용 최적화까지 고려하신다면 위와 같은 방식도 함께 검토해 보시기 바랍니다.

좋아요 1