基于优化后的雪花算法在工业大数据中的应用方法及系统与流程

文档序号:22928059发布日期:2020-11-13 16:24阅读:228来源:国知局
基于优化后的雪花算法在工业大数据中的应用方法及系统与流程

本发明涉及计算机技术领域,具体地,涉及一种基于优化后的雪花算法在工业大数据中的应用方法及系统,更为具体地,涉及一种基于优化后的雪花算法在工业大数据领域中应用的方法。



背景技术:

传统的id生成策略一般有数据库中的自增属性生成,自研单点或集群服务开发批量id生成功能,uuid/guid,基于redis来实现生成id。这几种方式有的是需要编码和配置的工作量巨大,有的无法保证生成的id的趋势递增,还有的就是生成的id过长,性能不高,且难以扩展。即使是采用原生的雪花算法,也不能解决在工业领域分布式场景下的id长度要求和全局的唯一性。

专利文献cn110674187a(申请号:201910904490.0)公开了一种全局唯一序列号的生成方法,包括:根据全局唯一序列号的应用场景,确定所述全局唯一序列号的类型,其中,所述类型包括时间顺序上递增且对系统吞吐量没有要求类型、时间顺序上递增且对系统吞吐量有要求类型及应用于oracle数据库类型;根据全局唯一序列号的类型,为所述全局唯一序列号设置相应的标识并将所述类型与所述标识相关联;根据所述类型,为所述全局唯一序列号匹配对应的算法,生成全局唯一序列号。

专利文献cn110147281a(申请号:201910402592.2)公开了一种通过计算机实现的优化雪花算法在金融业务中应用的方法,该方法包括:创建用雪花算法来生成分布式id序号的金融业务进程;在所述金融业务进程中,若发生服务器时钟回拔,则以雪花算法计数到的最后毫秒数作为当前时间戳来继续生成id序号,分配金融业务进程,实现在高并发金融业务场景下,持续稳定地产生趋势增长、全局唯一的id序号。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种基于优化后的雪花算法在工业大数据中的应用方法及系统。

根据本发明提供的一种基于优化后的雪花算法在工业大数据中的应用方法,包括:

步骤m1:对雪花算法进行优化,保证工业大数据的分布式环境下id的全局唯一性;

步骤m2:将优化后的雪花算法的实现代码封装为工具类,并将工具类包装为模块;

步骤m3:基于不同的开发场景对java编写的源代码进行编译;

步骤m4:将java源代码编译成功后生成的字节码文件打包成jar包;

步骤m5:基于不同的开发场景在工业大数据中根据引入jar包,使用优化雪花算法生成唯一id。

优选地,所述雪花算法进行优化包括:

将预设的机器id包括预设的工作机器id和预设的数据中心id,保证最终生成的id的唯一性;

所述数据中心id是根据包括当前机器的网络状态和网卡的mac地址计算生成数据中心id;

所述工作机器id是根据包括数据中心id、当前机器上jvm运行的java进程名称和jvm中的实例对象名称计算生成工作机器id;

所述雪花算法进行优化还包括截取时间戳的预设部分内容作为生成id算法的一部分,从而保证id的长度。

优选地,所述步骤m3包括:

基于非spring开发场景,对java编写的源代码进行编译;

基于spring开发场景,基于mybatis开发autold注解和针对autold注解的id拦截器;基于maven对java编写的源代码进行编译。

优选地,所述编译包括:针对原生的java开发环境,使用jdk中的javac命令编译java源代码;针对集成开发环境,使用集成从开发环境的命令编译java源代码。

优选地,所述步骤m5包括:

基于非spring开发场景,引入jar包后直接使用工具类生成唯一id;

基于spring开发场景,引入jar包后直接使用autold注解生成唯一id。

优选地,所述基于spring开发场景,引入jar包后直接使用autold注解包括基于spring的开发场景下,在dao层实体类中对需要自动生成id的字段属性上添加@autoid注解完成当前字段属性的赋值。

根据本发明提供的一种基于优化后的雪花算法在工业大数据中的应用系统,包括:

模块m1:对雪花算法进行优化,保证工业大数据的分布式环境下id的全局唯一性;

