聲明:本文內容源自騰訊游戲學院程序公開課_服務端
一、數據表示的基礎
什么是數據表示?
數據是信息的載體。
數據表示是一組操作,可以描述、顯示、操作信息。
?
數據表示的要素
IDL - 接口描述語言
- IDL是用來描述軟件組件接口的一種計算機語言。IDL通過一種中立的方式來描述接口,使得在不同平臺上運行的對象和用不同語言編寫的程序可以相互通信交流;
Data - Operation - 數據操作支持
- serialize(序列化)
- deserialize(反序列化)
- visualize(可視化)
- transform(轉化)
- compression(壓縮):數據運行時。
?
Version Control - 版本控制支持
- 數據可以有不同版本,且版本間可按照一定規則兼容
?
業界現狀
- Google Proto Buffer (Protobuf)
- Apache Thrift Binary Protocol
- Tencent Data Representation (TDR)
?
Protobuf In Action
Protobuf具體的使用
通過IDL語言去定義一個.PROTO文件,然后PROTOBUF會對各個平臺提供PROTO C這么一個編譯器,然后PROTO C編譯器我們可以指定我要生成對應的C#的DR的表示還是對應的C++的DR表示。
一個學習的機會:編譯一個自己熟悉的語言,比如用PROTOBUF編一個點.c和.cpp文件出來,它里面怎么操作數據的,怎么壓縮數據的,整個步驟都是可以看到的。
?
二、數據表示在游戲開發中的應用
游戲開發 - 協議(以天刀為例)
- 交互內容復雜:多重嵌套結構體/二進制數據。
- 協議數量巨大:4000+條協議定義;13000+結構體定義。
- 變更頻繁
- 網絡流量巨大
?
游戲開發 - 協議管理
?
游戲開發 - 異構系統協議交互
多類型終端協議交互
- server:Linux / x86 / C++
- client:PC / iPhone / Android;C++ / C# / lua
?
游戲開發 - 協議版本兼容
?
游戲開發 - 協議流量優化
流量優化:通過DR提供的數據壓縮功能進行流量優化。
?
游戲開發 - 數據存儲的特點
- 數據結構復雜:每個玩家的存儲涉及到成千上萬個字段;
- 數據結構不穩定:每次版本更新有可能會新增字段或擴大原有字段;
- update > read > insert > delete。
?
游戲開發 - 數據存儲設計
Key - Value數據存儲模型
- Key - 角色ID
- Value - 二進制角色數據
- MySQL Blob
使用DR管理Blob數據
- 數據序列化/反序列化
- 數據兼容
- 數據壓縮
我們存盤的時候就是把玩家的數據先serialize成我們的DR描述的中間格式,然后存到DB里面,DB里面再讀取出來然后再恢復成我們的runtime格式
?
三、感受
剛開始概念會介紹的比較多,可能講概念大家比較難以理解,但是做一個東西還是首先要明白基礎概念的定義,后面在基礎概念的定義上進行展開。
?