DB Cache 사용 및 활용

독점적 데이터 불러오기 및 새 데이터 추가 방법

독점적 불러오기 메서드는 Proud.CDbCacheClient2.RequestExclusiveLoadData 입니다. 로딩할 데이터를 검색하기 위해 인자 fieldNamecmpValue에 찾을 조건을 넣어야 합니다.

사용 예시 입니다.

Proud::Guid outSessetionGuid;
Proud::CDbCacheClient2* c = ...;
c->RequestExclusiveLoadData(L"Gamer",L"GamerID",gamername,outSessetionGuid);

Proud.CDbCacheClient2.RequestExclusiveLoadNewData 메서드도 마찬가지로 독점적 불러오기 함수지만 RootTable 에 데이터를 추가한 뒤 바로 쓰실 때 사용합니다.

사용 예시 입니다.

CPropNodePtr newNode = CPropNodePtr(new CPropNode(L"Gamer"));
 
newNode->Fields[L"GamerID"] = "Ulelio";
 
Proud::Guid outSessetionGuid;
Proud::CDbCacheClient2* c = ...;
c->RequestExclusiveLoadNewData(L"Gamer", newNode, outSessetionGuid);

일방적 데이터 변경하기

  • Proud.CDbCacheClient2.UnilateralAddData

  • Proud.CDbCacheClient2.UnilateralUpdateData

  • Proud.CDbCacheClient2.UnilateralRemoveData

이 메서드들은 DB cache 메모리에 변경을 반영하고 추후 DBMS에 비동기로 실제 기록을 하기에 호출 즉시 리턴합니다. 또한 응답 메서드 콜백이 없습니다.

DBMS에 먼저 반영되는 요청 응답형 메서드 및 blocked 메서드 사용

DBMS 에 먼저 반영되는 요청 응답형 메서드 및 blocked 메서드 사용은 요청 응답형 데이터 변경 을 위한 메서드 입니다. 호출 즉시 리턴하며, 변경 사항은 실제 DBMS에 기록이 완료된 후에야 DB cache의 메모리에도 반영됩니다.

만약 요청 응답형이 아닌 blocked 호출을 원한다면 이들 메서드를 사용하십시오.

  • Proud.CDbCacheClient2.BlockedAddData

  • Proud.CDbCacheClient2.BlockedUpdateData

  • Proud.CDbCacheClient2.BlockedRemoveData

요청 응답형 SessionGuid

독점 Client 들이 각각 한 개의 Session을 가지게 되고, DB Cache Client는 각각의 Session들을 구분하기 위해 Guid 값을 사용합니다. 요청 시 Output 파라미터로 SessionGuid 값을 발급받고, 응답 Event의 CCallbackArgs::m_sessionGuid로 발급 받았던 값을 받게 됩니다. outSessionGuid를 저장했다가 비교하여 요청한 session을 확인할 수 있습니다.

요청

CDbCacheClient2::RequestExclusiveLoadNewData(String rootTableName, CPropNodePtr addData, Guid &outSessionGuid);

응답

IDbCacheClientDelegate2::OnExclusiveLoadDataFailed(CCallbackArgs args)

요청outSessionGuid 응답args.m_sessionGuid 와 같습니다.

비독점적 데이터 접근 방법

비독점적 접근을 허락하기 위해 Proud.CDbCacheServer2StartParameter.m_allowNonExclusiveAccess를 설정해야 합니다.

비독점적 데이터 변경을 성공하면 해당 데이터의 변경사항이 독점적 로딩했던 DB cache client 에 신고됩니다. 신고를 위해 아래의 메서드가 콜백됩니다.

  • Proud.IDbCacheClientDelegate2.OnSomeoneAddData

  • Proud.IDbCacheClientDelegate2.OnSomeoneRemoveData

  • Proud.IDbCacheClientDelegate2.OnSomeoneModifyValue

  • Proud.IDbCacheClientDelegate2.OnSomeoneSetValue

쉽게 볼 수 있도록 각 요청과 응답 관계를 묶어 보면 다음과 같습니다.

Proud.CDbCacheClient2.RequestNonExclusiveSnapshotData : Snapshot 얻어오기

// 응답:
IDbCacheClientDelegate2::OnNonExclusiveSnapshotDataSuccess (CCallbackArgs args)
IDbCacheClientDelegate2::OnNonExclusiveSnapshotDataFailed (CCallbackArgs args)

Proud.CDbCacheClient2.RequestNonExclusiveAddData : 데이터 추가하기

// 응답:
IDbCacheClientDelegate2::OnNonExclusiveAddDataAck (CCallbackArgs args)
// 독점중인 DB Cache Client의 Callback Event:
IDbCacheClientDelegate2::OnSomeoneAddData(CCallbackArgs& args)

Proud.CDbCacheClient2.RequestNonExclusiveRemoveData : 데이터 제거하기

// 응답:
IDbCacheClientDelegate2::OnNonExclusiveRemoveDataAck (CCallbackArgs args)
// 독점중인 DB Cache Client의 Callback Event:
IDbCacheClientDelegate2::OnSomeoneRemoveData (CCallbackArgs& args)

Proud.CDbCacheClient2.RequestNonExclusiveModifyValue : 데이터에 특정한 연산을 시킵니다.(+, -, *, /)

// 응답:
IDbCacheClientDelegate2::OnNonExclusiveModifyValueSuccess (CCallbackArgs args)
IDbCacheClientDelegate2::OnNonExclusiveModifyValueFailed (CCallbackArgs args)
// 독점중인 DB Cache Client의 Callback Event:
IDbCacheClientDelegate2::OnSomeoneModifyValue (CCallbackArgs& args)

Proud.CDbCacheClient2.RequestNonExclusiveSetValueIf : 두 값을 비교하여 저장하도록요청합니다.

// 응답:
IDbCacheClientDelegate2::OnNonExclusiveSetValueIfSuccess (CCallbackArgs args)
IDbCacheClientDelegate2::OnNonExclusiveSetValueIfFailed (CCallbackArgs args)
 
// 독점중인 DB Cache Client의 Callback Event:
IDbCacheClientDelegate2::OnSomeoneSetValue (CCallbackArgs& args)

DB cache 사용 시 주의사항

일방형과 요청 응답형(독점 Data 요청 응답형 & Block형 & 비독점 데이터 접근) 혼용 시 주의사항입니다.

  • 요청 응답형 메서드가 사용되는 동안 일방형 메서드를 사용하게 되면 Proud.IDbCacheClientDelegate2.OnAccessError 가 콜백될 수 있습니다.

  • 변경한 Data에 대한 응답을 받지 못한 상태에서 일방형 메서드를 사용하게 되면 잘못된 Data가 들어갈 수 있습니다.


활용

Last updated