• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 10
    • 下载费用:30 金币  

    重庆时时彩怎么样玩: 分布式全球唯一ID生成方法.pdf

    关 键 词:
    分布式 全球 唯一 ID 生成 方法
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201310684624.5

    申请日:

    2013.12.13

    公开号:

    CN103838604A

    公开日:

    2014.06.04

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 授权|||著录事项变更IPC(主分类):G06F 9/445变更事项:申请人变更前:广东天拓资讯科技有限公司变更后:广东星辉天拓互动娱乐有限公司变更事项:地址变更前:510000 广东省广州市天河区软件园高唐新建区广州互联网产业园1号楼A401、B401房变更后:510000 广东省广州市天河区软件园高唐新建区广州互联网产业园1号楼A301、B301、C301房|||实质审查的生效IPC(主分类):G06F 9/445申请日:20131213|||公开
    IPC分类号: G06F9/445; H04L29/06 主分类号: G06F9/445
    申请人: 广东天拓资讯科技有限公司
    发明人: 吴开
    地址: 510000 广东省广州市天河区软件园高唐新建区广州互联网产业园1号楼A401、B401房
    优先权:
    专利代理机构: 云南派特律师事务所 53110 代理人: 岳亚苏
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201310684624.5

    授权公告号:

    |||||||||

    法律状态公告日:

    2017.01.11|||2014.07.30|||2014.07.02|||2014.06.04

    法律状态类型:

    授权|||著录事项变更|||实质审查的生效|||公开

    摘要

    本发明提出了一种分布式全球唯一ID生成方法,包括如下步骤:S1:设定为逻辑进程编码的进程ID区间的位数和个体ID区间的位数;S2:设定游戏出生时间;S3:启动服务器,计算个体ID区间的可分配初始值;S4:接收ID分配指令,生成分布式全球唯一ID;S5:当关闭服务器后,服务器重新启动时执行步骤S3。本发明的分布式全球唯一ID生成方法,能有效应对进程意外崩溃的问题、避免了对计算机IO所造成巨大压力的唯一ID生成算法,并且生成的ID便于保存和传输,满足游戏服务器的实际使用需求。

    权利要求书

    权利要求书
    1.  分布式全球唯一ID生成方法,其特征在于:包括如下步骤:
    S1:设定为逻辑进程编码的进程ID区间的位数,并为每个逻辑进程编码生成一个进程ID区间的值;设定个体ID区间的位数,为每个单位时间段按顺序划分个体ID区间的可分配值;所述分布式全球唯一ID由进程ID区间和个体ID区间拼接而成;每个逻辑进程的进程ID区间的值对应的个体ID区间,为该逻辑进程可分配ID的区间;
    S2:设定游戏出生时间;
    S3:启动服务器,获取启动当时的时间,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值,并为每个逻辑进程分别缓存可分配初始值减1为已分配值;
    S4:接收ID分配指令,确定对应的逻辑进程,对该逻辑进程的已分配值进行加1,作为待分配个体ID区间的值;根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值;判断待分配个体ID区间的值是否小于个体ID区间的可分配最大值,若是,则保存该待分配个体ID区间的值缓存为新的已分配值,并把该待分配个体ID区间的值与其对应的逻辑进程的进程ID区间的值拼接成新分配的分布式全球唯一ID,分布式全球唯一ID生成完毕,返回本步骤开始,等待下一个ID分配指令;否则终止进程;
    S5:当关闭服务器后,服务器重新启动时执行步骤S3。

    2.  根据权利要求1所述的分布式全球唯一ID生成方法,其特征在于:所述步骤S1中,为每个时间段按顺序划分个体ID区间的可分配值的步骤,具体为:设定在一个单位时间段内的每个逻辑进程可分配的ID数量的最大值,以该最大值为周期划分个体ID区间的取值范围,每个取值范围按顺序对应一个单位时间段;
    所述步骤S3中,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值的步骤,具体为:根据启动当时时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时 间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最小值为所述可分配初始值;
    所述步骤S4中,根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值的步骤,具体为:根据接收ID分配指令的时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最大值为所述个体ID区间的可分配最大值。

    3.  根据权利要求1所述的分布式全球唯一ID生成方法,其特征在于:所述步骤S1中,进程ID区间的位数根据游戏所需逻辑进程数量而确定,逻辑进程的数量减1后以二进制数表示,该二进制数的位数为进程ID区间的最少所需位数;
    个体ID区间的位数由一个单位时间段内的每个逻辑进程可分配的ID数量的最大值预计值与游戏寿命预计值而确定,该最大值预计值与游戏寿命预计值相乘后减1以二进制数表示,该二进制数的位数为个体ID区间的最少所需位数。

    4.  根据权利要求1所述的分布式全球唯一ID生成方法,其特征在于:步骤S1中,所述进程ID区间设定为16位,个体ID区间设定为48位。

    5.  根据权利要求2-4任意一项所述的分布式全球唯一ID生成方法,其特征在于:所述单位时间段为游戏最小时间单位。

    6.  根据权利要求1所述的分布式全球唯一ID生成方法,其特征在于:所述步骤S3中还包括在启动服务器时,检测服务器所获取的当前时间是否合法的步骤。

    说明书

    说明书分布式全球唯一ID生成方法
    技术领域
    本发明涉及游戏服务器处理技术,具体涉及分布式全球唯一ID的生成方法。
    背景技术
    游戏服务器为了支撑游戏的正常运行,对游戏中每个人物、物品甚至每项变量都需要设置一个唯一的ID,以保证游戏的正常运行。现有的唯一ID生成方法一般有两种形式,UUID生成算法和累加生成法。UUID生成算法虽然技术成熟、效果好,但其长度太长,不利于保存和传输,难以在游戏服务器中应用;而累加生成法在生成下一个ID前,必须记录当前生成的最大ID,如果当前生成的最大ID是记录在内存上,当出现异常情况时将丢失记录;如果当前生成的最大ID记录在硬盘中的话,由于ID生成是一个非常频繁的操作,将会对计算机的硬盘IO造成压力。
    发明内容
    针对上述现有技术不足,本发明要解决的技术问题是提供一种能有效应对进程意外崩溃的问题、避免了对计算机IO所造成巨大压力的唯一ID生成算法,并且生成的ID便于保存和传输,满足游戏服务器的实际使用需求。
    为解决上述技术问题,本发明采用的技术方案为,分布式全球唯一ID生成方法,其特征在于:包括如下步骤:
    S1:设定为逻辑进程编码的进程ID区间的位数,并为每个逻辑进程编码生成一个进程ID区间的值;设定个体ID区间的位数,为每个单位时间段按顺序划分个体ID区间的可分配值;所述分布式全球唯一ID由进程ID区间和个体ID区间拼接而成;每个逻辑进程的进程ID区间的值对应的个体ID区间,为该逻辑进程可分配ID的区间;
    S2:设定游戏出生时间;
    S3:启动服务器,获取启动当时的时间,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值,并为每个逻辑进程分别缓存可分配初始值减1为已分配值;
    S4:接收ID分配指令,确定对应的逻辑进程,对该逻辑进程的已分配值进行加1,作为待分配个体ID区间的值;根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值;判断待分配个体ID区间的值是否小于个体ID区间的可分配最大值,若是,则保存该待分配个体ID区间的值缓存为新的已分配值,并把该待分配个体ID区间的值与其对应的逻辑进程的进程ID区间的值拼接成新分配的分布式全球唯一ID,分布式全球唯一ID生成完毕,返回本步骤开始,等待下一个ID分配指令;否则终止进程;
    S5:当关闭服务器后,服务器重新启动时执行步骤S3。
    这样的方案使,ID分配的初始值不依赖原始的累加,而是根据时间计算出,即使出现异常情况丢失记录,新的初始值也必然不会与已生成的ID值重复,保证ID的唯一性;同时也采用局部累加的方式对ID号进行新分配,使得ID的位数可以大大缩短也能满足实际需要。
    进一步的技术方案为,所述步骤S1中,为每个时间段按顺序划分个体ID区间的可分配值的步骤,具体为:设定在一个单位时间段内的每个逻辑进程可分配的ID数量的最大值,以该最大值为周期划分个体ID区间的取值范围,每个取值范围按顺序对应一个单位时间段;
    所述步骤S3中,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值的步骤,具体为:根据启动当时时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最小值为所述可分配初始值;
    所述步骤S4中,根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值的步骤,具体为:根据接收ID分配指令的时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最大值为所述个体ID区间的可分配最大值。
    进一步的技术方案为,所述步骤S1中,进程ID区间的位数根据游戏所需逻辑进程数量而确定,逻辑进程的数量减1后以二进制数表示,该二进制数的位数为进程ID区间的最少所需位数;
    个体ID区间的位数由一个单位时间段内的每个逻辑进程可分配的ID数量的最大值预计值与游戏寿命预计值而确定,该最大值预计值与游戏寿命预计值相乘后减1以二进制数表示,该二进制数的位数为个体ID区间的最少所需位数。
    优选地,步骤S1中,所述进程ID区间设定为16位,个体ID区间设定为48位。
    更优地,所述单位时间段为游戏最小时间单位。
    更优地,所述步骤S3中还包括在启动服务器时,检测服务器所获取的当前时间是否合法的步骤。
    本发明的分布式全球唯一ID生成方法,能有效应对进程意外崩溃的问题、避免了对计算机IO所造成巨大压力的唯一ID生成算法,并且生成的ID便于保存和传输,满足游戏服务器的实际使用需求。
    附图说明
    图1是本发明分布式全球唯一ID生成方法所生成的ID组成示意图。
    图2是本发明分布式全球唯一ID生成方法的流程图。
    具体实施方式
    下面结合附图和具体实施例对本发明作进一步的详细描述。
    本发明的分布式全球唯一ID生成方法,如图2所示,包括如下步骤:
    S1:设定为逻辑进程编码的进程ID区间的位数和个体ID区间的位数,所述分布式全球唯一ID由进程ID区间和个体ID区间拼接而成(如图1所示)。
    进程ID区间的位数可以根据游戏所需逻辑进程数量而确定,逻辑进程的数量减1后以二进制数表示,该二进制数的位数为进程ID区间的最少所需位数;例如,如果一个游戏只有3个逻辑进程,3减1后以二进制数表示的值为“10”,位数为2位,即最少需要2位才能完全表示所有3个逻辑进程;本实施例中, 进程ID区间的位数为16位,可以表示65536个逻辑进程,一般大型网络游戏有都不会超过几万个逻辑进程,16位的进程ID区间可以完全满足使用需要,并且符合计算机存储习惯,16位对应2个字节。对规模较小的游戏可以减少进程ID区间的位数。
    个体ID区间的位数由一个单位时间段内的每个逻辑进程可分配的ID数量的最大值预计值与游戏寿命预计值而确定,该最大值预计值与游戏寿命预计值相乘后减1以二进制数表示,该二进制数的位数为个体ID区间的最少所需位数。例如,预计一个单位时间段内,一个逻辑进程最多需要分配4个ID,游戏的寿命为4个单位时间段,则总共最大需要16个ID,则至少需要4位才能满足全部表示该16个ID的需要。本实施例中,个体ID区间设为48位,这样每个逻辑进程可分配的ID数目是1298908800,按照游戏寿命为5年(实际实践中,一般网络游戏不超过5年寿命),则每秒钟(假设单位时间段1秒)游戏逻辑进程可分配的ID的个数是1009235个,完全能满足使用需求。
    为每个逻辑进程编码生成一个进程ID区间的值,例如为游戏中的某个武器生成相关逻辑进程生成进程ID区间的值为“0000000000000001”;每个逻辑进程的进程ID区间的值对应的个体ID区间,为该逻辑进程可分配ID的区间,即对于进程ID区间值为“0000000000000001”的该项逻辑进程,由该项逻辑进程所分配出的ID必然表示为“0000000000000001+48位个体ID区间值”的形式,而每个逻辑进程都有48位的空间去对自身的ID进行分配。
    为每个单位时间段按顺序划分个体ID区间的可分配值,具体为:设定在一个单位时间段内的每个逻辑进程可分配的ID数量的最大值,以该最大值为周期划分个体ID区间的取值范围,每个取值范围按顺序对应一个单位时间段;如上文所述,本实施例中,每秒钟(假设单位时间段1秒)游戏逻辑进程可分配的ID的个数是1009235个,即48位的个体ID区间中,每个ID对应一个个体ID区间中的取值,即第1个至第1298908800个;而每1秒都与其中一部分取值范围对应,例如第1秒可分配的为第1个至第1009235个,第2秒为第1009236至第2018470个,依次类推。
    S2:设定游戏出生时间。
    S3:启动服务器,获取启动当时的时间,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值,具体地:根据启动当时时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最小值为所述可分配初始值。即例如服务器启动时,若服务器启动时的时间为游戏出生时间后的第60秒,则个体ID区间为第60秒对应取值范围的最小值(本实施例中即为1009235*59+1=59544866)为个体ID区间的可分配初始值。并为每个逻辑进程分别缓存可分配初始值减1为已分配值。
    S4:生成唯一ID,判断合法性,根据合法性正式生成唯一ID或终止进程。
    具体地,接收ID分配指令,确定对应的逻辑进程,对该逻辑进程的已分配值进行加1,作为待分配个体ID区间的值;根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值;具体地:根据接收ID分配指令的时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最大值为所述个体ID区间的可分配最大值。即判断接收到ID分配指令的时间所对应的个体ID区间的取值范围,例如第62秒接收到ID分配指令,第62秒对应的个体ID区间取值范围为61563336至62572570,则此时个体ID区间的可分配最大值为62572570。而待分配个体ID区间的值则由从服务器启动开始至收到ID分配指令时所分配的ID数累计而定,例如对于进程ID区间值为“0000000000000001”的该项逻辑进程,从服务器启动(第60秒起)到接收到此ID分配指令(第62秒)的时间内,从59544866起开始生成ID,每收到一个ID分配指令就对生成的ID值加1进行新的分配,例如若本实施例中上文所述第62秒收到的ID分配指令是第50个指令,则此时进程ID区间值为“0000000000000001”的该项逻辑进程的此个生成ID的个体ID区间的值应为“59544866-1+50=59544915”,即本项唯一ID的值应为“0000000000000001(前16位为进程ID区间)59544915(后48位为个体ID区间,应为二进制数但为表示方便以十进制表示)”的形式。为保证唯一ID生成的正确性,还包括如下合法性判断步骤:
    判断待分配个体ID区间的值(59544915)是否小于个体ID区间的可分配最大值(62572570),若是,则保存该待分配个体ID区间的值(59544915)缓存为新的已分配值(即下一次本逻辑进程分配ID时把59544915+1的值进行分配),并把该待分配个体ID区间的值与其对应的逻辑进程的进程ID区间的值拼接成新分配的分布式全球唯一ID(即上文所述的“000000000000000159544915”形式),分布式全球唯一ID生成完毕,返回本步骤S4开始,等待下一个ID分配指令;因为每秒钟一个逻辑进程可分配的ID的个数是1009235个,即实际分配的ID数量只能少不能多,因此只要待分配个体ID区间的值小于个体ID区间的可分配最大值,即表明现在分配的ID还没动用“为未来预备”的值段,不会产生冲突,破坏ID的唯一性。但如果待分配个体ID区间的值大于个体ID区间的可分配最大值,则表明程序运行中必然出现了错误,使本该逐一增加的待分配个体ID区间的值被循环累加了很多次,使得现在生成分配的ID已经占用了“为未来预备”的ID值,有可能破坏ID的唯一性,需要终止进程检查错误。
    S5:当关闭服务器后,服务器重新启动时执行步骤S3。无论服务器是正常关闭还是不正常关闭,当服务器重新启动时,都重新计算和设置个体ID区间的可分配初始值。例如某一次服务器开启的时间为第60秒至第65秒(此时间仅为举例说明需要,实际上服务器在非维护需要的情况下一般都不会关闭),这6秒时间内一个逻辑进程最多可把1009235*6=6055410个值作为ID进行分配,但如果该段时间只使用了其中4985764个值,则在服务器关闭时,缓存的数据清除,剩下没有用于的作为ID的值将不会使用。而服务器再次启动时(例如第75秒再次启动),则由步骤S3中的方法确定起始的ID值,每个逻辑进程的个体ID区间的初始值都一样,即对于进程ID区间值为“0000000000000001”的该项逻辑进程与对于进程ID区间值为“0000000000000010”的该项逻辑进程,其分配的第一个唯一ID的个体ID区间的值均为59544866(以上文第60秒启动服务器为例),而后根据每个逻辑进程各自对应的ID分配指令的数量,每个逻辑进程的已分配值均有所不同。
    本实施例中单位时间段为1秒,也可以人为规定不同的时间值作为单位时间段,例如10秒或0.1秒等,但最优地,单位时间段可选用游戏最小时间单位。游戏最小时间单位是指游戏本身的时间精度,例如如果游戏的逻辑进程最小以 秒为单位进行逻辑判断或响应操作的,则游戏最小时间单位为1秒,所述游戏最小时间单位由游戏本身决定。以游戏最小时间单位作为本发明的单位时间段,既保证了本发明的方案运算的精度能满足游戏需要,又不会因精度太高而浪费机器性能。
    需要注意的是,实施本发明的必要条件之一,是保证时间的单调递增性。例如如果在前的进程运行中已把第70秒的唯一ID都生成分配了,但若时间不是单调递增,当前时间突然变回第62秒,则再按照第62对ID进程生成就会造成重复,不能保证是唯一ID。具体的实现方法可以是服务器的每个时间判断都从外界的时间服务器或互联网读取唯一正确的时间信息,保证服务器每个读取的时间都与人类真实感觉的时间一致,保证单调递增性;也可以是通过服务器的内部时间算法,保证时间处于单调递增的状态。处理服务器运行过程中的时间单调递增性,还有服务器关闭后启动也需保证启动时间对于上一次关闭时的时间是递增的,对于都是直接读取外界现实时间的,基本可以保证时间递增,若是服务器自身进行时间演算的,则S3中还包括在启动服务器时,检测服务器所获取的当前时间是否合法的步骤。具体的保证时间单调递增的方法不是本发明的考虑范畴,只需保证服务器的时间是单调递增即可。
    以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的?;し段е?。

    关于本文
    本文标题:分布式全球唯一ID生成方法.pdf
    链接地址://www.4mum.com.cn/p-6147449.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 闲来麻将app 一头一尾中特今天是什么尾数 万客彩票群 四川快乐12套选玩法 36选7怎么看有没有中奖 福彩快三幸运和值规律 排列5开奖结果查询开奖结果查询 四川快乐12直选三遗漏 广东好彩1一彩乐乐 山西11选5专家推荐号 3d预测组三规律 任选9场奖金计算方式 在东莞开滴滴能赚钱吗 山西快乐10分平台 江西多乐彩形态走势图 河南十一选五加奖