模块m2:将优化后的雪花算法的实现代码封装为工具类,并将工具类包装为模块;

模块m3:基于不同的开发场景对java编写的源代码进行编译;

模块m4:将java源代码编译成功后生成的字节码文件打包成jar包;

模块m5:基于不同的开发场景在工业大数据中根据引入jar包,使用优化雪花算法生成唯一id。

优选地,所述雪花算法进行优化包括:

将预设的机器id包括预设的工作机器id和预设的数据中心id,保证最终生成的id的唯一性;

所述数据中心id是根据包括当前机器的网络状态和网卡的mac地址计算生成数据中心id;

所述工作机器id是根据包括数据中心id、当前机器上jvm运行的java进程名称和jvm中的实例对象名称计算生成工作机器id;

所述雪花算法进行优化还包括截取时间戳的预设部分内容作为生成id算法的一部分,从而保证id的长度。

优选地,所述模块m3包括:

基于非spring开发场景,对java编写的源代码进行编译;

基于spring开发场景,基于mybatis开发autold注解和针对autold注解的id拦截器;基于maven对java编写的源代码进行编译;

所述编译包括:针对原生的java开发环境,使用jdk中的javac命令编译java源代码;针对集成开发环境,使用集成从开发环境的命令编译java源代码。

优选地,所述模块m5包括:

基于非spring开发场景,引入jar包后直接使用工具类生成唯一id;

基于spring开发场景,引入jar包后直接使用autold注解生成唯一id;

所述基于spring开发场景,引入jar包后直接使用autold注解包括基于spring的开发场景下,在dao层实体类中对需要自动生成id的字段属性上添加@autoid注解完成当前字段属性的赋值。

与现有技术相比,本发明具有如下的有益效果:

1、本发明通过优化雪花算法的实现,针对工业大数据领域分布式应用场景,解决了自动生成全局唯一序列号的问题,并且在应用开发实践中,达到了算法的无侵入式使用,降低了算法的接入时间成本和人力成本,极大地提高了研发效率;

2、本发明通过改造原生的雪花算法实现,考虑在工业大数据领域的分布式应用场景下,结合工业大数据现场情况,实现数据中心id和工作机器id的自动生成,并保证了最终生成的id的长度控制在15位,并且趋势是全局递增的;

3、本发明通过采用基于spring的开发模式,将算法的实现模块化,组件化并最终以jar包和注解的方式提供给调用者,极大的降低了算法使用的人力成本和时间成本。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为基于优化后的雪花算法在工业大数据中的应用方法流程图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

实施例1

根据本发明提供的一种基于优化后的雪花算法在工业大数据中的应用方法,包括:如图1所示,

步骤m1:对雪花算法进行优化,保证工业大数据的分布式环境下id的全局唯一性;

步骤m2:将优化后的雪花算法的实现代码封装为工具类,并将工具类包装为模块;

步骤m3:基于不同的开发场景对java编写的源代码进行编译;

步骤m4:将java源代码编译成功后生成的字节码文件打包成jar包;

步骤m5:基于不同的开发场景在工业大数据中根据引入jar包,使用优化雪花算法生成唯一id。

具体地,所述雪花算法进行优化包括:

将10bit机器id包括6bit工作机器id和4bit数据中心id,保证最终生成的id的唯一性;

所述数据中心id是根据包括当前机器的网络状态和网卡的mac地址计算生成数据中心id;

所述工作机器id是根据包括数据中心id、当前机器上jvm运行的java进程名称和jvm中的实例对象名称计算生成工作机器id;

所述雪花算法进行优化还包括截取时间戳的预设部分内容作为生成id算法的一部分,从而保证id的长度。

具体地,所述步骤m3包括:

基于非spring开发场景,对java编写的源代码进行编译;

基于spring开发场景,基于mybatis开发autold注解和针对autold注解的id拦截器;基于maven对java编写的源代码进行编译。即单独将自动生成id的功能以注解(如autoid)的方式提供给调用者。

具体地,所述编译包括:针对原生的java开发环境,使用jdk中的javac命令编译java源代码;针对集成开发环境,使用集成从开发环境的命令编译java源代码。

具体地,所述步骤m5包括:

基于非spring开发场景,引入jar包后直接使用工具类生成唯一id;

