一种基于数据缓存技术读取数据的方法

文档序号:6367918阅读:161来源:国知局
专利名称:一种基于数据缓存技术读取数据的方法
技术领域
本发明涉及数据库缓存技术,尤其涉及一种基于数据缓存技术读取数据的方法。
背景技术
在网络中,WEB应用程序采用内存对象缓存系统作为数据库(DB)的缓冲,将数据加载到内存中,将较慢的数据库(DB)访问,变为较快的内存访问,以提高性能。网络游戏上线后,经常出现黄金时间玩家大量涌入服务器的情况,数据库不堪重负,使玩家在登陆时长时间等待或者频繁掉线,影响用户体验。以大型多人在线角色扮演游戏(Massive Multiplayer Online Role-Playing Game,MMORPG)为例进行说明,MMORPG 分为客户端和服务器两部分。玩家从客户端通过互联网连接,登陆服务器后才能进行游戏。玩家的资料保存在服务器端。玩家登陆游戏后,可以创造属于自己的角色,拥有不同于别人的外形,属性,拥有独特的道具,这些内容都依赖于属于每个角色独立的数据,游戏依赖这些数据建立独一无二的角色信息。为了数据安全,通常角色数据都保存在数据库中,当玩家登陆游戏时,系统从数据库中取得数据为玩家建立角色。现有技术通常是不添加数据库读取缓冲,只有写入缓冲,直接读取数据库中的数据。当角色数据量不大,同时请求人数不多时,数据库读取数据能够满足玩家的要求。但随着游戏的发展,玩家所拥有的特性数据越来越多,在线人数也逐渐增加,需要加载的数据就越来越庞大,当无法满足性能要求时,通常采用优化表结构,升级硬件等方式进行应对。公开号为CN 102081651A的“一种网络游戏数据库分表的方法”的中国专利申请公开的方法包括将网络虚拟游戏数据库设置为由取值范围限定的虚拟圆,在所述虚拟圆上包括至少一个表,其中每个表中的虚拟节点在所述虚拟圆上均匀分布;计算待分表数据的随机数,在所述数值范围内根据所述随机数据所述待分表数据插入虚拟节点中。该方法在表数量变化的情况下,减少需要重建的数据量,提高了读取数据的效率。在数据库数据量不断加入的情况下,所述方法只是针对数据库表的一种优化措施。当玩家大量涌入服务器时,数据库的读取效率还是不能满足玩家的需求,使玩家在登陆时长时间等待。升级硬件方式虽然能够明显改善上述问题,但是高性能的硬件升级对客户端带来较大的资源浪费及经济负担。因此,需要一种在尽量不升级硬件的情况下,既能够保证服务器响应客户端的速度又能够使在并发使用用户增多的情况下性能不降低的措施,来保证数据库数据的读取效率
发明内容

