트랜잭션 컬럼 수 제한

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

  • 뒤끝 SDK 버전 : 5.6.0
  • 프로젝트명 : SunlessCity
  • 스테이터스 코드 : 400
  • 에러 코드 : ValidationException
  • 에러 메시지 : Invalid UpdateExpression: Expression size has exceeded the maximum allowed size;

건물을 설치할 지역 테이블 하나와, 각 건물에 대한 테이블 하나에 있는 상황에서
두 테이블을 트랜잭션으로 한 번에 수정하려고 했습니다.

건물 테이블에 200개 이하 컬럼이 있는 것은 확인하였고
지역 테이블에 40개 이하 컬럼이 있는 것을 확인했습니다.

이 두 테이블을 트랜잭션으로 수정하려고 하는데
한 종류의 건물이 10개 정도의 컬럼 차지하고 있어서 param에 10개 정도를 Add 합니다.

지역 테이블에서 한 지역 (4개 컬럼) 수정 + 다섯 종류 정도의 건물 수정은 오류 없이 되었는데
8 종류의 건물 정도를 수정하려하면 오류가 발생합니다.

트랜잭션에 TransactionValue.SetUpdateV2를 2번 사용하여
지역에 대한 내용과 변동이 있는 건물에 대한 정보를 수정했는데요.
4MB에 도달할 정도는 아닌 것 같고 컬럼 수 제한을 초과한 것 같은데

트랜잭션으로 업로드하려는 컬럼 수나 데이터 크기 확인을 어떤 식으로 하면 되나요?

수정하려던내용.txt (7.3 KB)

첨부한 메모장은 수정하려던 정보의 Param 입니다.

안녕하세요 개발자님.

확인해본 결과, 컬럼의 수가 많아 발생하는 것으로 추정됩니다.
트랜잭션으로 업로드하는 총 param의 수는 구하기 어려우며 아래와 같이 트랜잭션 작업별로 들어가는 param의 수를 합산하는 방식으로 이용해야되는 점 참고해주시기 바랍니다.

int totalParamCount = 0;

void EnqueueUpdate()
{
    totalParamCount += param.Count;
    updateList.Add(TransactionValue.SetUpdateV2(tableName, "rowIndate", "owner_inDate", param));
}

데이터의 크기를 구하는 방식은 아래와 같으니 참고해주시면 감사하겠습니다.

Param param = new Param();
string paramToString = JsonConvert.SerializeObject(param.GetValue());
int count = System.Text.Encoding.Default.GetByteCount(paramToString);
Debug.Log("param의 크기(byte) : " + count);