zoukankan      html  css  js  c++  java
  • 应用程序中主键ID生成与UUID


    应用程序中主键ID生成与UUID

    1.ID生成策略

     在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。
      
      在许多数据库里面,都提供了ID生成的机制,如Oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的,所以很多

    人愿意找寻一种通用的方式。
      
      编写代码,1、2、3……这样一直累加是最直接的想法,JAVA用以下方式去实现
      
      private static AtomicInteger uniqueId = new AtomicInteger(0);
      
      public static String nextId() {
      return Integer.toString(uniqueId.incrementAndGet());
      }
      
      当然,这样太简单了,并且一重新启动,计数器就归 0 了,一般的做法可以用 时间 + 计数器 的方式,


    2.集群环境ID生成

     在一个群集的环境里面,通常还需要加上IP的前缀,即 IP + 时间 + 计数器,这个就是JAVA原版本的实现了。


    3.UUID
    UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在

    同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址

    、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部

    分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同)

    ,时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),

    UUID的唯一缺陷在于生成的结果串会比较长。

    //d68de284-475e-41d6-b193-da8cc5052a79




    在Java中生成UUID主要有以下几种方式:

    1. JDK1.5
    如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可.
    UUID.randomUUID().toString()

    //d68de284-475e-41d6-b193-da8cc5052a79


    2. 第三方开源类库(推荐使用):
    最著名的是 JUG .特点上是: 纯Java实现,开源,LGPL协议。采用了Native的方式产生真正的Uuid.而

    且提供了不同平台的实现,包括:
    Linux / x86
    Windows (98, ME, NT, 2K, XP?) / x86
    Solaris / Sparc
    Mac OS X
    FreeBSD / x86
    import org.safehaus.uuid.UUID;
    import org.safehaus.uuid.UUIDGenerator;
    public class Test {
    public static void main(String[] args){
    //http://jug.safehaus.org/
    UUIDGenerator g=UUIDGenerator.getInstance();
    UUID uuid=g.generateRandomBasedUUID();
    System.out.println(uuid.toString());
    }
    }



    Powered by Zoundry

  • 相关阅读:
    Web 服务器配置
    Web 浏览
    C++ Web 编程
    C++ 多线程
    C++ 信号处理
    C++ 预处理器
    C++ 模板
    C++ 命名空间
    C++ 动态内存
    C++ 异常处理
  • 原文地址:https://www.cnblogs.com/attilax/p/15200060.html
Copyright © 2011-2022 走看看