《龙之谷》手游服务器数据管理

时间:2022-10-24 17:42:16

昨天听同事聊起龙之谷的服务端架构,有些新颖和值得学习的地方,姑且在此总结,加深下理解,也算是做个笔记。

《龙之谷》手游服务器数据管理

架构

龙之谷的服务端架构主要的特点就是将数据分块。服务端在设计数据时,按照不同功能将数据分块,比如:玩家属性,技能,帮派,排行块等,每个模块就是一个内存对象——keeper,这样就能按功能模块来管理数据。

keeper是如何管理数据的呢?在服务器启动时,所有keeper都加载到内存。在keeper的内部维护一个字典,这个字典以玩家id(uid)作为key,该模块的数据作为value。初始化为空,当使用keeper时传入uid,keeper先检测uid是否存字典中,如果存在就直接取数据,如果不存在,则去查询数据库。

keeper还有一个作用就是优化存盘。每个字典中再维护一个变量,标记当前数据是否发生改变,存盘时只存发生改变的的数据。同时,keeper的字典中会设置一个上限,在内存中维持固定数量的玩家数据,当玩家数据达到上限后,使用LRU算法,替换到最久未使用的玩家数据。

优缺点

优点

  • 先说最大的优点,就是可以通过keeper直接操作离线玩家的数据
  • 解耦合,玩家的数据单独存在,不需要一次性将玩家的数据全部加载进内存

缺点

  • 需要将数据分块,增加了逻辑复杂度
  • 当玩家数据不在内存中时,需要通过不同的keeper多次,分多次去读数据库

《龙之谷》手游服务器数据管理