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時的注意事項

單方向型和請求響應型(獨家數據請求響應型&Block型&非壟斷數據訪問)混用時的注意事項。

  • 如果請求響應方法在使用期間使用單向方法,Proud.IDbCacheClientDelegate2.OnAccessError 將被回饋。

  • 在未收到對更改後的 Data 的響應的情況下使用單向方法可能會導致錯誤的數據進入 。


活用

Last updated