上個周末看了下MySQL,安裝了一個試了下,重點看了c測試程序已經mysql.h中的API,發現好簡單,目前公司的游戲計劃也是用mysql,但是要設計好一個給游戲使用的數據庫模塊,也不是簡單的處理一下api就能了事的,游戲數據庫由于存取特別頻繁,在我看來,他的設計主要解決下面幾個問題:
1、數據緩存的功能
想想那么平凡的數據存取,完全依賴數據庫的直接操作,這個性能是可想而知的,所以應該建立起游戲服務器和數據庫之間的一個橋梁(暫且命名為數據庫前端),游戲服務器只跟數據庫前端交互,數據庫前端自己具有數據持久化的策略,不依賴于游戲服務器的操作。數據庫前端在第一次取出原始數據后(如一個角色登錄時的數據),將進行本地緩存,下次存取數據都是在本地進行,并不需要更新到數據庫中,至于何時更新到數據庫可以有數據庫前端自行決定(當然也不排除游戲服務器發出持久化的通知)。
2、增量更新的功能
其實好多數據的提交中,有很大一部分的數據是沒有改變的,如果在從前端提交數據到數據庫的時候采取相應的增量更新的辦法,應該對性能會有所提升,尤其是在幾個游戲服務器操作同一個數據庫的時候,因為異步的原因,增量更新能夠保證數據的正確性。
3、拋包策略
游戲服務器有很多數據實在太過頻繁,但是有些類型的數據的重要性一般,所以中途丟失一些也問題不大,在服務器數據交換比較頻繁的時候完全可以拋棄一些,加快存取速度(不過有了前端后是不是可以忽略這點)。
4、數據分流功能
主要體現在游戲服務器的一些不同類型的數據存取可以通過不同的幾個異步隊列進行處理,這樣即使由于數據庫的某些操作延時,也只影響到操作所在隊列,不會影響其他隊列。
5、靈活的多前端,多數據庫等支持
實現游戲服務器,數據庫前端,游戲數據庫之間的多對多關系,便于靈活的運用。
寫完后個人感覺達到第1,2點后,這個數據庫前端功能就已經比較強勁了。