본문으로 건너뛰기
버전: SDK-5.11.3

TransactionWrite

public BackendReturnObject TransactionWrite(PlayerDataTransactionWrite playerDataTransactionWrite);

파라미터

ValueTypeDescriptionDefault
playerDataTransactionWritePlayerDataTransactionWrite쓰기 전용 트랜잭션 명령 모음 클래스-

PlayerDataTransactionWrite

데이터 등록, 수정, 삭제를 한번에 요청할 수 있도록 명령을 추가하는 클래스입니다.

데이터 등록
public PlayerDataTransactionWrite AddInsert(string tableName, Param param);

PlayerDataTransactionWrite transactionWrite = new PlayerDataTransactionWrite();

Param param = new Param();
param.Add("level", 10);
param.Add("hp",20);

// 데이터 하나를 삽입
transactionWrite.AddInsert("USER_DATA", param);

Param param2 = new Param();
param2.Add("score", 100000);

transactionWrite.AddInsert("SCORE", param2);

데이터 수정
public PlayerDataTransactionWrite AddUpdateMyLatestData(string tableName, Param param);
public PlayerDataTransactionWrite AddUpdateMyData(string tableName, string inDate, Param param);
public PlayerDataTransactionWrite AddUpdateOtherData(string tableName, string inDate, string owner_inDate, Param param);

PlayerDataTransactionWrite transactionWrite = new PlayerDataTransactionWrite();

Param param = new Param();
param.Add("level", 10);
param.Add("hp",20);

transactionWrite.AddUpdateMyLatestData("USER_DATA", param);

Param param2 = new Param();
param2.Add("score", 10);

// 2023-10-30T08:34:49.925Z 는 SCORE 테이블에서 자신이 등록한 데이터의 row 값입니다.
transactionWrite.AddUpdateMyData("SCORE", "2023-10-30T08:34:49.925Z", param2);

Param param3 = new Param();
param3.Add("level", 10);
param3.Add("hp",20);

// 2023-10-30T08:34:49.925Z 는 SCORE 테이블에서 "2022-09-10T04:54:12.314Z"와 owner_inDate가 일치하는 유저가 등록한 데이터의 row 값입니다.
// 2022-09-10T04:54:12.314Z 는 유저의 고유 ID 입니다.
transactionWrite.AddUpdateOtherData("SCORE", "2023-10-30T08:34:49.925Z", "2022-09-10T04:54:12.314Z", param3);

데이터 삭제
public PlayerDataTransactionWrite AddDeleteMyLatestData(string tableName);
public PlayerDataTransactionWrite AddDeleteMyData(string tableName, string inDate);
public PlayerDataTransactionWrite AddDeleteOtherData(string tableName, string inDate, string owner_inDate);

PlayerDataTransactionWrite transactionWrite = new PlayerDataTransactionWrite();
transactionWrite.AddDeleteMyLatestData("USER_DATA");

// 2023-10-30T08:34:49.925Z 는 SCORE 테이블에서 자신이 등록한 데이터의 row 값입니다.
transactionWrite.AddDeleteMyData("SCORE", "2023-10-30T08:34:49.925Z");

// 2023-10-30T08:34:49.925Z 는 SCORE 테이블에서 "2022-09-10T04:54:12.314Z"와 owner_inDate가 일치하는 유저가 등록한 데이터의 row 값입니다.
// 2022-09-10T04:54:12.314Z 는 유저의 고유 ID 입니다.
transactionWrite.AddDeleteOtherData("SCORE", "2023-10-30T08:34:49.925Z", "2022-09-10T04:54:12.314Z");

설명

playerDataTransactionWrite에 존재하는 트랜잭션 명령들을 서버에 요청합니다.

  • playerDataTransactionWrite 내 명령 중 동일한 row 데이터를 수정, 삭제하는 명령이 존재할 경우, 에러가 발생합니다.
  • 최대 10개의 작업을 1개로 묶을 수 있습니다.
  • 작업 리스트에 존재하는 요청들 중 하나 이상의 작업에서 에러가 발생할 경우 모든 요청들은 실패 처리가 됩니다.
  • 모든 요청이 성공해야 모든 요청들이 성공 처리가 됩니다.

