Java中的顺序Guid
考虑到我在Microsoft.NET framework(请参阅)上发布的关于顺序guid性能的帖子,是否有人对在Windows DLL中实现的相同算法拥有正确、可靠、快速且运行良好的Java实现 问候Java中的顺序Guid,java,guid,sequential,Java,Guid,Sequential,考虑到我在Microsoft.NET framework(请参阅)上发布的关于顺序guid性能的帖子,是否有人对在Windows DLL中实现的相同算法拥有正确、可靠、快速且运行良好的Java实现 问候 Massimo我使用它为我的DTO生成UUID(通用唯一ID),作为临时集合的代理键。不知道这是否是同一件事,但它可能会为你指明正确的方向 import java.util.UUID; ... private String uuid=null; ... protected Str
Massimo我使用它为我的DTO生成UUID(通用唯一ID),作为临时集合的代理键。不知道这是否是同一件事,但它可能会为你指明正确的方向
import java.util.UUID;
...
private String uuid=null;
...
protected String getUuid() {
synchronized (this) {
if (null ==uuid) {
uuid = UUID.randomUUID().toString();
}
return uuid;
}
}
参见本文:(链接至第7页)
它包含一个算法,作者称之为“COMB”guid;我将他的代码(SQL)复制如下:
将其转换为Java或您想要的语言非常简单。显而易见的基本原则是将日期作为Guid的一个组件。整篇文章读得很好,因为他对各种方法的性能做了很好的分析。此页面链接到Java中的几个版本1(顺序)UUID实现:
对于顺序UUID,您正在寻找版本1 UUID。该项目似乎运行良好,并且非常易于使用:
Generators.timeBasedGenerator().generate().toString()
Jimmy Nilsson在本文中构思的用于生成COMB UUID的实用程序类:。请随意使用和分享
打包您的.package.name;
导入java.security.SecureRandom;
导入java.util.Random;
导入java.util.UUID;
/**
*创建梳状UUID的实用程序类。
*
*COMB uuid将创建时间和随机字节组合在一起。
*
*前缀或后缀有6个字节,对应于自
*1970-01-01T00:00:00Z(Unix时代)。
*
*为了符合RFC-4122,它使用版本号4。
*
*阅读:guid作为主键的成本
* http://www.informit.com/articles/article.aspx?p=25862
*
*/
公共抽象类CombUuidCreator{
私有静态最终int随机_版本=4;
/**
*返回前缀COMB UUID。
*
*它使用线程本地{@link SecureRandom}。
*
*@返回一个基于随机的UUID
*/
公共静态UUID getPrefixComb(){
返回getPrefixComb(SecureRandomLazyHolder.THREAD\u LOCAL\u RANDOM.get());
}
/**
*返回前缀COMB UUID。
*
*它使用{@link Random}的任何实例。
*
*@返回一个基于随机的UUID
*/
公共静态UUID getPrefixComb(随机){
返回getCombGuid(随机,/*前缀=*/true);
}
/**
*返回后缀COMB UUID。
*
*它使用线程本地{@link SecureRandom}。
*
*@返回一个基于随机的UUID
*/
公共静态UUID getSuffixComb(){
返回getSuffixComb(SecureRandomLazyHolder.THREAD\u LOCAL\u RANDOM.get());
}
/**
*返回后缀COMB UUID。
*
*它使用{@link Random}的任何实例。
*
*@返回一个基于随机的UUID
*/
公共静态UUID getSuffixComb(随机){
返回getCombGuid(随机,/*前缀=*/false);
}
/**
*返回前缀或后缀COMB UUID。
*
*它使用{@link Random}的任何实例。
*
*@返回一个基于随机的UUID
*/
专用静态UUID getCombGuid(随机、布尔前缀){
长msb=0;
长lsb=0;
//(3)随机设置位
最终字节[]字节=新字节[16];
随机。下一个字节(字节);
final long rand0=(bytes[8]不,这会创建一个标准的随机Guid,我需要一个顺序Guid。链接似乎已断开。一些搜索显示,这可能就是本文讨论的项目:谢谢。第一次查看后,生成的UUID似乎是顺序的。也许我与页面拆分的斗争还没有失败。。
Generators.timeBasedGenerator().generate().toString()
// Prefix COMB using thread local `java.security.SecureRandom` (DEFAULT)
CombUuidCreator.getPrefixComb()
0173861f-4445-459b-87d2-39a970520fff
0173861f-4445-465d-a216-7b13d86c83a1
0173861f-4445-4c67-b75e-3845c2911420
|----prefix---|----------------------|
// Prefix COMB using `java.util.Random` (FASTER)
CombUuidCreator.getPrefixComb(new Random())
0173861f-4445-44f6-bfa4-e272c9c369aa
0173861f-4445-446e-baf2-6db6ab808094
0173861f-4445-40e8-a452-184dcf9736fd
|----prefix---|----------------------|
// Suffix COMB using thread local `java.security.SecureRandom` (DEFAULT)
CombUuidCreator.getSuffixComb()
726b6717-001a-4317-9a9b-0173861f4446
dfdce2d2-7517-4a3f-9f3d-0173861f4446
a7fd6236-8065-4395-b49a-0173861f4446
|-----------------------|---suffix---|
// Suffix COMB using `java.util.Random` (FASTER)
CombUuidCreator.getSuffixComb(new Random())
41a6a4cd-eb4c-410f-8eb2-0173861f4446
7c0a315e-54de-476a-a2a8-0173861f4446
4e9ddf9e-ac07-4cf3-bf3f-0173861f4446
|-----------------------|---suffix---|