DB Cache 활용법

ProudNet DB cache 시스템과 ADO 혼용하기

DB cache 시스템과 ADO Wrapper API를 혼용하여 사용할 수 있습니다. 그러나 서버와 클라이언트 에서 독점적으로 접근하고 있는 테이블을 사용자가 직접 다룰 때에는 다음을 주의해야 합니다.

테이블 읽기

아직 Proud.CDbCacheServer2 에 cache된 데이터가 DBMS 에 flush가 되지 않았을 수 있으므로, 얻은 데이터 정보는 실제 상태보다 과거의 데이터일 수 있습니다. 테이블 쓰기 Proud.CDbCacheServer2 에서 간헐적으로 이들 테이블에 기록을 합니다. 따라서 이들 테이블에 무언가를 기록할 경우 Proud.CDbCacheServer2 에서 기록하는 데이터와 겹쳐버릴 수 있습니다. 따라서 이들 테이블에 기록하기는 권장하지 않습니다.

DB cache 성향 조절하기

Cache된 DB 정보를 DBMS 에 기록하는 주기를 짧게 잡으면 DBMS의 성능을 저하 시키는 대가로 DB cache server 가 비정상 종료되어 미처 저장되지 못한 데이터가 소실될 위험성을 줄입니다.

관련 메서드는 Proud.CDbCacheServer2.SetDbmsWriteIntervalMs 입니다.

DB cache client 에서 데이터를 사용하고 unload 하면 해당 게이머 정보는 DB cache server 메모리에 남아 있다가 일정 시간이 지나면 DB cache server의 메모리에서도 소멸합니다.

만약 이 일정 시간을 짧게 잡으면 DB cache server의 사용 메모리가 증가하지만 DBMS 에서 데이터를 불러오는 횟수가 줄기 때문에 DBMS의 부하가 적어집니다.

관련 메서드는 Proud.CDbCacheServer2.SetUnloadedDataHibernateDurationMs 입니다.

DB cache 부분 로드하기

로딩한 게이머의 캐릭터들 중 한 캐릭터에 대한 정보만 로딩이 필요할 수 있습니다. ProudNet DB cache 시스템의 기능을 이용하여 부분 로드가 가능합니다.

예시 * RootTable 은 Gamer, CharacterInfo 테이블이다. * ChildTable 은 Gamer 하위의 Hero, CharacterInfo의 하위로 Item 이다. * Hero의 사용자가 정의한 필드의 최소 한 개는 CharacterInfo의 필드 한 개를 가리킨다.

독점적 데이터 불러오기 및 새 데이터 추가하는 방법 을 사용하여 Gamer 를 로딩하고 유저가 고르는 캐릭터에 따라 CharacterInfo 를 로딩할 수 있습니다.

아래는 대략적인 코드 입니다.

Proud::Guid outSessionGuid;
Proud::CDbCacheClient2* c = ...;
c->RequestExclusiveLoadData(L"Gamer",L"GamerID",gamername,outSessionGuid);
//이요청으로 loadedGamerData 를 받습니다.
 
...//사용자가 캐릭터를 고르고 loadedGamerData에서 사용자가 고른 캐릭터를 찾음.
 
c->RequestExclusiveLoadData(L"CharacterInfo",L"HeroIndex",findCharacter->heroIndex,outSessionGuid); 
//사용자가 고른 캐릭터에 관한 정보트리를 로드.

DB cache ver.1 로부터 옮겨오기

항목ver 1ver 2대처 방법

Credential 발급

있음

없음

Credential 발급을 직접 구현해야 함

DB cache에 의해 게이머 인증 콜백

있음

없음

게이머 인증 콜백 대신 직접 콜을 해야 함

DB cache ver 1에서는

  • Gamer, Hero, WorldObject Table을 다루며, 옮겨오기 위해서는 OwnerUUID, RootUUID, ParentUUID를 지정해야 합니다.

  • CLoadedHeroData, CLoadedItemData, CLoadedGamerData 를 다루는데, 이들 대신 CLoadedData 를 다루어야 합니다.

Last updated