一种网络游戏数据库分表的方法技术

技术编号:5548960 阅读:511 留言:0更新日期:2012-04-11 18:40
一种网络游戏数据库分表的方法,该方法包括:将网络游戏数据库设置为由取值范围限定的虚拟圆,在所述虚拟圆上包括至少一个表,其中每个表中的虚拟节点在所述虚拟圆上均匀分布;计算待分表数据的随机数,在所述取值范围内根据所述随机数将所述待分表数据插入虚拟节点中。应用本发明专利技术实施例以后,在表数量变化的情况下,减少需要重建的数据量。

【技术实现步骤摘要】

本专利技术涉及网络
,更具体地,涉及。
技术介绍
网络游戏上线之后,网络游戏系统产生的数据越来越多。为了保证网络游戏系统 高效地读写数据库中的数据,需要对数据库中所存储的数据分表。使用哈希算法将大量数 据均勻分布到多个表中,从而有效地控制单表数据量,提高读写效率。例如假设表总数为N,那么输入值为K的数据应该保存在序号为Hash (K)mod N的 表里。K对N取模,得到K所属表,将K保存在所属表中。按照上述的哈希算法,能够有效地 将网络游戏系统产生的数据均勻分布在多个表里。另外,可以根据负载情况动态地增减表数量,再将增减表中的数据均勻分布到各 个表中,这样数据库系统就拥有平滑扩容能力。将数据库负载与程序逻辑分离,为开发人员 提供高效的可扩展的数据库架构。例如表总数N发生改变,那么通过Hash (K) mod N重新计算发生变化的表中的数 据所属表。即以前存储在X号表的数据,重新计算后保存到了 Y号表。下面举例说明重新计算数据所属表。假设有3个数据样本X,Y,Z,Hash (X) = 1,Hash(Y) =2,Hash(Z) =3。有0,1,2三个表,则可用表数量为3,根据取模规则Hash (K)mod N得到Hash (X) mod 3 = 1 mod 3 = 1 ;Hash (Y) mod 3 = 2 mod 3 = 2 ;Hash(Z)mod 3 = 3 mod 3 = 0。即数据X放在1号表,数据Y放在2号表,数据Z放在0号表。由于0号表失效,可用表数量变为2,再次根据取模规则Hash (K)mod N得到Hash (X) mod 2 = 1 mod 2 = 1 ;Hash (Y) mod 2 = 2 mod 2 = 0 ;Hash (Z) mod 3 = 3 mod 2 = 1。即数据X放在1号表,数据Y放在0号表,数据Z放在1号表。可以看出数据Y和数据Z的位置在表数量N发送变化后改变,因此必须重新导入 数据Y和数据Z才能建立起正确的位置信息。可见,由于表数量发生变化引起数据分表的变化。可以估算出需要重新分表的数据量。假设数据总量DN,当前表总量TN,需重建的数据量RN的最优取值如下在表数量变化为1的情况下,RN = DN*2/TN。在表数量变化为N,N大于1的情况下,RN = DN* (1+N)/TN0由上述计算公式可以得出,表数量变化为1的情况下,当TN为3时,将重建2/3的总数据;当TN为4时,将重建2/4的总数据。虽然重建的数据量随着表数量增加逐渐减小,但在实际应用中表总量不会太大, 因此上述方法需要重建的数据量很大。
技术实现思路
本专利技术实施例提出,在表数量变化的情况下,减 少需要重建的数据量。本专利技术实施例的技术方案如下,该方法包括将网络游戏数据库设置为由取值范围限定的虚拟圆,在所述虚拟圆上包括至少一 个表,其中每个表中的虚拟节点在所述虚拟圆上均勻分布;计算待分表数据的随机数,在所述取值范围内根据所述随机数将所述待分表数据 插入虚拟节点中。在虚拟圆上增加或减少表,所述根据所述随机数将所述待分表数据插入虚拟节点 中后进一步包括,重新计算所述虚拟圆中每个数据的随机数,根据再次计算得到的随机数 将每个数据插入变化后表的虚拟节点中。所述在所述取值范围内根据所述随机数将数据插入虚拟节点中包括,所述取值范 围内,在所述虚拟圆上查找不小于所述随机数最近的虚拟节点,将所述待分表数据插入所 述虚拟节点中。所述取值范围是20到232。所述每个表所包括的虚拟节点数目相同。所述每个表包括100至200个虚拟节点。从上述技术方案中可以看出,在本专利技术实施例中,将网络游戏数据库设置为由取 值范围限定的虚拟圆,在所述虚拟圆上包括至少一个表,其中每个表中的虚拟节点在所述 虚拟圆上均勻分布,确定每个表的虚拟节点的分布。计算待分表数据的随机数,在所述取值 范围内根据所述随机数将所述待分表数据插入虚拟节点中。根据待分表数据的随机数,确 定其位置进一步确定其所属表。由于,每个表中的虚拟节点都是均勻分布在虚拟圆中,经过 试验在表数量变化的情况下,减少需要重新分表的数据量。附图说明图1为本专利技术实施例网络游戏数据库分表的方法流程示意图;图2为本专利技术实施例在虚拟圆上分表示意图;图3为本专利技术实施例在虚拟圆上插入待分表数据示意图;图4为本专利技术实施例在虚拟圆上新增表示意图。具体实施例方式为使本专利技术的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体 实施例对本专利技术再作进一步详细的说明。在本专利技术实施例中,通过将网络游戏数据库设置为虚拟圆,在虚拟圆上包括至少 一个表,每个表中的虚拟节点在该虚拟圆中均勻分布,根据待分表数据的随机数将待分表 数据插入虚拟节点中。由于虚拟节点是均勻分布,经过试验在表数量变化的情况下,需要重 新分表的数据减少。参见附图1是网络游戏数据库分表的方法流程示意图,具体包括以下步骤步骤101、在虚拟圆中划分表。在网络游戏数据库中,将该数据库设置为取值范围为20到232的虚拟圆。在该虚 拟圆上包括至少一个表,其中每个表中包括多个虚拟节点,每个表中所包含的虚拟节点数 目是相同的。一般情况下,经过试验得出每个表包括100至200个虚拟节点时,在表数量发 生变化需要计算的数据量较小。其中,每个表中的虚拟节点是均勻分布在虚拟圆上,即每个 虚拟节点之间的距离近似相等。参见附图2在虚拟圆中,有黑色和白色两个表,两个表中的 虚拟节点均勻分布在该虚拟圆上。步骤102、插入待分表数据。在网络游戏系统产生的数据需要插入网络数据库对应的虚拟圆中,则需要计算待 分表数据的随机数。在虚拟圆中查找不小于该随机数最近的虚拟节点,将待分表数据插入 该虚拟节点。该虚拟节点所属表即该待分表数据所属表。待分表数据的随机数可以通过随 机函数等方式获得。参见附图3,将待分表数据得到的随机数X插入虚拟圆中,Al是不小于X最近的虚 拟节点,则将待分表数据X插入Al中。由于Al属于表A的虚拟节点,待分表数据X属于表 A0步骤103、将虚拟圆上的所有数据重新插入变化后表中。在虚拟圆上增加或减少表,则需要重新计算虚拟圆中每个数据的随机数,然后根 据再次计算得到的随机数将每个数据插入变化后表的虚拟节点中。将每个数据插入变化后 表的虚拟节点的过程与步骤102中插入待分表数据相同。参见附图4是在虚拟圆上新增表示意图,原虚拟圆中共有两个表,表A和表B。在 虚拟圆中新增表C,那么需要重新计算虚拟圆中每个数据的随机数,再根据该随机数寻找不 小于该随机数最近的虚拟节点。待分表数据原属于表A,该待分表数据重新计算得到的随机 数X,不小于等于X最近的虚拟节点Cl属于表C,则该待分表数据属于表C。由于虚拟节点是均勻分布在虚拟圆中,因此在表数量变化的情况下,可以减少需 要重新分表的数据量。例如假设虚拟圆中共有10个表,每个表有200个虚拟节点。有10000个待分表数据,计算待分表数据对应的数据键值式为1+rand (η) *pow (2, 32), 1 ^ η ^ 10000。其中randOi)为随机函数,pow为幂次方函数。在初始条件下,待分表数据分布情况如表1所示表 权利要求1.,其特征在于,该方法包括将网络游戏数据库设置为由取值范围限定的虚拟圆,在所述虚拟圆上包括至少一本文档来自技高网
...

【技术保护点】
一种网络游戏数据库分表的方法,其特征在于,该方法包括:将网络游戏数据库设置为由取值范围限定的虚拟圆,在所述虚拟圆上包括至少一个表,其中每个表中的虚拟节点在所述虚拟圆上均匀分布;计算待分表数据的随机数,在所述取值范围内根据所述随机数将所述待分表数据插入虚拟节点中。

【技术特征摘要】

【专利技术属性】
技术研发人员:杨纮宇
申请(专利权)人:北京像素软件科技股份有限公司
类型:发明
国别省市:11[]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1