Example

동기

PlayerDataTransactionWrite transactionWrite = new PlayerDataTransactionWrite();

Param param = new Param();
param.Add("level", 10);
param.Add("hp",20);

// 데이터 하나를 삽입
transactionWrite.AddInsert("USER_DATA", param);

Param param2 = new Param();
param2.Add("score", 10);
// 데이터 하나를 수정
transactionWrite.AddUpdateMyLatestData("SCORE", param2);

// 데이터 하나를 삭제
transactionWrite.AddDeleteMyLatestData("TEMP_DATA");

Backend.PlayerData.TransactionWrite(transactionWrite);

비동기

PlayerDataTransactionWrite transactionWrite = new PlayerDataTransactionWrite();

Param param = new Param();
param.Add("level", 10);
param.Add("hp",20);

// 데이터 하나를 삽입
transactionWrite.AddInsert("USER_DATA", param);

Param param2 = new Param();
param2.Add("score", 10);
// 데이터 하나를 수정
transactionWrite.AddUpdateMyLatestData("SCORE", param2);

// 데이터 하나를 삭제
transactionWrite.AddDeleteMyLatestData("TEMP_DATA");

Backend.PlayerData.TransactionWrite(transactionWrite, callback => {
// 이후 로직
});

SendQueue

PlayerDataTransactionWrite transactionWrite = new PlayerDataTransactionWrite();

Param param = new Param();
param.Add("level", 10);
param.Add("hp",20);

// 데이터 하나를 삽입
transactionWrite.AddInsert("USER_DATA", param);

Param param2 = new Param();
param2.Add("score", 10);
// 데이터 하나를 수정
transactionWrite.AddUpdateMyLatestData("SCORE", param2);

// 데이터 하나를 삭제
transactionWrite.AddDeleteMyLatestData("TEMP_DATA");

SendQueue.Enqueue(Backend.PlayerData.TransactionWrite, transactionWrite, callback => {
// 이후 로직
});

ReturnCase

Success cases

등록에 성공한 경우
statusCode : 200
message : Success
returnValue :

{"putItem":[{"table":"첫번째로 AddInsert한 테이블명","inDate":"생성된 데이터의 inDate값"},{"table":"두번째 AddInsert한 테이블명","inDate":"2023-10-30T09:00:52.209Z"},...],"ConsumedCapacity":[{"Write":{"CapacityUnits":18},"Read":{"CapacityUnits":0}}]}

수정, 삭제에 성공한 경우
statusCode : 200
message : Success
returnValue :

{"putItem":[],"ConsumedCapacity":[{"Write":{"CapacityUnits":6},"Read":{"CapacityUnits":1}}]}

Error cases

트랜잭션 작업을 수행 중 1개 이상의 작업에서 에러가 발생한 경우
에러 상황에 대응하는 에러가 리턴됩니다.
Insert / Update / Delete를 수행 시 발생하는 에러는 각각의 개발자 문서를 참고해 주세요.

동일한 row에 2개 이상의 작업을 수행했을 경우
statusCode : 400
errorCode : ValidationException
message : Transaction request cannot include multiple operations on one item

transactionList에 10개를 초과하는 작업이 있거나 혹은 작업이 존재하지 않는 경우
statusCode : 400
errorCode : TransactionSizeError
message : Not Support Transaction Size: {transactionList에 존재하는 작업 개수}

수정하려는 데이터의 크기가 4MB가 넘을 경우 / 수정하려는 컬럼의 갯수가 총 290개를 넘을 경우
statusCode : 400
errorCode : ValidationException
message : Invalid UpdateExpression: Expression size has exceeded the maximum allowed size;