문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 : 5.4.3
- 프로젝트명 : 푸른달 : 새벽의 여정
안녕하세요. 현재 마케팅을 앞두고 있는데 유저 데이터 관련 이슈가 꾸준히 발생해
제 저장 방식에 문제가 있는 건지 알고 싶어 문의드립니다.
현재 푸른달 저장방식은 다음과 같습니다.
- 캐릭터 생성 시 insert 형태로 테이블 저장 <동기 방식>
- 100초 주기로 자동 저장 (모든 테이블 Update) <sendqueue 방식>
- 특정 행동 이후 (강화, 합성, 분해, 뽑기) 즉시 Update로 테이블 저장 <sendqueue 방식>
- 게임 종료시 insert 형태로 테이블 저장 <동기 방식>
- 뒤끝 서버와 연결 실패 시 bool을 활용하여 모든 저장 중단
불러오기는 다음과 같이 활용하고 있습니다.
(게임 접속 시 최초 1회 로드)
(코드 예시)
#1.
public void Load_PlayerInfo_Indate()
{
Server_Failed = true; // 뒤끝 서버 통신 실패 체크
BackendReturnObject bro = Backend.GameData.GetMyData("PlayerInfo", new Where(), 1);
if (bro.IsSuccess() == false)
{
return;
}
if (bro.GetReturnValuetoJSON()["rows"].Count <= 0)
{
Retry += 1;
if (Retry == 2)
{
game_exit();
}
else if (Retry <= 1)
{
Load_PlayerInfo_Indate(); // 재실행
}
return;
}
if (bro.IsSuccess() == true)
{
Retry = 0;
GetPlayerInfo(bro.GetReturnValuetoJSON());
}
}
#2.
void GetPlayerInfo(JsonData returnData)
{
// ReturnValue가 존재하고, 데이터가 있는지 확인
if (returnData != null)
{
// rows 로 전달받은 경우 (전달 받을 데이터 여러개)
if (returnData.Keys.Contains("rows"))
{
JsonData rows = returnData["rows"];
for (int i = 0; i < rows.Count; i++)
{
PlayerInfoGetData(rows[i]);
}
}
else if (returnData.Keys.Contains("row"))
{
JsonData row = returnData["row"];
string owner_inDate = row[0]["owner_inDate"]["S"].ToString();
PlayerInfoGetData(owner_inDate);
}
}
else
{
Debug.Log("데이터가 없습니다.");
}
}
#3.
void PlayerInfoGetData(JsonData data)
{
(중략...)
var load128 = data["C_key"][0]; // 1 ~ 128개의 데이터
C_key = int.Parse(load128.ToString()); // 1 ~ 128개의 데이터 가져옴
Server_Failed = false; // 뒤끝 서버 통신 성공
Load_End += 1;
}
이렇게 사용중인 와중에 몇몇 유저 분이 데이터 백섭 (1~2시간 심하면 12시간까지) 이 빈번하게 발생하고 있습니다. 아무래도 Insert방식이 아닌 업데이트로 저장을 처리하다 보니 복구도 힘든 상황인데요. 확인해주실수있을까요?