Java中的顺序Guid

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

考虑到我在Microsoft.NET framework(请参阅)上发布的关于顺序guid性能的帖子,是否有人对在Windows DLL中实现的相同算法拥有正确、可靠、快速且运行良好的Java实现

问候
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---|