ET6.0數據庫模塊(一)


學了字母哥的課程之后,發現這篇文章需要修正……

 

數據庫模塊花了整整一周時間理解,是耗時最長的模塊,因為ET官方Demo沒有使用DBComponent,所以主要是研究傳奇Demo

Gitee:https://gitee.com/Leng-ET/ET-LegendDemo

 

基礎使用其實不算難,無非是增刪改查,DBComponent確實也提供了Insert、Remove、Save和Query四組方法,但是除了基礎方法,梳理之后發現兩個難點:

1、數據庫模塊更多的是涉及到具體的業務邏輯,關系到組件設計、協議設計以及靈活使用不同參數傳遞和操作數據;

2、緩存層設計,雖然MongoDB比MySQL訪問速度更快,但也需要避免高頻數據頻繁直接和數據庫交互,導致可能性能問題,一般主流游戲都會采用Ridis作為緩存層,ET框架中需要設計DBCacheComponent作為緩存層;

關於緩存層視需求而定,ET社區有兩篇相關帖子討論:

https://et-framework.cn/d/71-redis/2

https://et-framework.cn/d/180-dbproxycomponent

 

首先是DBComponent組件的增刪改查方法需要理解怎么使用,基本方法可以看上一篇關於C#中MongoDB基礎操作的小例子 ,最好能自己安裝MongoDB操作一下命令行和寫點C#案例增進理解,可以參考官方工程在【工具-NuGet包管理器-管理解決方案的NuGet程序包】添加MongoDB.Driver、MongoDB.Bson、mongocsharpdriver三個擴展包。

DBComponent提供了一組GetCollection方法用於獲取指定Collection(集合),用於在增刪改查方法中調用集合對象。

public IMongoCollection<T> GetCollection<T>(int zone, string collection=null)
{
    return this.ZoneDatabases[zone].GetCollection<T>(collection ?? typeof (T).Name);
}

public IMongoCollection<Entity> GetCollection(int zone, string name)
{
    return this.ZoneDatabases[zone].GetCollection<Entity>(name);
}

在DBComponentSystem提供的數據增刪改查方法組

 

傳奇Demo中設計了這些主要的數據組件用於存儲對應系統模塊的數據,以及相關業務邏輯的協議,需要特別關注的是專門設計了玩家數據協議IDataMessage和BsonMessage,關於Bson協議的理解可以參考ET社區帖子(https://et-framework.cn/d/211-et6)。

這個結構是根據多服設計,最上層是玩家賬號Account,賬號下包含不同區服的User,不同區服有自己的角色Character,當然這就是根據需求靈活設計的地方,這個Demo可能在選服時需要顯示一些簡略信息,這個交互階段無需詳細的角色數據,所以抽出了一個User層,如果沒有這些需求或者不在乎多一些發送數據,也可以只設賬號和角色兩層,把LastPlay和Zone信息放到Character里面。

數據組件是基於前后端Protobuf通信(NetOuter)設計,服務端內部進程通信(NetInner)可以直接使用Bson發送Enity實體信息。

BsonMessage主要定義了幾個方法用於傳遞特定類型的數據,繼承IDBCacheActorRequest、IDBCacheActorResponse,似乎是緩存層使用的協議,緩存層的邏輯還得繼續梳理。

協議的主要傳遞內容

協議 Request Response
GetComponent

long CharacterId

string Component

Entity Component
GetUnit

long CharacterId

string Component

Entity Component
SaveComponent

long CharacterId

Entity Component

-
SaveUnit

long CharacterId

List<Entity> Components

-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM