首先,网络游戏的数据在数据库中是以表的形式保存的,每个玩家的数据占用其中的一行或几行.以玩家基本属性为例:
基本表: chainfo
表结构:chaid,chaname,hp,mp,maxhp,maxmp...为了提高查询的效率,在内存中建立一个大的hash-table,hash-table中只支持两种数据结构:变长的list和定长
的array.list用以表示集,array表示数据行.根据建立的逻辑索引,...,list就是这个玩家所有任务的集合,如果游戏逻辑需要获取这个玩家的任务列表,可以通过以下key获取"mission,chaid,1001".当然仅有一个行集是不够的,
因为当用户的某个任务数据变动时,...必须遍历list,找到正确的array再将变动更新到正确的array中.而网络游戏中最频繁的就是更新操作了,为了提高效率,为每一个
任务行建立一个逻辑索引"chaid,missionid",将任务对应的数据行也存放在...我的做法不是在array被删
除时通知所有的list删除对应的array,而是通过db_array_clear,清除array中存放的有效数据。