一种可应用于分布式系统的唯一标识符生成方法及装置与流程

文档序号:15636689发布日期:2018-10-12 21:33阅读:188来源:国知局

本发明涉及互联网领域,尤其涉及一种可应用于分布式系统的唯一标识符生成方法及装置。



背景技术:

如同身份证号码对于公民,在软件开发中也需要为每条数据生成一条唯一标识符,由于这个唯一标识符不重复,因此能够利用该唯一标识符快速进行数据定位,对数据的查找、维护、删除等具有重要的意义。

传统的标识生成方法采用随机数算法、时间戳算法或者两者结合的方式,比如公开号为cn101533414a的发明专利公开了一种数据库记录唯一标识符生成方法,利用时间部分字符串和随机部分字符串拼接生成唯一标识符;虽然随机数算法生重复标识符的概率很低,但是也有可能重复;时间戳算法同样有可能生成重复标识符,如在2018年10月10号10点10分10秒生成的唯一数据是20181010101010,理论来讲2018年10月10号10点10分10秒在同一系统,是不可能重复的,但是如果在成了20181010101010唯一标识符后,系统时间过了1分钟,到了10点11分10秒,之后又人为的修改了系统时间,把系统时间修改为10点10分10秒,则生成的标识还是20181010101010,即修改时间也会造成标识符重复。综上所述,这些算法理论上存在重复的可能性,尽管可能性不足万分之一,但是系统架构上要求生成的标识符绝对不能重复,所以不能采用类似随机数算法,时间戳算法。

传统的标识符在数据库中生成,但由于系统建设通常会采用不同的数据库,如mysql、oracle、db2等,且不同的数据库生成唯一标识符的方式不一样,因此如果在数据库服务器生成标识就必须采用多种生成方式,不利于系统统一管理、版本升级、后期维护等。



技术实现要素:

本发明的目的在于提供一种可应用于分布式系统的唯一标识符生成方法及装置,用于解决由于在不同的数据库中生成的唯一标识符不同,因而不利于系统统一管理、版本升级、后期维护等问题,还用于解决利用传统的标识符生成方法生成唯一标识符时标识符出现重复的问题。

为了实现上述目的,本发明采用以下技术方案:

一种可应用于分布式系统的唯一标识符生成方法,包括以下步骤:

步骤1:应用服务器从数据库服务器获取服务器标识;

步骤2:应用服务器根据所述服务器标识生成服务器字符串;

步骤3:应用服务器从常驻内存模块获取顺序标识;

步骤4:应用服务器根据所述顺序标识生成顺序字符串;

步骤5:应用服务器将所述服务器字符串和所述顺序字符串拼接成唯一标识符,所述服务器字符串位于所述唯一标识符的开头位置,所述顺序字符串位于所述唯一标识符的结尾位置,所述唯一标识符中,利用数字“9”将所述服务器字符串和所述顺序字符串隔开。

步骤1中所述应用服务器从数据库服务器获取服务器标识的方法为:应用服务器首次启动或者新的应用服务器首次接入系统架构时,从系统的数据库服务器获取服务器标识,其中,数据库服务器利用java语言生成服务器标识。

步骤2中所述应用服务器根据所述服务器标识生成服务器字符串的方法为:应用服务器将所述服务器标识转换为九进制服务器标识,并根据所述九进制服务器标识生成服务器字符串。

步骤3中所述应用服务器从常驻内存模块获取顺序标识的方法为:定义所述应用服务器第n次生成的标识数字为n,数字n即为顺序标识。

步骤4中所述应用服务器根据所述顺序标识生成顺序字符串的方法为:应用服务器将所述顺序标识转换为九进制顺序标识,并根据所述九进制顺序标识生成顺序字符串。

所述应用服务器内集成有多线程加锁机制。

一种可应用于分布式系统的唯一标识符生成装置,包括数据库服务器、多个应用服务器、十进制-九进制转换模块、服务器字符串生成模块、计数模块、常驻内存模块、顺序字符串生成模块和字符串拼接模块;

所述数据库服务器和多个应用服务器连接构成系统架构;

所述十进制-九进制转换模块,集成于应用服务器中,用于将十进制数字转换为九进制数字;

所述服务器字符串生成模块,集成于应用服务器中,与所述十进制-九进制转换模块连接,用于根据所述十进制-九进制转换模块转换的九进制数字生成服务器字符串;

所述计数模块,集成于应用服务器中,与所述十进制-九进制转换模块和常驻内存模块连接,用于记录应用服务器第n次生成的顺序标识n,并将顺序标识n传输给所述十进制-九进制转换模块和常驻内存模块;

