DB Cache 活用法

混用 ProudNet DB cache系統和 ADO

DB cache系統和ADO Wrapper API可以混合使用。 但是,當用戶直接處理服務器和客戶端獨家訪問的表時,應注意以下幾點。

讀表

Proud.CDbCacheServer2 中緩存的數據可能尚未在 DBMS 中 flush,因此獲得的數據信息可能是過去的數據,而不是實際狀態。 寫入表格 Proud.CDbCacheServer2 中斷斷續續地寫入這些表 。 因此,如果在這些表中記錄某些東西, 可能會與 Proud.CDbCacheServer2 中記錄的數據重合。 因此,我們不建議記錄在這些桌子上。

調整DB cache定位

如果將緩存DB信息寫入DBMS的週期縮短,以降低DBMS的性能爲代價,DB緩存服務器異常終止,減少未來得及保存的數據丟失的危險。

相關方法爲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 緩存系統的功能可實現部分加載。

例子 * RootTable 是 Gamer 和 CharacterInfo 表。 * ChildTable是Hero下的一個Item,是Gamer下CharacterInfo下的一個Item。 * Hero 中至少有一個使用者定義欄位指向CharacterInfo 中的一個欄位。

您可以使用裝入獨家數據並添加新數據方法來載入玩家並根據使用者選擇的角色載入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 遷移

DB cache ver 1

  • 它涵蓋了 Gamer、 Hero 和 WorldObject 表,您需要指定 OwnerUUID, RootUUID, ParentUUID 來移動它們。

  • 它涉及CLoadedHeroData、CLoadedItemData和CLoadedGamerData,它們必須涉及CLoadedData

Last updated