基于spring开发场景,引入jar包后直接使用autold注解生成唯一id。

具体地,所述基于spring开发场景,引入jar包后直接使用autold注解包括基于spring的开发场景下,在dao层实体类中对需要自动生成id的字段属性上添加@autoid注解完成当前字段属性的赋值。

在用户服务中,我们需要对用户信息进行管理,而用户id就必须保证全局唯一。在这种场景下,新增用户时,我们可以使用以下步骤集成该算法来保证新增用户的id全局唯一:

步骤1:在项目工程中引入commonservice.jar;

步骤2:在sqlfactory中织入commonsevice中的autoidinterceptor;

步骤3:直接在user这个实体类中的id字段上添加@autoid注解。

根据本发明提供的一种基于优化后的雪花算法在工业大数据中的应用系统,包括:

模块m1:对雪花算法进行优化,保证工业大数据的分布式环境下id的全局唯一性;

模块m2:将优化后的雪花算法的实现代码封装为工具类,并将工具类包装为模块;

模块m3:基于不同的开发场景对java编写的源代码进行编译;

模块m4:将java源代码编译成功后生成的字节码文件打包成jar包;

模块m5:基于不同的开发场景在工业大数据中根据引入jar包,使用优化雪花算法生成唯一id。

具体地,所述雪花算法进行优化包括:

将10bit的机器id包括6bit工作机器id和4bit数据中心id,保证最终生成的id的唯一性;

所述数据中心id是根据包括当前机器的网络状态和网卡的mac地址计算生成数据中心id;

所述工作机器id是根据包括数据中心id、当前机器上jvm运行的java进程名称和jvm中的实例对象名称计算生成工作机器id;

所述雪花算法进行优化还包括截取时间戳的预设部分内容作为生成id算法的一部分,从而保证id的长度。

具体地,所述模块m3包括:

基于非spring开发场景,对java编写的源代码进行编译;

基于spring开发场景,基于mybatis开发autold注解和针对autold注解的id拦截器;基于maven对java编写的源代码进行编译;即单独将自动生成id的功能以注解(如autoid)的方式提供给调用者。

所述编译包括:针对原生的java开发环境,使用jdk中的javac命令编译java源代码;针对集成开发环境,使用集成从开发环境的命令编译java源代码。

具体地,所述模块m5包括:

基于非spring开发场景,引入jar包后直接使用工具类生成唯一id;

基于spring开发场景,引入jar包后直接使用autold注解生成唯一id;

所述基于spring开发场景,引入jar包后直接使用autold注解包括基于spring的开发场景下,在dao层实体类中对需要自动生成id的字段属性上添加@autoid注解完成当前字段属性的赋值。

在用户服务中,我们需要对用户信息进行管理,而用户id就必须保证全局唯一。在这种场景下,新增用户时,我们可以使用以下步骤集成该算法来保证新增用户的id全局唯一:

模块1:在项目工程中引入commonservice.jar;

模块2:在sqlfactory中织入commonsevice中的autoidinterceptor;

模块3:直接在user这个实体类中的id字段上添加@autoid注解。

实施例2

实施例2是实施例1的变化例

改进雪花算法本身以确保生成的全局id序号是持续稳定地增长,且长度不超过15位;实现在高并发工业大数据业务场景下,方便、高效、无侵入式地使用本算法产生全局唯一的id序号,提高研发效率。

一种面向工业大数据领域的全局唯一序列号的生成算法实现原理如下:

原始的雪花算法生成的id是64bit,换算成整数是19位数字,且其中的工作机器id只能按照简单的规则生成或者手动定义,这样就并不能完全保证工业大数据的分布式环境下的id的全局唯一性。

将预设的机器id包括预设的工作机器id和预设的数据中心id,保证最终生成的id的唯一性;

自动生产数据中心id:

步骤1:获取网络状态;

步骤2:获取mac地址;

步骤3:根据网络状态和mac地址计算得到数据中心id。

自动生成工作机器id:

步骤1:从jvm中获取当前运行的进程pid

步骤2:根据mac+pid的hascode获取低16位

(mpid.tostring().hashcode()&0xffff)%(maxworkerid+1),maxworkerid就是63。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

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