所述常驻内存模块,集成于应用服务器中,与所述计数模块连接,用于储存所述计数模块传输的顺序标识n;

所述顺序字符串生成模块,集成于应用服务器中,与所述十进制-九进制转换模块连接,用于将经过所述十进制-九进制转换模块转换的顺序标识n生成顺序字符串;

所述字符串拼接模块,集成于应用服务器中,与所述服务器字符串生成模块和所述顺序字符串生成模块连接,用于将所述服务器字符串生成模块生成的服务器字符串、所述顺序字符串生成模块生成的顺序字符串、数字“9”拼接为唯一标识符,所述服务器字符串位于所述唯一标识符的开头位置,所述顺序字符串位于所述唯一标识符的结尾位置,所述唯一标识符中,利用数字“9”将所述服务器字符串和所述顺序字符串隔开。

所述数据库服务器可采用多个不同种类的数据库。

本发明的有益效果:

1、可应用于采用不同种类数据库服务器的分布式系统:数据库服务器利用java语言生成服务器标识,java语言具备高扩展性,在分布式系统中应用时不仅便于后期维护,还易于扩展。

2、生成的唯一标识符具备绝对唯一性:为了保证所述唯一标识符绝对唯一,应用服务器首次启动或者新的应用服务器首次接入系统架构(与数据库服务器连接)时,从系统的数据库服务器获取服务器标识,所述服务器标识在分布式系统的所有应用服务器中具备唯一性,即在所述应用服务器中生成的服务器字符串具备唯一性;在所述应用服务器内存中,常驻内存模块采用多线程加锁机制,确保了所述应用服务器生成的顺序标识字符串具备唯一性。

3、生成的唯一标识符具备高可读性:应用服务器将所述服务器字符串和所述顺序字符串拼接成唯一标识符,所述服务器字符串位于所述唯一标识符的开头位置,所述顺序字符串位于所述唯一标识符的结尾位置,所述唯一标识符中,利用数字“9”将所述服务器字符串和所述顺序字符串隔开;利用数字“9”作为分隔标识,能够保证人工观察唯一标识符的时候具备较高的可读性和分辨性。

4、高性能、高效率:本发明仅在应用服务器第一次启动或者新的应用服务器接入系统架构(与数据库服务器连接)时,从系统的数据库服务器获取服务器标识,后续生成的顺序标识均是在应用服务器本地完成,不需要数据库服务器进行调度。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明的方法流程图;

图2为本发明的结构示意图。

具体实施方式

下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示:本发明所述的一种可应用于分布式系统的唯一标识符生成方法,包括以下步骤:

步骤1:应用服务器从数据库服务器获取服务器标识;具体方法为:应用服务器首次启动或者新的应用服务器首次接入系统架构(与数据库服务器连接)时,从系统的数据库服务器获取服务器标识,数据库服务器对所述服务器标识进行记录,当所述应用服务器退出系统(与数据库服务器断开连接)或者死机等不能工作的时候,数据库服务器删除所述服务器标识,在所述应用服务器工作周期中,即从启动所述应用服务器到关闭所述应用服务器这个过程,仅做1次服务器标识获取操作,大幅的提高了标识符生成的效率。

其中,数据库服务器利用java语言生成服务器标识;因为系统建设通常会采用不同种类的数据库服务器,如mysql、oracle、db2等,由于不同的数据库服务器生成服务器标识的方式不一样,因此不利于系统统一管理,版本升级,以及后期维护;而采用可跨平台的java语言来描述生成服务器标示的算法,java语言具备高扩展性,在分布式系统中应用时不仅便于后期维护,还易于扩展。

步骤2:应用服务器根据所述服务器标识生成服务器字符串;具体方法为:应用服务器将所述服务器标识转换为九进制服务器标识,并根据所述九进制服务器标识生成服务器字符串。

步骤3:应用服务器从常驻内存模块获取顺序标识;具体方法为:在应用服务器内存里,保留一个常驻内存模块,进行全局共享,记录应用服务器当前已经生成的标识数字,当下次获取标识时,则对此标识数字加一,即所述应用服务器第n次生成的标识数字为n,数字n即为顺序标识。

由于系统是分布式系统,因此存在多个线程同时访问所述常住内存模块的情况,为了保证多个线程同时访问常住内存模块时,同一时间只有一个线程对常住内存模块进行访问,以获取不重复的唯一顺序标识,所述应用服务器内还集成有多线程加锁机制。