为了克服现有技术中的缺陷和不足,本发明提出一种将内存对象缓存系统为数据库(DB)缓冲应用于网络游戏中,通过对数据缓存算法(cache algorithms)进行设计,来提高数据库读取效率的方法。本发明公开一种基于数据缓存技术读取数据的方法,包括如下步骤
SI :在服务器内存中设置数据缓存区,所述数据缓存区用于临时存储从数据库中读取的用户特征数据;所述用户特征数据由用户要求访问的数据库中的特性数据组成;S2:计算用户活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部;S3:根据当前用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃度,从缓存区中读取与当前用户对应的用户特征数据,否则,从数据库中读取。
所述步骤S2中根据用户的登录频率、切换服务器频率和用户特征等级计算得到用户活跃度。所述用户活跃度根据用户特征数据被访问的缓存命中率进行修改。所述步骤S3进一步包括,如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置;如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。数据缓存区中还设置有保护等级链表,所述保护等级链表用于存储从数据库中初次被读取的用户特征数据,当保护等级链表中用户特征数据被再次读取时,被读取的用户特征数据脱离保护等级链表,插入到用户特征数据所属的活跃等级链表中。所述活跃度等级表长度固定,当所述活跃等级链表长度未达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级链表表头位置;当所述活跃等级链表长度达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级表头位置,处于整个队列尾部的用户特征数据被从缓存中删除。所述保护等级链表长度固定,当所述保护等级链表长度达到上限时,新读入的用户特征数据插入到紧邻保护等级链表表头的位置,处于保护等级链表尾部的用户特征数据被移出保护等级链表,插入到其所属的活跃等级链表的尾部。所述活跃度等级链表表长度固定,当所述活跃等级链表长度达到上限时,从保护等级链表尾部移出的用户特征数据替换掉处于整个链表队列尾部的用户特征数据。所述用户特征数据为用户在网络游戏中扮演的角色的外形、属性和拥有的道具特征对应的数据。实施本发明的技术方案,采用内存缓存机制,将缓存区用户对应的用户特征数据按照活跃度阈值分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部,使用户访问数据库时实现点对点的从内存中读取数据,降低从数据库加载数据时的消耗,提高数据加载速度,降低数据库负荷,提升用户体验;同时,利用空闲的内存来降低输入/输出(10)端口负荷,均衡了服务器硬件资源的使用。


