CN102663096B - 一种基于数据缓存技术读取数据的方法 - Google Patents
一种基于数据缓存技术读取数据的方法 Download PDFInfo
- Publication number
- CN102663096B CN102663096B CN201210105548.3A CN201210105548A CN102663096B CN 102663096 B CN102663096 B CN 102663096B CN 201210105548 A CN201210105548 A CN 201210105548A CN 102663096 B CN102663096 B CN 102663096B
- Authority
- CN
- China
- Prior art keywords
- chained list
- characteristic data
- grade
- user characteristic
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于数据缓存技术读取数据的方法,该方法采用内存缓存机制,将缓存区的用户对应的用户特征数据按照活跃度阈值分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部,使多用户读取数据时通过标记表头的链表表头查找所要访问的用户特征数据,实现点对点的从内存中读取数据,降低从数据库加载数据时的消耗,提高数据加载速度,降低数据库负荷,提升用户体验;同时,利用空闲的内存降低输入/输出(IO)端口负荷,均衡了服务器硬件资源的使用。
Description
技术领域
本发明涉及数据库缓存技术,尤其涉及一种基于数据缓存技术读取数据的方法。
背景技术
在网络中,WEB应用程序采用内存对象缓存系统作为数据库(DB)的缓冲,将数据加载到内存中,将较慢的数据库(DB)访问,变为较快的内存访问,以提高性能。
网络游戏上线后,经常出现黄金时间玩家大量涌入服务器的情况,数据库不堪重负,使玩家在登陆时长时间等待或者频繁掉线,影响用户体验。以大型多人在线角色扮演游戏(MassiveMultiplayerOnlineRole-PlayingGame,MMORPG)为例进行说明,MMORPG分为客户端和服务器两部分。玩家从客户端通过互联网连接,登陆服务器后才能进行游戏。玩家的资料保存在服务器端。玩家登陆游戏后,可以创造属于自己的角色,拥有不同于别人的外形,属性,拥有独特的道具,这些内容都依赖于属于每个角色独立的数据,游戏依赖这些数据建立独一无二的角色信息。为了数据安全,通常角色数据都保存在数据库中,当玩家登陆游戏时,系统从数据库中取得数据为玩家建立角色。现有技术通常是不添加数据库读取缓冲,只有写入缓冲,直接读取数据库中的数据。当角色数据量不大,同时请求人数不多时,数据库读取数据能够满足玩家的要求。但随着游戏的发展,玩家所拥有的特性数据越来越多,在线人数也逐渐增加,需要加载的数据就越来越庞大,当无法满足性能要求时,通常采用优化表结构,升级硬件等方式进行应对。
公开号为CN102081651A的“一种网络游戏数据库分表的方法”的中国专利申请公开的方法包括:将网络虚拟游戏数据库设置为由取值范围限定的虚拟圆,在所述虚拟圆上包括至少一个表,其中每个表中的虚拟节点在所述虚拟圆上均匀分布;计算待分表数据的随机数,在所述数值范围内根据所述随机数据所述待分表数据插入虚拟节点中。该方法在表数量变化的情况下,减少需要重建的数据量,提高了读取数据的效率。在数据库数据量不断加入的情况下,所述方法只是针对数据库表的一种优化措施。当玩家大量涌入服务器时,数据库的读取效率还是不能满足玩家的需求,使玩家在登陆时长时间等待。
升级硬件方式虽然能够明显改善上述问题,但是高性能的硬件升级对客户端带来较大的资源浪费及经济负担。
因此,需要一种在尽量不升级硬件的情况下,既能够保证服务器响应客户端的速度又能够使在并发使用用户增多的情况下性能不降低的措施,来保证数据库数据的读取效率。
发明内容
为了克服现有技术中的缺陷和不足,本发明提出一种将内存对象缓存系统为数据库(DB)缓冲应用于网络游戏中,通过对数据缓存算法(cachealgorithms)进行设计,来提高数据库读取效率的方法。
本发明公开一种基于数据缓存技术读取数据的方法,包括如下步骤:
S1:在服务器内存中设置数据缓存区,所述数据缓存区用于临时存储从数据库中读取的用户特征数据;所述用户特征数据由用户要求访问的数据库中的特性数据组成;
S2:计算用户活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部;
S3:根据当前用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃度,从缓存区中读取与当前用户对应的用户特征数据,否则,从数据库中读取。
所述步骤S2中根据用户的登录频率、切换服务器频率和用户特征等级计算得到用户活跃度。
所述用户活跃度根据用户特征数据被访问的缓存命中率进行修改。
所述步骤S3进一步包括,如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置;如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。
数据缓存区中还设置有保护等级链表,所述保护等级链表用于存储从数据库中初次被读取的用户特征数据,当保护等级链表中用户特征数据被再次读取时,被读取的用户特征数据脱离保护等级链表,插入到用户特征数据所属的活跃等级链表中。
所述活跃度等级表长度固定,当所述活跃等级链表长度未达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级链表表头位置;当所述活跃等级链表长度达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级表头位置,处于整个队列尾部的用户特征数据被从缓存中删除。
所述保护等级链表长度固定,当所述保护等级链表长度达到上限时,新读入的用户特征数据插入到紧邻保护等级链表表头的位置,处于保护等级链表尾部的用户特征数据被移出保护等级链表,插入到其所属的活跃等级链表的尾部。
所述活跃度等级链表表长度固定,当所述活跃等级链表长度达到上限时,从保护等级链表尾部移出的用户特征数据替换掉处于整个链表队列尾部的用户特征数据。
所述用户特征数据为用户在网络游戏中扮演的角色的外形、属性和拥有的道具特征对应的数据。
实施本发明的技术方案,采用内存缓存机制,将缓存区用户对应的用户特征数据按照活跃度阈值分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部,使用户访问数据库时实现点对点的从内存中读取数据,降低从数据库加载数据时的消耗,提高数据加载速度,降低数据库负荷,提升用户体验;同时,利用空闲的内存来降低输入/输出(IO)端口负荷,均衡了服务器硬件资源的使用。
附图说明
图1为本发明实施例的基于数据缓存技术读取数据的方法流程图;
图2为本发明实施例的实现数据库数据缓存的示意图;
图3为本发明实施例的步骤S3中读取数据的具体流程图;
图4为本发明具体实施例的按照活跃度阈值将用户特征数据分成不同活跃等级的示意图;
图5为本发明具体实施例的访问活跃等级链表中用户特征数据等级不变情况下的算法示意图;
图6为本发明具体实施例的访问活跃等级链表中用户特征数据等级变化情况下的算法示意图;
图7为本发明实施例的访问保护等级链表中用户特征数据等级变化情况下的算法示意图;
图8为本发明另一实施例的访问保护等级链表中用户特征数据等级变化情况下的算法示意图;
图9为本发明实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图;
图10为本发明另一实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以详细说明。
图1为本发明实施例的基于数据缓存技术读取数据的方法流程图。具体方法包括如下步骤:
S1:在服务器内存中设置数据缓存区,所述数据缓存区用于临时存储从数据库中读取的用户特征数据;所述用户特征数据由用户要求访问的数据库中的特性数据组成。
在大型多人在线角色扮演游戏(MMORPG)中,玩家可以创造属于自己的角色,拥有不同于别人的外形,属性,拥有独特的道具,所述内容都依赖于属于每个角色独立的数据,通常角色数据都保存在数据库中,当玩家登陆游戏时,系统根据玩家需要访问的数据库的数据内容从数据库中取得所需数据形成与角色对应的用户特征数据,服务器记录所述用户特征数据对应的玩家行为信息,如玩家登陆游戏的次数、切换服务器/场景频率等信息。
用户特征数据的加载通常发生在登陆游戏,切换服务器/场景时,对于那些经常登陆游戏,频繁切换服务器的角色在数据缓存区中被访问的较频繁,角色数据被缓存的效率是最高的,而那些很少登陆游戏或者切换服务器的角色在数据缓存区中被很少访问,所述角色数据被缓存的效率很低。
本发明实施例的技术方案是将内存缓存机制应用于大型多人在线角色扮演游戏中,通过对缓存算法(cachealgorithms)进行设计,提高缓存区的缓存效率。所述的内存缓存机制是在服务器内存中设置数据缓存区,通过在内存里维护一个统一的巨大的哈希(hash)表,将数据加载到内存中,将较慢的数据库(DB)访问,变为较快的内存访问,提高性能。图2为本发明实施例的实现数据库数据缓存的示意图,所述数据缓存区包括读取缓存和写入缓存,所述读取缓存用于临时存储从数据库读取到内存的数据,所述写入缓存用于临时存储从内存写入到数据库的数据。其中,对数据库端的读取,通常只在登陆游戏,切换服务器/场景时发生,次数相对较少,是可预测可控的,因此,读取缓存采用一级缓存;而数据的修改频率根据玩家行为不同存在很大差异,次数难以确定,因此,写入缓存采用二级缓存,以提高频繁修改数据时的效率,写入的第一层缓存保证了对数据库缓存的访问频率可控。
S2:计算用户活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,建立与每个活跃等级对应的链表并对链表表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部。
在大型多人在线角色扮演游戏中,与玩家行为信息对应的被访问的用户特征数据是有很强规律的。根据用户的登录频率,切换服务器频率及用户特征等级综合计算得出用户活跃度。当用户登录游戏的频率越高,切换服务器/场景的频率越高,用户特征等级越高,则用户的活跃度越高,与用户对应的用户特征数据被访问的频率越高,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,同一活跃等级的用户特征数据放在队列的一段,活跃等级越低,越靠近队列的尾部,按照活跃等级的顺序建立与每个活跃等级对应的链表并对链表的表头进行标记,且低活跃等级的链表表头的尾指针指向相对高活跃等级链表的尾部。
用户特征等级高的用户切换服务器/场景的预期较等级较低的用户高,再次上线的可能性也较高。根据用户的行为信息统计数据缓存区中用户特征数据被访问时的命中率,在误差允许的范围内,按照统计的命中率不断修改数据缓存区中用户活跃度,调整用户对应的用户特征数据所属的活跃等级。对于缓存命中率按照下述方法进行统计修改:
按照预定的用户活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,设用户特征等级为1-60级的用户特征数据属于初级活跃等级,标记为活跃等级1;用户特征等级为60-80级的用户特征数据属于中级活跃等级,标记为活跃等级2;用户特征等级为80-90级的用户特征数据属于高级活跃等级,标记为活跃等级3。
设定每日登陆超过n次或切换服务器超过m次,用户特征数据等级加1,但是不累加,默认为n=3,m=5,由此可以得到用户特征数据活跃等级最高为3+7(每周重置一次);其中,n和m能够根据缓存命中率以及使用率进行调整。
S3:根据当前用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃的,从缓存区中读取与当前用户对应的用户特征数据,否则,从数据库中读取。
图3为本发明实施例的步骤S3中读取数据的具体流程图。流程如下:根据用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃度,根据活跃度阈值判断用户对应的用户特征数据所属的活跃等级是否发生变化。如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置;如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。
如在数据缓存区中不存在所述用户特征数据,则从数据库中读取所述用户特征数据块。
图4为本发明具体实施例的按照活跃度阈值将用户对应的用户特征数据分成不同活跃等级的示意图。如图4所示,数据缓存区中存有7个从数据库中读取的用户特征数据,计算与7个用户特征数据对应的用户的活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,用户特征数据P1、P2、P3属于活跃等级1,P4、P5、P6属于活跃等级2,P7属于最高活跃等级,按照用户特征数据的活跃等级顺序建立与所述活跃等级对应的链表并对链表表头进行标记,且低活跃等级的链表表头的尾指针指向相对高活跃等级的链表结构的尾部。A1head表示与活跃等级1对应的链表的表头,A2head表示与活跃等级2对应的链表的表头,head表示与最高活跃等级对应的链表的表头,所述低活跃等级的链表表头A1head的尾指针指向活跃等级表头为A2head的链表的尾部,活跃等级A2head的尾指针指向最高活跃等级表头为head的链表的尾部。
按照步骤S3的算法,数据缓存区中存在当前用户要求访问的用户特征数据,重新计算当前用户活跃度,根据活跃度阈值判断用户对应的用户特征数据所属的活跃等级是否发生变化。如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置。参见图5为本发明具体实施例的访问活跃等级链表中用户特征数据等级不变情况下的算法示意图。如用户请求访问的用户特征数据为P1,数据缓存区中存在用户特征数据P1,计算用户活跃度,得到用户对应的用户特征数据P1所属的活跃等级没有变化,在数据缓存区中找到表头为A1head的链表与所述用户特征数据P1所属的活跃等级相同,CPU从表头为A1head的链表结构中读取P1,并且将P1从链表中原来的位置删除,插入到紧邻表头为A1head的链表表头的位置,用户特征数据P1的尾指针指向表头A1head,用户特征数据P3、P2依次向链表队列尾部移一位,此种情况下,影响当前活跃等级链表中用户特征数据的顺序。
如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。图6为本发明具体实施例的访问活跃等级链表中用户特征数据等级变化情况下的算法示意图。如图6所示,如用户请求访问的用户特征数据为P1,数据缓存区中存在用户特征数据P1,计算用户活跃度,得到用户对应的用户特征数据P1所属的活跃等级发生变化,在数据缓存区中找到表头为A2head的链表与所述用户特征数据P1所属的活跃等级相同,但用户特征数据P1不在表头为A2head的活跃等级链表中,而在低活跃等级表头为A1head的链表中,CPU从表头为A1head的链表中读取P1,并且将P1从表头为A1head的链表中删除,插入到表头为A2head的紧邻链表表头的位置,用户特征数据P1的尾指针指向表头A2head,用户特征数据P6、P5、P4、P3、P2依次向链表队列尾部移一位。
数据缓存区的大小能够根据读取数据的情况进行设置,第一次登陆的用户活跃度最低,与用户对应的用户特征数据属于低活跃等级,处于活跃等级链表队列的尾部,按照上述算法,当数据库缓存区达到存取数据上限时,位于活跃等级链表队列尾部的第一次被访问的用户特征数据会被不停删除,使第一次被访问用户特征数据的用户没有积累活跃度的机会。因此,在数据缓存区中还设置有保护等级链表,所述保护等级链表用于存储从数据库中初次读取的用户特征数据(在数据缓存区中不存在被访问的用户特征数据,需要从数据库中去读的情况下,被读取的用户特征数据均被认为是初次读取),当用户特征数据的活跃等级提高时,用户特征数据离开保护等级链表,本实施例中设置为用户特征数据被再次读取时,即可离开保护等级链表。也就是说当用户请求访问保护等级链表中的用户特征数据时(即保护等级链表中存储的用户特征数据被再次读取),被访问的用户特征数据脱离保护等级链表,插入到用户特征数据所属的活跃等级链表中。所述活跃度等级表长度固定,当所述活跃等级链表长度未达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级链表表头位置;当所述活跃等级链表长度达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃度等级表头位置,处于整个队列尾部的用户特征数据被从缓存中删除。
保护等级链表具有最高优先权,链表中用户特征数据最后被替换。保护等级链表长度固定,当所述保护等级链表长度达到上限时,新读入的用户特征数据插入到紧邻保护等级链表表头的位置,处于保护等级链表尾部的用户特征数据被移出保护等级链表,插入到其所属的活跃等级链表中的尾部。当所述活跃等级链表长度达到上限时,从保护等级链表尾部移出的用户特征数据替换掉处于整个链表队列尾部的用户特征数据。
当用户申请访问的用户特征数据为存在于保护等级链表中的用户特征数据时,计算用户活跃度,判断保护等级链表中用户特征数据所属的活跃等级是否发生变化。本实施例设置当保护等级链表中数据被再次读取时即可脱离保护等级链表,该用户特征数据从保护等级链表中被删除,插入到紧邻其所属活跃等级链表表头的位置,用户特征数据的尾指针指向其所属活跃等级的链表的表头。图7为本发明实施例的访问保护等级链表中用户特征数据等级变化情况下的算法示意图。参见图7,用户特征数据P1′、P2′、P3′、P4′和P5′为初次从数据库中读取的用户特征数据,存储于表头为head′的保护等级链表中;用户特征数据P1、P2、P3、P4、P5、P6、P7为按照活跃度阈值将用户对应的用户特征数据分成不同的活跃等级后建立的链表并对链表表头进行标记,其中,用户特征数据P1、P2、P3属于低活跃等级表头为A1head链表,用户特征数据P4、P5、P6属于中活跃等级表头为A2head链表,用户特征数据P7为活跃等级链表表头为head的链表,低活跃等级的链表表头A1head的尾指针指向活跃等级表头为A2head的链表的尾部,活跃等级A2head的尾指针指向最高活跃等级表头为head的链表的尾部。如用户请求访问的用户特征数据为P5′,且P5′存在于数据缓存区的保护等级链表中,CPU读取P5′,此时P5′为第二次被读取,将P5′从保护等级链表中删除(P5′脱离保护等级链表),插入到紧邻表头为A1head链表表头的位置,P5′的尾指针指向链表表头A1head,用户特征数据P1、P2、P3依次向链表队列尾部移一位。图8为本发明另一实施例的访问保护等级链表中用户特征数据等级变化情况下的算法示意图。当所述链表队列长度达到上限的情况下,将P5′从保护等级链表中删除(P5′脱离保护等级链表),插入到紧邻表头为A1head链表表头的位置,P5′的尾指针指向链表表头A1head,处于链表队列尾部的P1从活跃等级链表中被删除。
当用户申请访问用户特征数据不在数据缓存区中时,CPU从原始数据库中读取用户特征数据,将所述用户特征数据存储到保护等级链表中。如保护等级链表长度未达到上限,所述用户特征数据保存到保护等级链表中且将该用户特征数据插入到紧邻保护等级链表表头的位置,用户特征数据的尾指针指向保护等级链表的表头;如保护等级链表长度达到上限,所述用户特征数据插入到紧邻保护等级链表表头的位置,用户特征数据的尾指针指向保护等级链表的表头,处于保护等级链表队列尾部的用户特征数据被移出保护等级链表,插入到其所属活跃等级的链表队列的尾部。当所述活跃等级链表长度达到上限时,从保护等级链表尾部移出的用户特征数据替换掉处于整个链表队列尾部的用户特征数据。
图9为本发明实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图。参见图9,用户特征数据P1′、P2′、P3′、P4′和P5′为初次从数据库中读取的用户特征数据,存储于表头为head′的保护等级链表中;用户特征数据P1、P2、P3、P4、P5、P6、P7为按照活跃度阈值将用户对应的用户特征数据分成不同的活跃等级后建立的链表并对链表表头进行标记,其中,用户特征数据P1、P2、P3属于低活跃等级表头为A1head链表,用户特征数据P4、P5、P6属于中活跃等级表头为A2head链表,用户特征数据P7为活跃等级链表表头为head的链表,低活跃等级的链表表头A1head的尾指针指向活跃等级表头为A2head的链表的尾部,活跃等级A2head的尾指针指向最高活跃等级表头为head的链表的尾部。如用户请求访问的用户特征数据为P6′,但P6′不存在于数据缓存区的保护等级链表中,P6′为初次被读取的用户特征数据,CPU从原始数据库中读取用户特征数据P6′,将P6′插入到保护等级链表紧邻链表表头Head′的位置,P6′的尾指针指向保护等级链表表头Head′,如保护等级链表长度未达到上限,P6′插入到保护等级链表紧邻链表表头Head′的位置后,用户特征数据P1′、P2′、P3′、P4′和P5′依次向队列尾部移一位。如保护等级链表长度达到上限,P6′插入到保护等级链表紧邻链表表头Head′的位置后,保护等级链表中用户对应的用户特征数据P1′的活跃度最低,P1′被移出保护等级链表,所述被移出保护等级链表的P1′插入到活跃等级链表队列的的尾部。图10为本发明另一实施例的访问保护等级链表中用户特征数据等级不变情况下的算法示意图。当活跃等级链表长度达到上限,则P1′从保护等级链表尾部移出,替换掉活跃等级链表尾部活跃度最低的用户对应的用户特征数据P1,P1从缓存区中被删除。
本发明的实施方式使数据被访问时无需遍历缓存区整个数据链表以寻找自己新的位置,只需记录少量的活跃等级对应的链表表头的位置进行定位,大大节约了时间开销,提高数据加载速度,降低数据库负荷;在玩家切换服务器/场景时,缓存100%命中(将缓存容量设置为服务器最高在线,就可保证在线玩家均被缓存)效率提升明显,误差也控制在可接受的范围内,提升用户体验;同时,负责读取数据的服务器负荷主要集中在CPU和输入/输出(IO)端口方面,有效的利用了空闲的内存来降低输入/输出(IO)端口负荷,均衡了服务器硬件资源的使用。
上述仅为本发明的较佳实施例及所运用技术原理,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围内。
Claims (8)
1.一种基于数据缓存技术读取数据的方法,包括如下步骤:
S1:在服务器内存中设置数据缓存区,所述数据缓存区用于临时存储从数据库中读取的用户特征数据;所述用户特征数据由用户要求访问的数据库中的特性数据组成;
S2:计算用户活跃度,按照预设的活跃度阈值将用户对应的用户特征数据分成不同的活跃等级,建立与每个活跃等级对应的活跃等级链表并对链表的表头进行标记,且低活跃等级的链表表头指向相对高活跃等级链表的尾部;
S3:根据当前用户请求访问的用户特征数据,判断在数据缓存区中是否存在所述用户特征数据,如存在,重新计算当前用户活跃度,从缓存区中读取与当前用户对应的用户特征数据,否则,从数据库中读取;
其中,数据缓存区中还设置有保护等级链表,所述保护等级链表用于存储从数据库中初次被读取的用户特征数据,当保护等级链表中用户特征数据被再次读取时,被读取的用户特征数据脱离保护等级链表,插入到用户特征数据所属的活跃等级链表中。
2.根据权利要求1所述的基于数据缓存技术读取数据的方法,其特征在于,所述步骤S2中根据用户的登录频率、切换服务器频率和用户特征等级计算得到用户活跃度。
3.根据权利要求2所述的基于数据缓存技术读取数据的方法,其特征在于,所述用户活跃度根据用户特征数据被访问的缓存命中率进行修改。
4.根据权利要求1所述的基于数据缓存技术读取数据的方法,其特征在于,所述步骤S3进一步包括,如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级没有变化,则从所述用户特征数据所属的活跃等级链表中读取用户特征数据,并将所述用户特征数据从其所属活跃等级链表中原来的位置删除,插入到紧邻其所属活跃等级链表表头的位置;如重新计算当前用户活跃度后,当前用户对应的用户特征数据所属的活跃等级发生变化,则从找到所述用户特征数据的活跃等级链表中读取所述用户特征数据,并将所述用户特征数据从被找到的活跃等级链表中原来的位置删除,插入到紧邻重新计算后的所述用户特征数据所属的新活跃等级链表表头的位置。
5.根据权利要求1所述的基于数据缓存技术读取数据的方法,其特征在于,所述活跃等级链表长度固定,当所述活跃等级链表长度未达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃等级链表表头位置;当所述活跃等级链表长度达到上限时,新读入的用户特征数据插入到紧邻其对应的活跃等级链表头位置,处于整个队列尾部的用户特征数据被从缓存中删除。
6.根据权利要求1所述的基于数据缓存技术读取数据的方法,其特征在于,所述保护等级链表长度固定,当所述保护等级链表长度达到上限时,新读入的用户特征数据插入到紧邻保护等级链表表头的位置,处于保护等级链表尾部的用户特征数据被移出保护等级链表,插入到其所属的活跃等级链表的尾部。
7.根据权利要求6所述的基于数据缓存技术读取数据的方法,其特征在于,所述活跃等级链表表长度固定,当所述活跃等级链表长度达到上限时,从保护等级链表尾部移出的用户特征数据替换处于整个链表队列尾部的用户特征数据。
8.根据权利要求1所述的基于数据缓存技术读取数据的方法,其特征在于,所述用户特征数据为用户在网络游戏中扮演的角色的外形、属性和拥有的道具特征对应的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210105548.3A CN102663096B (zh) | 2012-04-11 | 2012-04-11 | 一种基于数据缓存技术读取数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210105548.3A CN102663096B (zh) | 2012-04-11 | 2012-04-11 | 一种基于数据缓存技术读取数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102663096A CN102663096A (zh) | 2012-09-12 |
CN102663096B true CN102663096B (zh) | 2015-12-16 |
Family
ID=46772587
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210105548.3A Active CN102663096B (zh) | 2012-04-11 | 2012-04-11 | 一种基于数据缓存技术读取数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102663096B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103065238B (zh) * | 2012-12-20 | 2016-08-31 | 北京讯鸟软件有限公司 | 一种通过内存对名单信息动态预准备的方法 |
CN103246696A (zh) * | 2013-03-21 | 2013-08-14 | 宁波公众信息产业有限公司 | 高并发数据库的访问方法及应用于多服务器系统的方法 |
CN104462025A (zh) * | 2013-10-29 | 2015-03-25 | 上海宝信软件股份有限公司 | 加快招标文件生成的缓冲方法及系统 |
CN104331492B (zh) * | 2014-11-14 | 2017-11-21 | 北京国双科技有限公司 | 一种缓存多实例数据的方法及装置 |
CN105491029A (zh) * | 2015-11-26 | 2016-04-13 | 盛趣信息技术(上海)有限公司 | 游戏服务器集群 |
CN107180062A (zh) * | 2016-03-11 | 2017-09-19 | 中国石油化工股份有限公司 | 基于地震解释系统的活跃用户挖掘方法及装置 |
CN105812189B (zh) * | 2016-04-26 | 2019-06-28 | 努比亚技术有限公司 | 一种信息处理方法及服务器 |
CN106230916A (zh) * | 2016-07-26 | 2016-12-14 | 深圳市乐唯科技开发有限公司 | 一种防用户界面卡死的数据接收及管理方法 |
CN106339331B (zh) * | 2016-08-31 | 2019-01-25 | 电子科技大学 | 一种基于用户活跃度的数据缓存层置换算法 |
CN106802934A (zh) * | 2016-12-29 | 2017-06-06 | 中国科学院空间应用工程与技术中心 | 一种动态调整空间科学与应用数据文件存储的方法及装置 |
CN108667867B (zh) * | 2017-03-29 | 2021-05-18 | 华为技术有限公司 | 数据存储方法及装置 |
CN107147660A (zh) * | 2017-06-01 | 2017-09-08 | 上海斐讯数据通信技术有限公司 | 一种海量用户高效登录认证方法及系统 |
CN107395679A (zh) * | 2017-06-23 | 2017-11-24 | 上海斐讯数据通信技术有限公司 | 海量认证信息保存方法及系统、海量用户认证方法及系统 |
CN107741962B (zh) * | 2017-09-26 | 2020-09-29 | 平安科技(深圳)有限公司 | 数据缓存方法及服务器 |
CN107703921B (zh) * | 2017-10-27 | 2019-09-24 | 交控科技股份有限公司 | 列车自动监控系统站场切换控制方法 |
CN109395380A (zh) | 2018-09-14 | 2019-03-01 | 北京智明星通科技股份有限公司 | 游戏数据处理方法及系统、服务器和计算机可读存储介质 |
CN109889656B (zh) * | 2018-12-29 | 2021-04-20 | 深圳Tcl新技术有限公司 | 一种数据读取方法、装置、设备及存储介质 |
CN111339000B (zh) * | 2020-02-24 | 2021-07-06 | 深圳震有科技股份有限公司 | Amp系统内存文件传输方法及装置 |
CN112487029B (zh) * | 2020-11-11 | 2022-09-16 | 杭州电魂网络科技股份有限公司 | 渐进式缓存淘汰方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1866895A (zh) * | 2006-06-12 | 2006-11-22 | 北京金山数字娱乐科技有限公司 | 一种在网络游戏中用户登录的方法及系统 |
CN101233758A (zh) * | 2005-07-28 | 2008-07-30 | 汤姆森许可贸易公司 | 使用分级缓存的运动估计及补偿 |
CN101692229A (zh) * | 2009-07-28 | 2010-04-07 | 武汉大学 | 基于数据内容的三维空间数据自适应多级缓存系统 |
CN102223681A (zh) * | 2010-04-19 | 2011-10-19 | 中兴通讯股份有限公司 | 一种物联网系统及其中缓存的控制方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7062515B1 (en) * | 2001-12-28 | 2006-06-13 | Vignette Corporation | System and method for the synchronization of a file in a cache |
CN100530186C (zh) * | 2006-12-26 | 2009-08-19 | 腾讯科技(深圳)有限公司 | 缓存处理方法以及缓存处理系统 |
WO2009030972A1 (en) * | 2007-09-06 | 2009-03-12 | Chin San Sathya Wong | Method and system of generating and presenting search results |
US8281379B2 (en) * | 2008-11-13 | 2012-10-02 | Vasco Data Security, Inc. | Method and system for providing a federated authentication service with gradual expiration of credentials |
CN102270207B (zh) * | 2010-06-02 | 2014-08-13 | 中国科学院计算技术研究所 | 一种面向在线多媒体信息挖掘的数据缓存方法和系统 |
CN102385601B (zh) * | 2010-09-03 | 2015-11-25 | 阿里巴巴集团控股有限公司 | 一种产品信息的推荐方法及系统 |
-
2012
- 2012-04-11 CN CN201210105548.3A patent/CN102663096B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101233758A (zh) * | 2005-07-28 | 2008-07-30 | 汤姆森许可贸易公司 | 使用分级缓存的运动估计及补偿 |
CN1866895A (zh) * | 2006-06-12 | 2006-11-22 | 北京金山数字娱乐科技有限公司 | 一种在网络游戏中用户登录的方法及系统 |
CN101692229A (zh) * | 2009-07-28 | 2010-04-07 | 武汉大学 | 基于数据内容的三维空间数据自适应多级缓存系统 |
CN102223681A (zh) * | 2010-04-19 | 2011-10-19 | 中兴通讯股份有限公司 | 一种物联网系统及其中缓存的控制方法 |
Non-Patent Citations (2)
Title |
---|
《一种高性能网络游戏服务器架构设计》;杨玲;《网络安全技术与应用》;20100415;第2010卷(第4期);全文 * |
《大容量GPRS_HLR系统中内存数据库的数据结构组织模式》;徐书华等;《电讯技术》;20010628;第2001卷(第3期);第25页第4节 * |
Also Published As
Publication number | Publication date |
---|---|
CN102663096A (zh) | 2012-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102663096B (zh) | 一种基于数据缓存技术读取数据的方法 | |
CN103136243B (zh) | 基于云存储的文件系统去重方法及装置 | |
CN106202112B (zh) | 缓存目录刷新方法和装置 | |
CN107302561B (zh) | 一种云存储系统中热点数据副本放置方法 | |
CN103678172A (zh) | 一种本地数据缓存管理方法及装置 | |
CN108540556B (zh) | 一种基于高速缓存的精细化Session集群共享系统及方法 | |
CN104580437A (zh) | 一种云存储客户端及其高效数据访问方法 | |
CN105224255B (zh) | 一种存储文件管理方法及装置 | |
CN101388824B (zh) | 一种机群系统中分片存储模式下文件读取的方法及系统 | |
CN103518364A (zh) | 分布式存储系统的数据更新方法及服务器 | |
Xing et al. | A distributed multi-level model with dynamic replacement for the storage of smart edge computing | |
CN104065568A (zh) | 一种Web服务器集群的路由方法 | |
CN102694828B (zh) | 一种分布式缓存系统数据存取的方法及装置 | |
US11093410B2 (en) | Cache management method, storage system and computer program product | |
CN103530387A (zh) | 一种hdfs针对小文件的改进方法 | |
WO2023050712A1 (zh) | 一种深度学习业务的任务调度方法及相关装置 | |
WO2021244070A1 (zh) | 一种基于b/s架构的页面缓存的方法、装置、设备和介质 | |
CN104395892A (zh) | 在缓存系统的c项的存储缓存器中管理n项的列表的存储的方法 | |
CN102880671A (zh) | 一种面向分布式文件系统的主动重复数据删除方法 | |
CN103944993A (zh) | 百万级用户同时在线移动平台服务器架构 | |
CN103905538A (zh) | 内容中心网络中邻居协作缓存替换方法 | |
CN106528451B (zh) | 针对小文件的二级缓存预取的云存储框架及构建方法 | |
CN103544300B (zh) | 一种云环境下可扩展存储索引结构的实现方法 | |
CN110515726A (zh) | 一种数据库负载均衡方法与装置 | |
CN110147345A (zh) | 一种基于rdma的键值存储系统及其工作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |