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의 메모리에도 반영됩니다.

메서드 호출결과 콜백

Proud.CDbCacheClient2.RequestAddData

Proud.IDbCacheClientDelegate2.OnAddDataFailed

Proud.IDbCacheClientDelegate2.OnAddDataSuccess

Proud.CDbCacheClient2.RequestUpdateData

Proud.IDbCacheClientDelegate2.OnUpdateDataFailed

Proud.IDbCacheClientDelegate2.OnUpdateDataSuccess

Proud.CDbCacheClient2.RequestRemoveData

Proud.IDbCacheClientDelegate2.OnRemoveDataFailed

Proud.IDbCacheClientDelegate2.OnRemoveDataSuccess

만약 요청 응답형이 아닌 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를 설정해야 합니다.

메서드 호출결과 콜백

Proud.CDbCacheClient2.RequestNonExclusiveSnapshotData

Proud.IDbCacheClientDelegate2.OnNonExclusiveSnapshotDataFailed

Proud.IDbCacheClientDelegate2.OnNonExclusiveSnapshotDataSuccess

Proud.CDbCacheClient2.RequestNonExclusiveAddData

Proud.IDbCacheClientDelegate2.OnNonExclusiveAddDataAck

Proud.CDbCacheClient2.RequestNonExclusiveRemoveData

Proud.IDbCacheClientDelegate2.OnNonExclusiveRemoveDataAck

Proud.CDbCacheClient2.RequestNonExclusiveSetValueIf

Proud.IDbCacheClientDelegate2.OnNonExclusiveSetValueIfFailed

Proud.IDbCacheClientDelegate2.OnNonExclusiveSetValueIfSuccess

Proud.CDbCacheClient2.RequestNonExclusiveModifyValue

Proud.IDbCacheClientDelegate2.OnNonExclusiveModifyValueFailed

Proud.IDbCacheClientDelegate2.OnNonExclusiveModifyValueSuccess

비독점적 데이터 변경을 성공하면 해당 데이터의 변경사항이 독점적 로딩했던 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가 들어갈 수 있습니다.


활용

pageDB Cache 활용법

Last updated