图I为本发明实施例的基于数据缓存技术读取数据的方法流程图;图2为本发明实施例的实现数据库数据缓存的示意图;图3为本发明实施例的步骤S3中读取数据的具体流程图;图4为本发明具体实施例的按照活跃度阈值将用户特征数据分成不同活跃等级的不意图; 图5为本发明具体实施例的访问活跃等级链表中用户特征数据等级不变情况下的算法不意图;图6为本发明具体实施例的访问活跃等级链表中用户特征数据等级变化情况下的算法不意图;图7为本发明实施例的访问保护等级链表中用户特征数据等级变化情况下的算法示意图;图8为本发明另一实施例的访问保护等级链表中用户特征数据等级变化情况下的算法不意图;图9为本发明实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图;图10为本发明另一实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图。
具体实施例方式为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以详细说明。图I为本发明实施例的基于数据缓存技术读取数据的方法流程图。具体方法包括如下步骤SI :在服务器内存中设置数据缓存区,所述数据缓存区用于临时存储从数据库中读取的用户特征数据;所述用户特征数据由用户要求访问的数据库中的特性数据组成。在大型多人在线角色扮演游戏(MMORPG)中,玩家可以创造属于自己的角色,拥有不同于别人的外形,属性,拥有独特的道具,所述内容都依赖于属于每个角色独立的数据,通常角色数据都保存在数据库中,当玩家登陆游戏时,系统根据玩家需要访问的数据库的数据内容从数据库中取得所需数据形成与角色对应的用户特征数据,服务器记录所述用户特征数据对应的玩家行为信息,如玩家登陆游戏的次数、切换服务器/场景频率等信息。用户特征数据的加载通常发生在登陆游戏,切换服务器/场景时,对于那些经常登陆游戏,频繁切换服务器的角色在数据缓存区中被访问的较频繁,角色数据被缓存的效率是最高的,而那些很少登陆游戏或者切换服务器的角色在数据缓存区中被很少访问,所述角色数据被缓存的效率很低。本发明实施例的技术方案是将内存缓存机制应用于大型多人在线角色扮演游戏中,通过对缓存算法(cache algorithms)进行设计,提高缓存区的缓存效率。所述的内存缓存机制是在服务器内存中设置数据缓存区,通过在内存里维护一个统一的巨大的哈希(hash)表,将数据加载到内存中,将较慢的数据库(DB)访问,变为较快的内存访问,提高性能。图2为本发明实施例的实现数据库数据缓存的示意图,所述数据缓存区包括读取缓存和写入缓存,所述读取缓存用于临时存储从数据库读取到内存的数据,所述写入缓存用于临时存储从内存写入到数据库的数据。其中,对数据库端的读取,通常只在登陆游戏,切换服务器/场景时发生,次数相对较少,是可预测可控的,因此,读取缓存采用一级缓存;而数据的修改频率根据玩家行为不同存在很大差异,次数难以确定,因此,写入缓存采用二级缓存,以提高频繁修改数据时的效率,写入的第一层缓存保证了对数据库缓存的访问频率可控。S2:计算用户活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部。在大型多人在线角色扮演游戏中,与玩家行为信息对应的被访问的用户特征数据是有很强规律的。根据用户的登录频率,切换服务器频率及用户特征等级综合计算得出用户活跃度。当用户登录游戏的频率越高,切换服务器/场景的频率越高,用户特征等级越高,则用户的活跃度越高,与用户对应的用户特征数据被访问的频率越高,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,同一活跃等级的用户特征数据放 在队列的一段,活跃等级越低,越靠近队列的尾部,按照活跃等级的顺序建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头的尾指针指向相对高活跃等级链表的尾部。用户特征等级高的用户切换服务器/场景的预期较等级较低的用户高,再次上线的可能性也较高。根据用户的行为信息统计数据缓存区中用户特征数据被访问时的命中率,在误差允许的范围内,按照统计的命中率不断修改数据缓存区中用户活跃度,调整用户对应的用户特征数据所属的活跃等级。对于缓存命中率按照下述方法进行统计修改按照预定的用户活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,设用户特征等级为1-60级的用户特征数据属于初级活跃等级,标记为活跃等级I ;用户特征等级为60-80级的用户特征数据属于中级活跃等级,标记为活跃等级2 ;用户特征等级为80-90级的用户特征数据属于高级活跃等级,标记为活跃等级3。 设定每日登陆超过n次或切换服务器超过m次,用户特征数据等级加I,但是不累力口,默认为n = 3,m = 5,由此可以得到用户特征数据活跃等级最高为3+7(每周重置一次);其中,n和m能够根据缓存命中率以及使用率进行调整。S3:根据当前用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃的,从缓存区中读取与当前用户对应的用户特征数据,否则,从数据库中读取。图3为本发明实施例的步骤S3中读取数据的具体流程图。流程如下根据用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃度,根据活跃度阈值判断用户对应的用户特征数据所属的活跃等级是否发生变化。如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置;如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。如在数据缓存区中不存在所述用户特征数据,则从数据库中读取所述用户特征数据块。图4为本发明具体实施例的按照活跃度阈值将用户对应的用户特征数据分成不同活跃等级的示意图。如图4所示,数据缓存区中存有7个从数据库中读取的用户特征数据,计算与7个用户特征数据对应的用户的活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,用户特征数据PU P2、P3属于活跃等级1,P4、P5、P6属于活跃等级2,P7属于最高活跃等级,按照用户特征数据的活跃等级顺序建立与所述活跃等级对应的链表并对链表表头进行标记,且低活跃等级的链表表头的尾指针指向相对高活跃等级的链表结构的尾部。Alhead表示与活跃等级I对应的链表的表头,A2head表示 与活跃等级2对应的链表的表头,head表示与最高活跃等级对应的链表的表头,所述低活跃等级的链表表头Alhead的尾指针指向活跃等级表头为A2head的链表的尾部,活跃等级A2head的尾指针指向最闻活跃等级表头为head的链表的尾部。按照步骤S3的算法,数据缓存区中存在当前用户要求访问的用户特征数据,重新计算当前用户活跃度,根据活跃度阈值判断用户对应的用户特征数据所属的活跃等级是否发生变化。如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置。参见图5为本发明具体实施例的访问活跃等级链表中用户特征数据等级不变情况下的算法示意图。如用户请求访问的用户特征数据为P1,数据缓存区中存在用户特征数据P1,计算用户活跃度,得到用户对应的用户特征数据Pl所属的活跃等级没有变化,在数据缓存区中找到表头为Alhead的链表与所述用户特征数据Pl所属的活跃等级相同,CPU从表头为Alhead的链表结构中读取P1,并且将Pl从链表中原来的位置删除,插入到紧邻表头为Alhead的链表表头的位置,用户特征数据Pl的尾指针指向表头Alhead,用户特征数据P3、P2依次向链表队列尾部移一位,此种情况下,影响当前活跃等级链表中用户特征数据的顺序。如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。图6为本发明具体实施例的访问活跃等级链表中用户特征数据等级变化情况下的算法示意图。如图6所示,如用户请求访问的用户特征数据为P1,数据缓存区中存在用户特征数据P1,计算用户活跃度,得到用户对应的用户特征数据Pl所属的活跃等级发生变化,在数据缓存区中找到表头为A2head的链表与所述用户特征数据Pl所属的活跃等级相同,但用户特征数据Pl不在表头为A2head的活跃等级链表中,而在低活跃等级表头为Alhead的链表中,CPU从表头为Alhead的链表中读取Pl,并且将Pl从表头为Alhead的链表中删除,插入到表头为A2head的紧邻链表表头的位置,用户特征数据Pl的尾指针指向表头A2head,用户特征数据P6、P5、P4、P3、P2依次向链表队列尾部移一位。数据缓存区的大小能够根据读取数据的情况进行设置,第一次登陆的用户活跃度最低,与用户对应的用户特征数据属于低活跃等级,处于活跃等级链表队列的尾部,按照上述算法,当数据库缓存区达到存取数据上限时,位于活跃等级链表队列尾部的第一次被访问的用户特征数据会被不停删除,使第一次被访问用户特征数据的用户没有积累活跃度的机会。因此,在数据缓存区中还设置有保护等级链表,所述保护等级链表用于存储从数据库中初次读取的用户特征数据(在数据缓存区中不存在被访问的用户特征数据,需要从数据库中去读的情况下,被读取的用户特征数据均被认为是初次读取),当用户特征数据的活跃等级提高时,用户特征数据离开保护等级链表,本实施例中设置为用户特征数据被再次读取时,即可离开保护等级链表。也就是说当用户请求访问保护等级链表中的用户特征数据时(即保护等级链表中存储的用户特征数据被再次读取),被访问的用户特征数据脱离保护等级链表,插入到用户特征数据所属的活跃等级链表中。所述活跃度等级表长度固定,当所述活跃等级链表长度未达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级链表表头位置;当所述活跃等级链表长度达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级表头位置,处于整个队列尾部的用户特征数据被从缓存中删除。保护等级链表具有最高优先权,链表中用户特征数据最后被替换。保护等级链表长度固定,当所述保护等级链表长度达到上限时,新读入的用户特征数据插入到紧邻保护等级链表表头的位置,处于保护等级链表尾部的用户特征数据被移出保护等级链表,插入到其所属的活跃等级链表中的尾部。当所述活跃等级链表长度达到上限时,从保护等级链表尾部移出的用户特征数据替换掉处于整个链表队列尾部的用户特征数据。当用户申请访问的用户特征数据为存在于保护等级链表中的用户特征数据时,计算用户活跃度,判断保护等级链表中用户特征数据所属的活跃等级是否发生变化。本实施例设置当保护等级链表中数据被再次读取时即可脱离保护等级链表,该用户特征数据从保护等级链表中被删除,插入到紧邻其所属活跃等级链表表头的位置,用户特征数据的尾指 针指向其所属活跃等级的链表的表头。图7为本发明实施例的访问保护等级链表中用户特征数据等级变化情况下的算法示意图。参见图7,用户特征数据Pl'、P2'、P3'、P4'和P5'为初次从数据库中读取的用户特征数据,存储于表头为head'的保护等级链表中;用户特征数据P1、P2、P3、P4、P5、P6、P7为按照活跃度阈值将用户对应的用户特征数据分成不同的活跃等级后建立的链表并对链表表头进行标记,其中,用户特征数据P1、P2、P3属于低活跃等级表头为Alhead链表,用户特征数据P4、P5、P6属于中活跃等级表头为A2head链表,用户特征数据P7为活跃等级链表表头为head的链表,低活跃等级的链表表头Alhead的尾指针指向活跃等级表头为A2head的链表的尾部,活跃等级A2head的尾指针指向最闻活跃等级表头为head的链表的尾部。如用户请求访问的用户特征数据为P5',且P5'存在于数据缓存区的保护等级链表中,CPU读取P5',此时P5'为第二次被读取,将P5'从保护等级链表中删除(P5'脱离保护等级链表),插入到紧邻表头为Alhead链表表头的位置,P5'的尾指针指向链表表头Alhead,用户特征数据P1、P2、P3依次向链表队列尾部移一位。图8为本发明另一实施例的访问保护等级链表中用户特征数据等级变化情况下的算法示意图。当所述链表队列长度达到上限的情况下,将P5'从保护等级链表中删除(P5'脱离保护等级链表),插入到紧邻表头为Alhead链表表头的位置,P5/的尾指针指向链表表头Alhead,处于链表队列尾部的Pl从活跃等级链表中被删除。当用户申请访问用户特征数据不在数据缓存区中时,CPU从原始数据库中读取用户特征数据,将所述用户特征数据存储到保护等级链表中。如保护等级链表长度未达到上限,所述用户特征数据保存到保护等级链表中且将该用户特征数据插入到紧邻保护等级链表表头的位置,用户特征数据的尾指针指向保护等级链表的表头;如保护等级链表长度达到上限,所述用户特征数据插入到紧邻保护等级链表表头的位置,用户特征数据的尾指针指向保护等级链表的表头,处于保护等级链表队列尾部的用户特征数据被移出保护等级链表,插入到其所属活跃等级的链表队列的尾部。当所述活跃等级链表长度达到上限时,从保护等级链表尾部移出的用户特征数据替换掉处于整个链表队列 尾部的用户特征数据。图9为本发明实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图。参见图9,用户特征数据Pl'、P2'、P3'、P4'和P5'为初次从数据库中读取的用户特征数据,存储于表头为head'的保护等级链表中;用户特征数据P1、P2、P3、P4、P5、P6、P7为按照活跃度阈值将用户对应的用户特征数据分成不同的活跃等级后建立的链表并对链表表头进行标记,其中,用户特征数据P1、P2、P3属于低活跃等级表头为Alhead链表,用户特征数据P4、P5、P6属于中活跃等级表头为A2head链表,用户特征数据P7为活跃等级链表表头为head的链表,低活跃等级的链表表头Alhead的尾指针指向活跃等级表头为A2head的链表的尾部,活跃等级A2head的尾指针指向最高活跃等级表头为head的链表的尾部。如用户请求访问的用户特征数据为P6',但P6'不存在于数据缓存区的保护等级链表中,P6'为初次被读取的用户特征数据,CPU从原始数据库中读取用户特征数据P6',将P6'插入到保护等级链表紧邻链表表头Head'的位置,P6'的尾指针指向保护等级链表表头Head',如保护等级链表长度未达到上限,P6'插入到保护等级链表紧邻链表表头Head'的位置后,用户特征数据Pl'、P2'、P3'、P4'和P5'依次向队列尾部移一位。如保护等级链表长度达到上限,P6'插入到保护等级链表紧邻链表表头Head'的位置后,保护等级链表中用户对应的用户特征数据Pl'的活跃度最低,Pl'被移出保护等级链表,所述被移出保护等级链表的Pl'插入到活跃等级链表队列的的尾部。图10为本发明另一实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图。当活跃等级链表长度达到上限,则Pl'从保护等级链表尾部移出,替换掉活跃等级链表尾部活跃度最低的用户对应的用户特征数据Pl,Pl从缓存区中被删除。本发明的实施方式使数据被访问时无需遍历缓存区整个数据链表以寻找自己新的位置,只需记录少量的活跃等级对应的链表表头的位置进行定位,大大节约了时间开销,提高数据加载速度,降低数据库负荷;在玩家切换服务器/场景时,缓存100%命中(将缓存容量设置为服务器最高在线,就可保证在线玩家均被缓存)效率提升明显,误差也控制在可接受的范围内,提升用户体验;同时,负责读取数据的服务器负荷主要集中在CPU和输入/输出(IO)端口方面,有效的利用了空闲的内存来降低输入/输出(IO)端口负荷,均衡了服务器硬件资源的使用。上述仅为本发明的较佳实施例及所运用技术原理,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围内。
权利要求
1.一种基于数据缓存技术读取数据的方法,包括如下步骤 Si:在服务器内存中设置数据缓存区,所述数据缓存区用于临时存储从数据库中读取的用户特征数据;所述用户特征数据由用户要求访问的数据库中的特性数据组成; S2 :计算用户活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对闻活跃等级链表的尾部; S3:根据当前用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃度,从缓存区中读取与当前用户对应的用户特征数据,否则,从数据库中读取。
2.根据权利要求I所述的基于数据缓存技术读取数据的方法,其特征在于,所述步骤S2中根据用户的登录频率、切換服务器频率和用户特征等级计算得到用户活跃度。
3.根据权利要求2所述的基于数据缓存技术读取数据的方法,其特征在干,所述用户活跃度根据用户特征数据被访问的缓存命中率进行修改。
4.根据权利要求I所述的基于数据缓存技术读取数据的方法,其特征在于,所述步骤S3进ー步包括,如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置;如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。
5.根据权利要求I所述的基于数据缓存技术读取数据的方法,其特征在于,数据缓存区中还设置有保护等级链表,所述保护等级链表用于存储从数据库中初次被读取的用户特征数据,当保护等级链表中用户特征数据被再次读取时,被读取的用户特征数据脱离保护等级链表,插入到用户特征数据所属的活跃等级链表中。
6.根据权利要求5所述的基于数据缓存技术读取数据的方法,其特征在于,所述活跃度等级表长度固定,当所述活跃等级链表长度未达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级链表表头位置;当所述活跃等级链表长度达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级表头位置,处于整个队列尾部的用户特征数据被从缓存中删除。
7.根据权利要求5所述的基于数据缓存技术读取数据的方法,其特征在于,所述保护等级链表长度固定,当所述保护等级链表长度达到上限吋,新读入的用户特征数据插入到紧邻保护等级链表表头的位置,处于保护等级链表尾部的用户特征数据被移出保护等级链表,插入到其所属的活跃等级链表的尾部。
8.根据权利要求7所述的基于数据缓存技术读取数据的方法,其特征在干,所述活跃度等级链表表长度固定,当所述活跃等级链表长度达到上限吋,从保护等级链表尾部移出的用户特征数据替换处于整个链表队列尾部的用户特征数据。
9.根据权利要求I所述的基于数据缓存技术读取数据的方法,其特征在于,所述用户特征数据为用户在网络游戏中扮演的角色的外形、属性和拥有的道具特征对应的数据。
全文摘要
本发明公开一种基于数据缓存技术读取数据的方法,该方法采用内存缓存机制,将缓存区的用户对应的用户特征数据按照活跃度阈值分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部,使多用户读取数据时通过标记表头的链表表头查找所要访问的用户特征数据,实现点对点的从内存中读取数据,降低从数据库加载数据时的消耗,提高数据加载速度,降低数据库负荷,提升用户体验;同时,利用空闲的内存降低输入/输出(IO)端口负荷,均衡了服务器硬件资源的使用。
文档编号G06F17/30GK102663096SQ201210105548
公开日2012年9月12日 申请日期2012年4月11日 优先权日2012年4月11日
发明者张昊阳 申请人:北京像素软件科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1