存档的简单历史
单机游戏都会把存档以文件的形式保存在本地,于是最早的一片网游也是这么干的,他们把存档以二进制的形式存储为本地的文件。到了21世纪,mysql等开源数据库引擎的性能和安全性逐渐获得认可,于是主流的网游开始以数据库作为媒介存储玩家存档。但当时的用法和用文件存储实际并没有本质的区别,所有的数据会打包存成blob的形式,然后丢给mysql。
随着网络游戏的复杂化,这种结构并不能适应新的需求,比如gm想查看玩家的部分数据怎么办,又或者排行榜需要对某个数据做top100的排行。通过blob解开再去处理,效果非常不理想。于是,就出现了blob和字段混合使用的存储方式。字段是冗余与blob存档的,作用就是提供给外围服务使用。而blob才是真正游戏使用的,之前怎么用,以后还是怎么用。
于是,我们今天的存档一般是存在数据库中,并且包括若干个blob字段以及若干个int,char字段。
db服务器干什么
保存/读取客户端的存档的媒介
就像前一节说的,它以数据作为媒介,实现了数据存储的过程,就好像用户把存档传到了云端。
裁剪存取API
说白了就是限制访问者的权限,把数据库多加一层保护。对外也更加友好,写db的程序员和写逻辑的程序员可以更好的配合。
实现缓存逻辑
可以再数据库前套一层缓存逻辑,用内存来换时间。因为db服务器了解业务的模式,所以可以写出性能很好的缓存服务。
隐藏实现细节
比如,最终落地是走数据库,还是走文件的,或者某个api是对应于哪种缓存或是延迟还是立刻写,对外层调用者而言仅仅是一个黑盒。对内,如何需要做引擎升级或是切换,对外层更容易做到完全无感。