uuid生成器源代码(UUID生成器)
admin 发布:2022-12-19 18:20 95
本篇文章给大家谈谈uuid生成器源代码,以及UUID生成器对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、os 怎么改hardware uuid
- 2、java自带的uuid生成器生成的uuid靠谱吗
- 3、etl 导excl怎么生成uuid
- 4、分布式ID生成器
- 5、使用java.util.UUID生成唯一标识,为什么生成唯一标识的方法有些还需要参数?
os 怎么改hardware uuid
Java UUID Generator (JUG):开源UUID生成器,LGPL协议,支持MAC地址。
UUID:特殊的License,有源码。
Java 5以上版本中自带的UUID生成器:好像只能生成Version 3/4的UUID。
java自带的uuid生成器生成的uuid靠谱吗
这是靠谱的。
因为java自带的UUID类,它是通过结合机器的网卡、时间、一个随即数来生成ID的。如果一台机器每秒产生10000000个ID,可以保证(概率意义上)3240年不重复。
etl 导excl怎么生成uuid
1、创建数据库表
在创建数据库的时候,主键的主键的生成方式通常有两种,一种是利用数据库的主键自增,产生主键,这也是常用的主键的生成方式。另一种为通过生成的随机序列当做主键。通过excel导入数据库时,excel的数据中包含随机序列时,可以直接将数据导入数据库,当做主键使用。但是如果没有的话,处理则相对比较麻烦(本博客介绍不包含随机数列的情况)。
没有随机数列时,为了能够将excel中的数据导入数据库中,创建数据库表时,暂时将主键去掉,只保留主键字段。在此,我们创建test表,主键id并未标记。
CREATE TABLE `test` (
`ID` varchar(50) DEFAULT NULL COMMENT '测试id',
`NAME` varchar(100) DEFAULT NULL COMMENT '名称',
`CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
`UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表';
2、将excel数据导入数据库表test中
注意:先用excel打开excel表格,否则会提示无法打开excel文件
右键test-导入向导-Excel文件(2007或以上版本)(*.xlsx)-导入-下一步-下一步
在对应的“源栏位”处选择excel中对应的内容,然后依次点击下一步-下一步-开始,完成excel中数据导入数据库表中。
3、在id中生成uuid
UPDATE test SET ID= UUID();
注意,生成id时,不要直接将uuid()产生的序列中的''-"通过Replace方法去掉,不然生成的id的将全部相同。
4、将生成的id中的"-"替换掉
UPDATE test SET ID = (SELECT REPLACE(ID,'-',''));
5、生成时间
UPDATE test SET UPDATE_TIME = CURRENT_TIMESTAMP();
6、生成标准化的数据库
首先,将已经导入到test表中的数据通过sql转储,进行保存。然后将test表删除,然后建立标准的数据库test表(比如主键为id,创建时间为非空等),最后将sql转储的数据导入的数据库表中,完成数据的导入。
分布式ID生成器
在分布式系统中,往往需要对大量的数据和消息进行唯一标识,此时一个能够生成全局唯一ID的系统是非常必要的,那么业务系统对ID号的要求有哪些呢?
UUID
UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的36个字符,示例:5e8c4456-6166-40d6-9b9f-fb37a150bc6e,到目前为止业界一共有5种方式生成UUI,Java标准类库中已经提供了UUID的API。
优点:
缺点:
类snowflake方案
雪花ID生成的是一个64位的二进制正整数,然后转换成10进制的数。64位二进制数由如下部分组成:
41-bit的时间可以表示(1L41)/(1000L*3600*24*365)=69年的时间,10-bit机器可以分别表示1024台机器。如果我们对IDC划分有需求,还可以将10-bit分5-bit给IDC,分5-bit给工作机器。这样就可以表示32个IDC,每个IDC下可以有32台机器,可以根据自身需求定义。12个自增序列号可以表示2^12个ID,理论上snowflake方案的QPS约为409.6w/s,这种分配方式可以保证在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的。
但是对于绝大部分普通应用程序来说,根本不需要每秒超过400万的ID,机器数量也达不到1024台,所以,我们可以改进一下,使用更短的ID生成方式:53bitID由32bit秒级时间戳+16bit自增+5bit机器标识组成,累积32台机器,每秒可以生成6.5万个序列号。
代码示例
最后,为什么采用最多53位整型,而不是64位整型?这是因为考虑到大部分应用程序是Web应用,如果要和JavaScript打交道,由于JavaScript支持的最大整型就是53位,超过这个位数,JavaScript将丢失精度。因此,使用53位整数可以直接由JavaScript读取,而超过53位时,就必须转换成字符串才能保证JavaScript处理正确,这会给API接口带来额外的复杂度。
参考资料:
使用java.util.UUID生成唯一标识,为什么生成唯一标识的方法有些还需要参数?
//先看不加参数的源码
public static UUID randomUUID() {
SecureRandom ng = Holder.numberGenerator;
byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] = 0x0f; /* clear version */
randomBytes[6] |= 0x40; /* set to version 4 */
randomBytes[8] = 0x3f; /* clear variant */
randomBytes[8] |= 0x80; /* set to IETF variant */
return new UUID(randomBytes);//看到这里没,其实也是调用的带参数的,只不过
//所带参数的是给你随机出来的
}
//再看带参数的
public static UUID nameUUIDFromBytes(byte[] name) {
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsae) {
throw new InternalError("MD5 not supported");
}
byte[] md5Bytes = md.digest(name);//这里就是对给的byte[]参数进行md5运算之后再进行计算UUID
md5Bytes[6] = 0x0f; /* clear version */
md5Bytes[6] |= 0x30; /* set to version 3 */
md5Bytes[8] = 0x3f; /* clear variant */
md5Bytes[8] |= 0x80; /* set to IETF variant */
return new UUID(md5Bytes);
}
uuid生成器源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于UUID生成器、uuid生成器源代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 04-272048java源代码的简单介绍[20240427更新]
- 04-27学生选课系统asp设计源代码的简单介绍[20240427更新]
- 04-27用了上家公司源代码(把上家公司的代码给了别人)[20240427更新]
- 04-27如何查看word源代码(word文档源代码查看)[20240427更新]
- 04-27金蟾捕鱼手游源代码(金蟾捕鱼源码下载)[20240427更新]
- 04-27java问卷调查系统源代码(java开源调查问卷系统)[20240427更新]
- 04-27asp.net的网页ftp上传下载源代码(java ftp上传下载文件)[20240427更新]
- 04-26电脑的源代码(电脑源代码显示什么按键)[20240426更新]
- 04-26中文分词源代码(中文分词api)[20240426更新]
- 04-26jsp汽车租赁系统源代码的简单介绍[20240426更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接