步骤4:应用服务器根据所述顺序标识生成顺序字符串;具体方法为:应用服务器将所述顺序标识转换为九进制顺序标识,并根据所述九进制顺序标识生成顺序字符串。

步骤5:应用服务器将所述服务器字符串和所述顺序字符串拼接成唯一标识符,所述服务器字符串位于所述唯一标识符的开头位置,所述顺序字符串位于所述唯一标识符的结尾位置,所述唯一标识符中,利用数字“9”将所述服务器字符串和所述顺序字符串隔开;利用数字“9”作为分隔标识,能够保证人工观察唯一标识符的时候具备较好的可读性和分辨性。

如图2所示:本发明所述的一种可应用于分布式系统的唯一标识符生成装置,包括数据库服务器、多个应用服务器(图2中使用一个应用服务器代表)、十进制-九进制转换模块、服务器字符串生成模块、计数模块、常驻内存模块、顺序字符串生成模块和字符串拼接模块;

所述数据库服务器和多个应用服务器连接构成系统架构;

所述十进制-九进制转换模块,集成于应用服务器中,用于将十进制数字转换为九进制数字;

所述服务器字符串生成模块,集成于应用服务器中,与所述十进制-九进制转换模块连接,用于根据所述十进制-九进制转换模块转换的九进制数字生成服务器字符串;

所述计数模块,集成于应用服务器中,与所述十进制-九进制转换模块和常驻内存模块连接,用于记录应用服务器第n次生成的顺序标识n,并将顺序标识n传输给所述十进制-九进制转换模块和常驻内存模块;

所述常驻内存模块,集成于应用服务器中,与所述计数模块连接,用于储存所述计数模块传输的顺序标识n;

所述顺序字符串生成模块,集成于应用服务器中,与所述十进制-九进制转换模块连接,用于将经过所述十进制-九进制转换模块转换的顺序标识n生成顺序字符串;

所述字符串拼接模块,集成于应用服务器中,与所述服务器字符串生成模块和所述顺序字符串生成模块连接,用于将所述服务器字符串生成模块生成的服务器字符串、所述顺序字符串生成模块生成的顺序字符串、数字“9”拼接为唯一标识符,所述服务器字符串位于所述唯一标识符的开头位置,所述顺序字符串位于所述唯一标识符的结尾位置,所述唯一标识符中,利用数字“9”将所述服务器字符串和所述顺序字符串隔开。

所述数据库服务器可采用多个不同种类的数据库,如mysql、oracle、db2等;一个应用服务器可连接多个数据库服务器,一个数据库服务器也可连接多个应用服务器,即应用服务器和数据库服务器形成分布式系统;分布式系统具备以下优点:

伸缩性:分布式系统可以根据数据流量在系统中添加或者减少数据服务器的数量;

稳定性:当分布式系统节点中某台服务器不能工作时候,其他服务器能及时接管不能运行服务器的工作;

高效性:由于系统是分布式系统,多台服务器网络互连,一个任务能同时分解传递给多台服务器执行。

本发明所述的一种可应用于分布式系统的唯一标识符生成方法及装置的有益效果为:

1、可应用于采用不同种类数据库服务器的分布式系统:数据库服务器利用java语言生成服务器标识,java语言具备高扩展性,在分布式系统中应用时不仅便于后期维护,还易于扩展。

2、生成的唯一标识符具备绝对唯一性:为了保证所述唯一标识符绝对唯一,应用服务器首次启动或者新的应用服务器首次接入系统架构(与数据库服务器连接)时,从系统的数据库服务器获取服务器标识,所述服务器标识在分布式系统的所有应用服务器中具备唯一性,即在所述应用服务器中生成的服务器字符串具备唯一性;在所述应用服务器内存中,常驻内存模块采用多线程加锁机制,确保了所述应用服务器生成的顺序标识字符串具备唯一性。

3、生成的唯一标识符具备高可读性:应用服务器将所述服务器字符串和所述顺序字符串拼接成唯一标识符,所述服务器字符串位于所述唯一标识符的开头位置,所述顺序字符串位于所述唯一标识符的结尾位置,所述唯一标识符中,利用数字“9”将所述服务器字符串和所述顺序字符串隔开;利用数字“9”作为分隔标识,能够保证人工观察唯一标识符的时候具备较高的可读性和分辨性。

4、高性能、高效率:本发明仅在应用服务器第一次启动或者新的应用服务器接入系统架构(与数据库服务器连接)时,从系统的数据库服务器获取服务器标识,后续生成的顺序标识均是在应用服务器本地完成,不需要数据库服务器进行调度。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1